Shell编程之条件语句

Posted 还行少年

tags:

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

一、条件测试

Shell环境根据命令执行后的返回状态值($?)来判断是否成功,当返回值为0时表示成功,非0表示失败或异常
使用test测试命令时,包括以下两种形式

test 条件表达式

或者

[ 条件表达式 ]

1 文件测试

  • -d: 测试是否为目录(Directory)
  • -e: 测试目录或文件是否存在(Exist)
  • -f: 测试是否为文件(File)
  • -r: 测试当前用户是否有读取权限(Read)
  • -w: 测试当前用户是否有权限写入(Write)
  • -x: 测试是否设置有权限执行(Excute)
[root@localhost ~]# [ -d 1.txt ]
[root@localhost ~]# echo $?
1
[root@localhost ~]# mkdir 1
[root@localhost ~]# [ -d 1 ]
[root@localhost ~]# echo $?
0

2 整数值比较

  • -eq: 第一个数等于第二个数
  • -ne:第一个数不等于第二个数
  • -gt: 第一个数大于第二个数
  • -lt: 第一个数小于第二个数
  • -le: 第一个数小于或等于第二个数
  • -ge: 第一个数大于或等于第二个数
[root@localhost ~]# [ 6 -gt 3 ]&& echo "yes" || echo "no"    //测试如果6大于3则输出yes,否则输出no
yes
[root@localhost ~]# [ 2 -gt 3 ]&& echo "yes" || echo "no"
no
[root@localhost ~]# 

3 字符串比较

  • =: 第一个字符串与第二个字符串相同
  • !=: 第一个字符串与第二个字符串不相同,“!”表示取反
  • -z:检查字符串是否为空,对于未定义或赋予空值的变量将是为空串
[root@localhost ~]# a=10
[root@localhost ~]# b=20
[root@localhost ~]# [ $a = $b ] && echo "zhen" || echo "jia"   //a=b则输出zhen,否则输出jia
jia
[root@localhost ~]# [ $a != $b ] && echo "zhen" || echo "jia"  //a!=b则输出zhen,否则输出jia
zhen
[root@localhost ~]# 

4 逻辑测试

  • &&:逻辑与,表示“而且”,只有当前后两个条件都成立,整个测试命令的返回值才为0(结果成立),“&&” 等同于 “-a”
  • || :逻辑或,表示“或者”,只要前后两个条件有一个成立,整个测试命令的返回值即为0(结果成立),“||”等同于“-o”
  • !:逻辑否,表示“不”,只有当指定条件不成立时,整个测试命令的返回值才为0(结果成立)
[root@localhost ~]# [ a == b ] && [ 10 -gt 5 ] && echo 1    
[root@localhost ~]# [ a == b ] || [ 10 -gt 5 ] && echo 1
1
[root@localhost ~]# [ ! a == b ] && [ 10 -gt 5 ] && echo 1
1
[root@localhost ~]# 

二、if语句

1.单分支语句

只有在“条件成立”时,才会执行相应的代码

if 条件测试操作(或命令)
then
  命令序列
fi
[root@localhost ~]# bash dan.sh
yes
[root@localhost ~]# cat dan.sh 
#!/bin/bash
ping -c 2 192.168.30.3 &> /dev/null

if [ $? -eq 0 ];then
echo "yes"
fi
[root@localhost ~]# 

2.双分支语句

针对“条件成立”“条件不成立”两种情况,分别执行相应的代码

if 条件测试操作(或命令)
then
命令序列
else 
命令序列
fi
[root@localhost ~]# bash dan.sh
no
[root@localhost ~]# cat dan.sh 
#!/bin/bash
ping -c 2 192.168.30.10 &> /dev/null

if [ $? -eq 0 ];then
echo "yes"
else 
echo "no"
fi
[root@localhost ~]# 

3.多分支语句

嵌套使用,进行多次判断,针对“条件成立”“条件不成立”两种情况,分别执行相应的代码

if 条件测试操作 1
then
 命令序列 1
 elif 条件测试操作 2
then
 命令序列  2
else
 命令序列 3
fi 
[root@localhost ~]# bash dan.sh 
网络不通
[root@localhost ~]# cat dan.sh 
#!/bin/bash
ping -c 2 192.168.30.10 &> /dev/null

if [ $? -eq 0 ];then
echo "yes"
elif [ $? -eq 1 ];then
echo "网络不通"
else
echo "no"
fi
[root@localhost ~]# 

以上是关于Shell编程之条件语句的主要内容,如果未能解决你的问题,请参考以下文章

Shell编程之条件语句——if语句case语句

if语句 条件测试 shell编程之条件语句

Shell编程之条件语句

shell if 语句

Shell编程Shell中的流程控制之if语句

shell编程之条件语句