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脚本必备十八式之第二式条件语句的主要内容,如果未能解决你的问题,请参考以下文章