
1. 入参和默认变量
$0
:执行的脚本名$1
:第一个参数$2
:第二个参数$#
:脚本后面传入的参数个数$@
:所有参数,并且可以被遍历$*
:所有参数,不加引号时与$@
相同,具体区别请移步 参考文章$?
:上一条命令的退出状态两个$
:当前脚本的进程 ID
2. 变量
使用=
给变量赋值:
注意:
=
两边不能有空格,等号右边有空格的字符串也必须用引号括起来
使用unset
取消变量:
使用变量时,需要在变量前添加$
,或者变量名两边添加{}
:
3. 命令执行
4. 条件分支
if 语句
一般来说,如果命令成功执行,则其返回值为0
,因此可通过下面的方式判断上一条命令的执行结果:
case 语句
case
语句的使用方法如下:
需要注意以下几点:
[]
前面要有空格,里面是逻辑表达式if elif
后面要跟then
,之后才是要执行的语句- 如果想打印上一条命令的执行结果,最好的做法是将
$?
赋给一个变量,因为一旦执行了一条命令,$?
的值就可能会变 case
语句的每个分支最后以两个;;
结尾,最后是esac
使用多个条件
有两种写法:
-a
,同&&
,表示与-o
,同||
,表示或!
,表示非
整数判断
-eq
:两数是否相等-ne
:两数是否不等-gt
:前者是否大于后者-lt
:前者是否小于后者-ge
:前者是否大于等于后者-le
:前者是否小于等于后者
文件目录判断
-f $filename
:是否为文件-e $filename
:是否存在-d $filename
:是否为目录-s $filename
:文件存在且不为空! -s $filename
:文件是否为空
5. 循环
for in
遍历输出脚本的参数:
还可以指定循环变量范围:
在此基础上指定循环步长:
for do
while do
until do
6. 函数
函数定义如下:
或者:
函数调用:
7. 返回值
通常函数的return
返回值只支持0-255
,因此想要获得其他形式的返回值,可以通过下面的方式:
通过return
的方式适用于判断函数的执行是否成功:
8. 注释
9. 日志保存
脚本执行后免不了要记录日志,常用的方法是重定向。
方式一,将标准输出保存到文件中,并在控制台打印标准错误:
方式二,将标准输出和标准错误都保存到日志文件中:
方式三,保存日志文件的同时,也输出到控制台:
10. 脚本执行
11. 脚本退出码
很多时候我们需要获取脚本的执行结果,即退出状态。通常0
表示执行成功,而非0
表示执行失败。
为了获得退出码,我们需要使用exit
,例如:
这里需要注意的是,使用:
这样的语句来执行函数,即使函数里面有exit
,它也不会退出脚本执行,而只是会退出该函数。这是因为exit
是退出当前进程,而这种方式执行函数,相当于fork
了一个子进程,因此不会退出当前脚本。
所以无论你的函数参数是什么,最后都会打印: