exit status
上一个命令执行完后,退出时返回的状态值。
0
示意胜利; 非 0
示意失败。
在命令行中能够打印查看上一个状态值
$ echo $?
依赖于 exit status 的 if、until、while
-
until 的语法:
until test-commands; do consequent-commands; done
-
while 的语法
while test-commands; do consequent-commands; done
-
if 的语法
if test-commands; then consequent-commands; [elif more-test-commands; then more-consequents;] [else alternate-consequents;] fi
test-commands
执行之后,if
、until
、while
依赖于它的 exit status
:
- 为 0 时,if 执行;
- 为 1 时,until 执行;
- 为 0 时,while 执行。
test-commands 蕴含的状况
一组或多组管道组成 test-commands
- 多组管道之间能够由
;
,&
,&&
, 或||
分隔, - 由
;
,&
, 或换行
完结; exit status
由最初一组管道的exit status
决定;- 一个或多个命令组成一个管道,由
|
或|&
分隔,由最初一个命令的exit status
决定管道的exit status
; -
一般而言,单个命令执行胜利,状态值为 0。
// 文件 test #!/usr/bin/bash if ls;ls;then echo ==111== else echo ==222== fi if ls;lss;then echo ==333== else echo ==444== fi $ ./test test test_1 test1 test test_1 test1 ==111== test test_1 test1 ./test: line 8: lss: command not found ==444==
((算术表达式)) 组成 test-commands
同 let "expression"
。
加减乘除等,计算出来的值为 0,exit status
值为 1;计算出来的值为非 0,exit status
值为 0;
// 文件 test
#!/usr/bin/bash
if ((1+1));then
echo ==111==
else
echo ==222==
fi
if ((1-1));then
echo ==333==
else
echo ==444==
fi
$ ./test
==111==
==444==
[[条件表达式]] 组成 test-commands
// 文件 test
#!/usr/bin/bash
if [[str1 == str*]];then
echo ==111==
else
echo ==222==
fi
if [['str1' = 'str2']];then
echo ==333==
else
echo ==444==
fi
$ ./test
==111==
==444==
[条件表达式] 组成 test-commands
同 test 表达式
,相似 [[条件表达式]]
// 文件 test
#!/usr/bin/bash
if [str1 == str*];then
echo ==111==
else
echo ==222==
fi
if ['str1' = 'str2'];then
echo ==333==
else
echo ==444==
fi
$ ./test
==222==
==444==
[[]] 与 [] 的区别
- 在
[[]]
中,不会进行分词、文件名扩展。 - 在
[[]]
中,==
和!=
右侧的操作数,被当做是正则表达式。(=
等同于==
)
参考
- Bash Reference Manual:https://www.gnu.org/software/…