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/...
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。