Shell脚本必备十八式之第二式条件语句

Posted 28线不知名云架构师

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Shell脚本必备十八式之第二式条件语句相关的知识,希望对你有一定的参考价值。

一、条件测试

1.1 条件测试的概述

Shell环境根据命令执行后的返回状态($?)来判断是否执行成功,当返回值为0时表示成功,否则(非0值)表示失败或异常。使用专门的测试工具——test命令,可以对特定条件进行测试,并根据返回值来判断条件是否成立(返回值为0表示条件成立)。

使用test测试命令时,包括以下两种形式:①test+条件表达式②【条件表达式】

这两种表达方式的作用完全相同,但通常后一种形式更为常用,也更贴近编程习惯。需要注意的是,方括号”【“或者”】“与条件表达式之间需要至少一个空格进行分割。

根据需要测试的条件类别不同,条件表达式也不同。比较常用的条件操作包括文件测试、整数值比较、字符串比较,以及针对多个条件的逻辑测试。

1.2 文件测试

1.2.1概念

文件测试指的是根据给定的路径名称,判断对应的是文件还是目录,或者判断文件是否可读、可写、可执行等。

1.2.2文件测试的常见操作选项如下:

使用时将测试对象放在可操作选项之后即可:

  • -d:测试是否为目录(Directory)
  • -e:测试目录或文件是否存在(Exist)
  • -f:测试是否为文件(File)
  • -r:测试当前用户是否有权限读取(Read)
  • -w:测试当前用户是否有权限写入(Write)
  • -x:测试是否设置可执行权限(Excute)

1.3 具体操作

echo $? //查看前一条命令的返回值
0       //返回0表示条件成立
1       //返回非0值表示条件不成立

 

【 -d +目录名 】&& echo "YES"
                     //无输出表示目录不存在
YES                  // 输出YES表示目录存在

[[ -f kgc ]]&& echo 1 || echo 0 
0           //表示文件不存在
1           //表示文件存在

test命令中用于判断文件的选项很多,从文件个数上分类的话,可以分为单个文件的判断和两个文件之间的比较。其中判断单个文件最常用的选项就是”-f“选项,再比较两个文件时,常用的选项有:

  • -nt:判断文件A是否比文件B新
  • -ot:判断文件A是否比文件B旧
  • -ef:判断两个文件是否为同一个文件,用来判断两个文件是否指向同一个inode
test a -ot b && echo 1 || echo 0
1    //a比b旧
0    //a不比b旧
test a -ef b && echo 1 || echo 0 
1    //a和b是同一个文件
0    //a和b不是同一个文件
ln a c 
test a -ef c && echo 1 || echo 0
1    //ab指向同一个inode
0    //ab不指向同一个inode

1.4 整数值比较

整数值比较指的是根据给定的两个整数值,判断第一个数和第二个数的关系,如是否大于、等于、小于第二个数。整数值比较的常用操作如下,使用时将操作选项放在比较的两个整数之间。

  • -eq:第一个数等于第二个数
  • -ne:第一个数不等于第二个数
  • -gt:第一个数大于第二个数
  • -lt:第一个数小于第二个数
  • -le:第一个数小于或等于第二个数
  • -ge:第一个数大于或等于第二个数
Unum=`who | wc-l`    //查看当前以登陆用户数
[ $Unum -gt 5 ]&& echo "Too many."    //测试结果(大于)

1.5 字符串比较

字符串比较比较通常用来检查用户输入、系统环境等是否满足条件,在提供交互式操作的shell脚本中,也可用来判断用户输入的位置参数是否符合要求。字符串比较常用的操作选项如下:

  • =:第一个字符串与第二个字符串相同
  • !=:第一个字符串与第二个字符串不相同,其中"!"符号表示取反
  • -z:检查字符串是否为空,对于未定义或赋予空值的变量将视为空串。
echo $LANG  //查看当前的语言环境
[ $LANG!="en.US" ] && echo  "Not en.US"
                         //字符串测试结果
Not en.US

1.6 逻辑测试

逻辑测试指的是判断两个或多个条件之间的依赖关系。当系统任务取决于多个不同的条件时,判断是根据这些条件同时成立还是只要其中一个成立等情况,需要有一个测试过程。常用的逻辑测试操作如下,使用时放在不同的测试语句或命令之间。

  • &&:逻辑与,表示”而且“,只有当前后两个条件都成立时整个测试命令返回值才为0(结果成立)使用Test命令测试时,”&&“可改为”-a"
  • ||:逻辑或,表示”或者“,只要前后两个测试条件有一个成立,整个测试命令返回值即为0(结果成立),使用Test命令测试时,”||“可改为”-o"
  • !:逻辑否,表示”不“,只有当指定条件不成立时,整个测试结果的返回值才为(结果成立)

二、IF语句

2.1概念

在Shell脚本应用中,if语句是最为常用的一种流程控制方式,用来根据特定的条件测试结果,分别执行不同的操作(如果...那么...)。

2.1 if语句结构

①单分支if语句

if 条件测试操作
then 
    命令序列
if

②双分支if语句

if 条件测试操作
then
     命令序列 1
else
     命令序列 2
fi

③多分之if语句

if 条件测试操作 1
then
    命令序列 1 
elif 条件测试操作 2
then
    命令序列 2
else
    命令序列 3
fi

 

以上是关于Shell脚本必备十八式之第二式条件语句的主要内容,如果未能解决你的问题,请参考以下文章

Shell必备十八式之第四式——正则表达式和文本处理器

Shell脚本攻略十八式之第一招——编程规范与变量

shell 脚本 if 条件语句

shell脚本之if使用语句进行条件测试

SHELL脚本编程进阶

shell脚本高级进阶小总结