乐趣区

关于bash:ifuntilwhile中的testcommands

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. [[]] 中,==!= 右侧的操作数,被当做是正则表达式。(= 等同于 ==

参考

  • Bash Reference Manual:https://www.gnu.org/software/…
退出移动版