bash(if、until、while中的test-commands)

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 执行之后,ifuntilwhile 依赖于它的 exit status
  1. 为 0 时,if 执行;
  2. 为 1 时,until 执行;
  3. 为 0 时,while 执行。
test-commands 包含的情况 一组或多组管道组成 test-commands
  1. 多组管道之间可以由 ; , &, &&, 或 ||分隔,
  2. ; , &, 或 换行 结束;
  3. exit status 由最后一组管道的 exit status 决定;
  4. 一个或多个命令组成一个管道,由||& 分隔,由最后一个命令的 exit status 决定管道的 exit status
  5. 一般而言,单个命令执行成功,状态值为0。
    // 文件test #!/usr/bin/bash if ls; ls; then echo ==111== else echo ==222== fiif ls; lss; then echo ==333== else echo ==444== fi$ ./test testtest_1test1 testtest_1test1 ==111== testtest_1test1 ./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== fiif ((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== fiif [[ 'str1' = 'str2' ]]; then echo ==333== else echo ==444== fi$ ./test ==111== ==444==

[ 条件表达式 ] 组成 test-commands
【bash(if、until、while中的test-commands)】test 表达式,类似 [[ 条件表达式 ]]
// 文件 test #!/usr/bin/bash if [ str1 == str* ]; then echo ==111== else echo ==222== fiif [ 'str1' = 'str2' ]; then echo ==333== else echo ==444== fi$ ./test ==222== ==444==

[[]] 与 [] 的区别
  1. [[]] 中,不会进行分词、文件名扩展。
  2. [[]] 中,==!= 右侧的操作数,被当做是正则表达式。(= 等同于 ==
参考
  • Bash Reference Manual:https://www.gnu.org/software/...

    推荐阅读