Open SyMind opened 2 years ago
在 shell 脚本中,常见的 if 语句结构如下:
if
if command-list1 then command-list2 else command-list3 fi
如果 command-list1 中的语句的 exit code 为 0,then 从句执行。如果 exit code 不是 0,else 从句执行。command-list1 可以简单也可以复杂。它可以是一个或多个被 ;、&、&&、|| 或换行分割的命令。
command-list1
then
;
&
&&
||
if [ condition ]
[ 是传统 test 命令的别名,[ 或test 是标准 POSIX 工具。所有 POSIX shell 已经将其内置。典型的 test 用法有判断文件是否存在或一个数是否与另一个相等。
[
test
if [[ condition ]]
这是 ksh 中对 test 命令升级版,bash、zsh、yash、busybox sh 也支持。它更多的特性,例如它可以使用通配符来判断字符串是否匹配。
if ((condition))
另一个 ksh 的扩展,bash 和 zsh 也支持。用于执行数学表达式。和 [[ ... ]] 一样,这个形式不在 POSIX 标准中。
[[ ... ]]
if (command)
在子 shell 中运行命令。当命令完成,它返回 exit code。
使用这样的子 shell 的一个常见原因是,有的命令会对 shell 环境分配变量或其他更改,以此限制命令的副作用。在子 shell 完成后,这些副作用不会被保留。
if command
执行普通的命令。
if 语句的语法
在 shell 脚本中,常见的
if
语句结构如下:如果
command-list1
中的语句的 exit code 为 0,then
从句执行。如果 exit code 不是 0,else 从句执行。command-list1
可以简单也可以复杂。它可以是一个或多个被;
、&
、&&
、||
或换行分割的命令。if [ condition ]
[
是传统test
命令的别名,[
或test
是标准 POSIX 工具。所有 POSIX shell 已经将其内置。典型的 test 用法有判断文件是否存在或一个数是否与另一个相等。if [[ condition ]]
这是 ksh 中对
test
命令升级版,bash、zsh、yash、busybox sh 也支持。它更多的特性,例如它可以使用通配符来判断字符串是否匹配。if ((condition))
另一个 ksh 的扩展,bash 和 zsh 也支持。用于执行数学表达式。和
[[ ... ]]
一样,这个形式不在 POSIX 标准中。if (command)
在子 shell 中运行命令。当命令完成,它返回 exit code。
使用这样的子 shell 的一个常见原因是,有的命令会对 shell 环境分配变量或其他更改,以此限制命令的副作用。在子 shell 完成后,这些副作用不会被保留。
if command
执行普通的命令。
常见的 test 命令
参考