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==
    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==

[[]] 与 [] 的区别

  1. [[]] 中,不会进行分词、文件名扩展。
  2. [[]] 中,==!= 右侧的操作数,被当做是正则表达式。(= 等同于 ==

参考


夜游神
637 声望581 粉丝

哈哈。