Shell编程条件语句(if、case)

目录

一、Shell条件语句

1.条件表达式测试

2.文件测试

3.整数值比较

4.字符串比较

5.逻辑测试

二、if 条件语句(串行执行)

(1)单分支结构

(2)双分支结构

(3)多分支结构

三、case语句(并行执行)


一、Shell条件语句

Shell环境根据命令执行后的返回状态值($?)来判断是否执行成功,当返回值为0(真 true)时表示成功,返回值为非0值(假 false)时表示失败或异常。

(与java等编程语言判断返回值完全相反!)

test 命令

更多操作可使用 man test 查看

1.条件表达式测试

[ 条件表达式 ]

[root@localhost1 ~]#[ 1 = 1 ]
[root@localhost1 ~]#echo $?
0
​
[root@localhost1 ~]#[ 1 > 10 ]
[root@localhost1 ~]#echo $?
1

2.文件测试

[ 操作符 文件或目录 ]

文件操作符含义
-e查看文件或目录是否存在(exist)
-d查看文件是否是一个目录(directory)
-f查看文件是否是一个目录(file)
-r查看文件或目录是否可读(read)
-w查看文件或目录是否可写(write)
-x查看文件或目录是否可执行(excute)
-L查看文件或目录是否是软链接文件(link)
//测试 /root 是否是一个目录
[root@localhost1 ~]#test -d /root/
[root@localhost1 ~]#echo $?
0  --是
​
//测试 /root 是否是一个文件
[root@localhost1 ~]#[ -f /root/ ]
[root@localhost1 ~]#echo $?
1  --否

3.整数值比较

[ 整数或变量 操作符 整数或变量 ]

数值操作符含义
-eq等于(equal)
-ne不等于(not equal)
-lt小于(less then)
-gt大于(greater then)
-le小于等于(less and equal)
-ge大于等于(greater and equal)
​
[root@localhost1 ~]#a=10
[root@localhost1 ~]#b=20
​
//测试 $a 是否等于10
[root@localhost1 ~]#test $a -eq 10
[root@localhost1 ~]#echo $?
0
//测试 $a 是否大于 $b
[root@localhost1 ~]#test $a -gt $b
[root@localhost1 ~]#echo $?
1


​

4.字符串比较

[字符串1 操作符 字符串2]

字符串比较操作符含义
=等于
!=不等于
-z判断字符串是否为空
​
as[root@localhost1 ~]#echo $LANG
zh_CN.UTF-8
​
//判断 $LANG 是否为 us.en
[root@localhost1 ~]#[ $LANG = "us.en" ]
[root@localhost1 ~]#echo $?
1


​

5.逻辑测试

[ 表达式1 ] 操作符 [ 表达式2 ]

逻辑操作符含义
&&且(逻辑与),两边表达式均为真才返回0,否则返回非0
-a含义同上,使用方法为[ 表达式1 -a 表达式2 ]
||或(逻辑或),两边表达式其一为真返回0,全否才返回非0
-o含义同上,使用方法为[ 表达式1 -o 表达式2 ]
取反(逻辑否),真否结果返回值相反
​
[root@localhost1 ~]#a=1
[root@localhost1 ~]#b=1
​
//逻辑与,两条命令均执行成功才返回0
[root@localhost1 ~]#[ $a = 1 ] || [ $a = $b ]
[root@localhost1 ~]#echo $?
0
​
//逻辑或,其一为真则返回0
[root@localhost1 ~]#[ $a > 1 ] || [ $a = $b ]
[root@localhost1 ~]#echo $?
0


​

特殊用法:&& 与 || 一起使用(逻辑与执行返回状态为否,则继续执行逻辑或后的命令)

//创建文件1.txt
[root@localhost1 data]#touch 1.txt
[root@localhost1 data]#ls
1.txt
​
//判断1.txt 是否是目录,逻辑与返回状态为否,继续执行逻辑或后的命令
[root@localhost1 data]#[ -d 1.txt ] && echo "1.txt 是目录" || echo "1.txt 不是目录"
1.txt 不是目录

二、if 条件语句(串行执行)

(1)单分支结构

if [ 条件表达式 ];than

执行命令行 (当条件判断成立)

fi

img

//判断3是否大于2
[root@localhost1 ~]#vim test1.sh
#!/bin/bash
if [ 3 -ge 2 ]; then
  echo "yes"
fi
​
[root@localhost1 ~]#bash test1.sh
yes

(2)双分支结构

if [ 条件表达式 ];than

执行命令行 (当条件判断成立)

else

执行命令行 (当条件判断不成立)

fi

img

//判断年龄满足大于等于18的购买成人票,不满足购买学生票
[root@localhost1 ~]#vim test2.sh
#!/bin/bash
read -p "请输入您的年龄:" age
if [ $age -ge 18 ];then
  echo "请购买成人票(80元)"
else
  echo "请购买学生票(40元)"
fi
​
[root@localhost1 ~]#bash test2.sh
请输入您的年龄:20
请购买成人票(80元)
​
[root@localhost1 ~]#bash test2.sh
请输入您的年龄:8
请购买学生票(40元)

(3)多分支结构

if [ 条件表达式1 ];than

执行命令行 (当条件判断1成立)

elif [ 条件表达式2 ];than -- 可以有多个elif 判断语句

执行命令行 (当条件判断2成立)

else

执行命令行 (当条件判断都不成立)

fi

img

​
[root@localhost1 ~]#vim test2.sh
#!/bin/bash
read -p "请输入您的年龄:" age
if [ $age -ge 60 ];then
  echo "请购买老人票(20元)"
elif [ $age -gt 18 ] && [ $age -lt 60 ];then
  echo "请购买成人票(80元)"
elif [ $age -ge 6 ] && [ $age -lt 18 ];then
  echo "请购买学生票(40元)"
else
  echo "请购买儿童票(20元)"
fi
​
[root@localhost1 ~]#bash test2.sh
请输入您的年龄:70
请购买老人票(20元)
​
[root@localhost1 ~]#bash test2.sh
请输入您的年龄:23
请购买成人票(80元)
​
[root@localhost1 ~]#bash test2.sh
请输入您的年龄:14
请购买学生票(40元)
​
[root@localhost1 ~]#bash test2.sh
请输入您的年龄:3
请购买儿童票(20元)


​

三、case语句(并行执行)

case 变量名 in

模式1) -- 指定模式可以有多个(支持通配符)

命令序列

;;

模式2)

命令序列

;;

*) -- 默认模式(除上述指定模式的其他情况)

默认命令序列

;;

esac

img

[root@localhost1 ~]#vim test3.sh
#!/bin/bash
read -p "请输入你的分数(0~100):" num
​
case $num in
100)
  echo "满分!"
  ;;
​
9[0-9])
  echo "优秀!"
  ;;
​
[78][0-9])
  echo "良好!"
  ;;
​
6[0-9])
  echo "合格!"
  ;;
​
[0-9]|[1-5][0-9])
  echo "不及格!"
  ;;
​
*)
  echo "输入有误,请输入 0~100 的范围!"
esac
​
[root@localhost1 ~]#bash test3.sh
请输入你的分数(0~100):100
满分!
​
[root@localhost1 ~]#bash test3.sh
请输入你的分数(0~100):97
优秀!
​
[root@localhost1 ~]#bash test3.sh
请输入你的分数(0~100):78
良好!
​
[root@localhost1 ~]#bash test3.sh
请输入你的分数(0~100):62
合格!
​
[root@localhost1 ~]#bash test3.sh
请输入你的分数(0~100):45
不及格!
​
[root@localhost1 ~]#bash test3.sh
请输入你的分数(0~100):123
输入有误,请输入 0~100 的范围!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值