目录
shell脚本有什么用?
第一个shell脚本
shell基本语法
shell变量
shell三种变量
环境级变量
用户级变量
系统级变量
在shell脚本中进行数学运算
shell数组
基本数组
关联数组
流程控制
If语句
Case语句
循环语句
While语句
For语句
上节我们学习了常用库libevent,本节开始学习shell脚本!
shell脚本有什么用?
Shell其实也是一门语言,在嵌入式开发里面经常会用到。
在Linux中有很多操作命令,如果为了节约时间,可以写一个shell脚本,里面包含了很多命令,执行shell脚本就相当于执行这些命令。
所以shell脚本里面其实就是这些命令的集合和shell的一些语法。基本上自动化的领域离不开shell脚本。
如果你想要作系统启动之后自动启动一些服务(类似windows开机之后会有一些自启动软件),我们就可以用shell来完成。
第一个shell脚本
接下来开始演示第一个shell脚本
注:脚本文件一般以.sh结尾(这个不是后缀,在Linux系统里面没有后缀这个说法)
在shell中,#表示注释,但是第一行的#号后面紧跟着一个!感叹号,说明第一行#不是注释的意思,第一行这里的意思是:使用/bin/bash来解析脚本
/bin/bash是一个文件
有些地方也用/bin/sh来解析
两者在语法差不多。
我们就简单用这个程序输出一个Helloworld就行了
echo就相当于C语言中的printf。
编译的时候的命令是:chmod +x 文件名
执行命令可以任意选择以下一种:
./文件名
bash 文件名
sh 文件名
调试的时候可以用这条命令:
bash -x 文件名
这条命令相当于是一句一句的执行并打印出来
结果:
echo这条命令可以直接在终端的屏幕中打印,数据可加双引号也可不加
它也可以将数据输出到一个指定的文件里面
> 是一个重定向符,如果没有那个指定的文件就创建一个再将数据写入里面
查看文件里面的数据可以用:cat 文件名
如果我们再用echo输出到这xx文件,它就会将原来的数据覆盖掉
如果不想覆盖到原来的数据可以用>>这个符号
shell基本语法
shell变量
在shell中没有定义变量这个说法,直接声明,没有数据类型
注意:在shell中空格是不能乱加的,这和C语言不一样,比如在等于号和数据之间不能有空格
在shell脚本中也有命令行参数
Shell里面有三种变量:
shell三种变量
环境级变量
当我们输入export后就跳出这么多变量
其中HOME="/root",HOME就是一个环境变量,它的值是/root
环境变量可用于不同脚本之间的通信
我们可以自己定义一个环境变量
在脚本里面可以直接使用环境变量
如果我们把这个环境变量删掉再打印就没了
打印出来是空的了
环境级变量只有在当前的终端下才可以用,比如我们重开一个终端窗口直接运行这个.sh文件打印是打印不出来的
并且也找不到AA这个变量
所以环境级变量只能在当前这个终端窗口可用,如果换一个终端或者换一个用户去登录的话就不可用了。
我们也可以直接把这个变量写入这个.sh文件里面去
这样打印就能打印出来
换个终端窗口执行它也能打印,这是因为这个程序里有export这句代码,换一个终端窗口执行只要执行了export,这个环境变量就生效,就能打印。
当时一旦我们注释掉export这行代码它就打印不出来了,这就是环境级变量
用户级变量
想要让export AA=100变成用户级变量则需要修改配置文件
在家目录下有个.profile的文件,我们只要把环境变量加进这个文件就可以了,怎么加?
但是./profile这个文件有的环境下没有,而>>这个符号是重定向符,如果没有.profile这个文件就会生成这个文件,然后输入进去
现在export AA=100这个环境变量已经输入到家目录下的.profile文件中了
接下来我们不需要执行export这句代码了,把执行export这行代码注释掉,,单独执行.profile文件,
运行后它还是能打印
并且这样换个终端窗口也能打印
这就是环境变量和用户变量的区别
但是每个用户都对应一个profile文件,切换不同用户会有不同的profile文件,不同profile文件对应不同的环境变量,因此切换到不同用户后就不能用这个.profile里面的export AA=100环境级变量了
系统级变量
不限终端也不限用户,只要是登录操作系统都可以用
系统级变量也要修改一个配置文件,这里我们要将环境变量添加到根目录下的etc中的profile文件
现在我们把这句注释掉,
然后切换个用户测试一下
注:创建新用户turbo后,如果想要删除用户就用userdel turbo命令,如果要切换到turbo,就输入su turbo
切换用户后还是能运行
然后我们用新用户登录系统测试一下
可以看到它也能打印出来,因此我们将环境变量输入到/etc/profile中它就是系统级的环境变量
接下来学习在shell脚本里面如何进行数学运算
在shell脚本中进行数学运算
以下三种写法都可以,
中括号[]等于两个小括号
“num=` expr 表达式 ` ”这个表示取后面的表达式的结果给num
shell数组
Shell数组有基本数组和关联数组
注:shell是不分字符和字符串的
基本数组
echo ${array1[0]} 表示访问数组1的第0个元素
关联数组
注意如果运行的时候报这个错误:
那就需要升级bash,升级操作推荐博文:
linux更新bash版本,shell升级,Linux系统升级bash----------CSDN博客
流程控制
If语句
Test这个命令也可以在脚本里面使用,输入命令:man 1 test就可以查看test这个命令的介绍
还可以用这选择做一个入参判断,如果我们忘记输入参数了就给个提示
这个test里面很多命令都是可以在脚本里面使用,今后想用哪个可以自己查阅,这里就不一一测试了。
Case语句
这两个不正常可能是编码的问题
我们可以修改这个环境变量
修改成C,等待测试完之后再换回这个zh_CN.UTF-8(注意:不换回zh_CN.UTF-8的话之后就写不了中文了)
循环语句
While语句
这样它就把当前文件夹下的6.case.sh文件中的内容全部输出了
For语句
这样循环5次后确实创建了5个文件夹
进入每个文件夹后,都有一个同名的文件夹,里面都写this is这句话
这样循环5次后确实创建了5个文件夹,进入每个文件夹后都会有一个同名的文件
文件里写着一句话
还可以另外写一个for循环进去这个文件里面把这个内容改掉
以上就是shell脚本一些基础操作,如果我们以后可以使用shell脚本来代替执行很多重复繁琐的命令,效率可以大大提高。
还有一些关于shell脚本的高级操作,之后有空的话再更新,敬请期待。
下节开始复习C++!
如有问题可评论区或者私信留言,如果想要进交流群请私信!