shell的条件执行

Posted 自己解决c++

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell的条件执行相关的知识,希望对你有一定的参考价值。

使用 test 命令

test命令可用于:

  • 文件属性测试
  • 字符串测试
  • 算数测

test 命令的语法为:

test EXPRESSION

test [ EXPRESSION ]

文件属性测试操作符表

文件属性测试操作符表
操作符 描        述
-e <FILE> 如果<FILE>存在则为真
-f <FILE>如果<FILE>存在且只有一个常规文件则为真
-d <FILE> 如果<FILE>存在且只有一个目录则为真
-c <FILE> 如果<FILE>存在且是一个特殊字符文件则为真

         -b <FILE> 

如果<FILE>存在且是一个特殊块文件则为真

         -p <FILE> 

如果<FILE>存在且是一个命名管道则为真
-S <FILE> 如果<FILE>存在且是一个套接字文件则为真
-L <FILE> 如果<FILE>存在且是一个符号链接则为真
-h <FILE> 如果<FILE>存在且是一个符号链接则为真
-g <FILE> 如果<FILE>存在且是设置了sgid位则为真
-u <FILE> 如果<FILE>存在且是设置了suid位则为真
-r <FILE> 如果<FILE>存在且是可读的则为真
-w <FILE> 如果<FILE>存在且是可写的则为真
-x <FILE> 如果<FILE>存在且是可执行的则为真
-s <FILE> 如果<FILE>存在且不为空则为真
-t <fd> 如果文件描述符<fd>已打开且引用了一个终端则为真
<FILE1> -nt <FILE2> 如果<FILE1> 比 <FILE2>新则为真
<FILE1> -ot <FILE2> 如果<FILE1> 比 <FILE2>旧则为真
<FILE1> -ef <FILE2> 有硬链接到 <FILE2>则为真   

例如:检查文件是否存在

test -e /bin/cp && echo "command $_ found." || echo "command $_ not found."

注意"$_" 表示前一个执行的命令中的最后一个参数
 

例如:检查目录/local 是否存在

test -d /local && echo "The directory $_ is exist." || echo "The directory $_ does not exist

等等...,都可以通过上面表格的参数进行检查

字符串测试操作符表
操作符描        述
-z <STRING>如果<STRING>为空则为真
-n <STRING>如果<STRING>不为空则为真
<STRING1> = <STRING2>如果<STRING1>与<STRING2>相同则为真
<STRING1> != <STRING2>如果<STRING1>与<STRING2>不相同则为真
<STRING1> < <STRING2>如果<STRING1>的字典顺序排在<STRING2>之前则为真
<STRING1> > <STRING2>如果<STRING1>的字典顺序排在<STRING2>之后则为真

使用字符串测试操作符的例子:

test "abc" = "cde"; echo $?

test "abc" = "cde"; echo $?

test "abc" \\< "def"; echo $?

test "abc" \\> "def"; echo $?

[ "abc" \\< "def" ]; echo $?

[ -z  "" ]; echo $?

[ -n  "abc" ]; echo $?

注意"<"">" 操作符同样被shell用于重定位,所示必须使用"\\"字符将其转义

用于算术测试的操作符:

算术测试操作符表
操作符描        述
<INTEGER1> -eq <INTEGER2>如果<INTEGER1> 与 <INTEGER2>相等则为真
<INTEGER1> -ne <INTEGER2>如果<INTEGER1> 与 <INTEGER2>相等则为真
<INTEGER1> -le <INTEGER2>如果<INTEGER1> 大于或等于 <INTEGER2>不相等则为真
<INTEGER1> -ge <INTEGER2>如果<INTEGER1> 小于或等于 <INTEGER2>则为真
<INTEGER1> -lt <INTEGER2>如果<INTEGER1> 小于 <INTEGER2>则为真
<INTEGER1> -gt <INTEGER2>如果<INTEGER1> 大于 <INTEGER2>则为真

算术测试操作符的例

子:

test 5 -eq 5 && echo Yes || echo No

test 5 -ne 10 && echo Yes || echo No

[ 5 -le 10 ] && echo Yes || echo No

[ 10 -le 10 ] && echo Yes || echo No

[ 5 -ge 10 ] && echo Yes || echo No

over....

以上是关于shell的条件执行的主要内容,如果未能解决你的问题,请参考以下文章

4.3 合并重复的条件执行片段

SHELL脚本编程进阶

shell 编码语句

兼容ie8,firefox,chrome浏览器的代码片段

shell高级编程

shell脚本进阶篇(上)