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

[[]] 与 [] 的区别

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

参考

  • Bash Reference Manual:https://www.gnu.org/software/...