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/bashif ls;ls;then echo ==111==else echo ==222==fiif ls;lss;then echo ==333==else echo ==444==fi$ ./testtest test_1 test1test 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/bashif ((1+1));then echo ==111==else echo ==222==fiif ((1-1));then echo ==333==else echo ==444==fi$ ./test==111====444==
[[ 条件表达式 ]] 组成 test-commands
// 文件 test#!/usr/bin/bashif [[ str1 == str* ]];then echo ==111==else echo ==222==fiif [[ 'str1' = 'str2' ]];then echo ==333==else echo ==444==fi$ ./test==111====444==
[ 条件表达式 ] 组成 test-commands
同 test 表达式
,相似 [[ 条件表达式 ]]
// 文件 test#!/usr/bin/bashif [ str1 == str* ];then echo ==111==else echo ==222==fiif [ 'str1' = 'str2' ];then echo ==333==else echo ==444==fi$ ./test==222====444==
[[]] 与 [] 的区别
- 在
[[]]
中,不会进行分词、文件名扩展。 - 在
[[]]
中,==
和!=
右侧的操作数,被当做是正则表达式。(=
等同于==
)
参考
- Bash Reference Manual:https://www.gnu.org/software/...