shell编程条件语句与case语句

一 条件测试

1.1 文件测试

根据给定的路径名称,判断对应的是文件还是目录。或者判断文件是否可读、可写、可执行。
常见的文件操作选项如下:

操作选项解释
-d(directory)测试是否为目录
-e(exist)测试目录或文件是否存在
-f(file)测试是否为文件
-r(read)测试当前用户是否有权限读取
-w(write)测试当前用户是否有权限写入
-x(excute)测试是否设置有可执行权限

执行条件测试操作后,通过预定义变量“$?”可以获得测试命令的返回状态值,如果返回值为0,表示条件成立;如果返回值不为0(通常为1)表示条件不成立。
在这里插入图片描述
直接输出
在这里插入图片描述
两个文件之间的比较

操作选项解释
-nt判断文件A是否比文件B新
-ot判断文件A是否比文件B旧
-ef判断两个文件是否为同一个文件,用来判断两个文件是否指向同一个inode

在这里插入图片描述

1.2 整数值比较

操作选项解释
-eq第一个整数等于(equal)第二个整数
-ne第一个数不等于(not equal)第二个数
-gt第一个数大于(greater than)第二个数
-lt第一个数小于(lesser than)第二个数
-le第一个数小于等于(lesser or equal)第二个数
-ge第一个数大于或等于(greater or equal)第二个数

例:
判断当前登录用户数,超过5个时输出“too many”
在这里插入图片描述
拓展
if语句也可以写成该形式
在这里插入图片描述

1.3 字符串比较

操作选项解释
=第一个字符串与第二个字符串相同
!=第一个字符串与第二个字符串不同
-z检查字符串是否为空(zero)

[ 字符串1 = 字符串2 ]
[ 字符串1 != 字符串2 ]
[ -z 字符串 ]
在这里插入图片描述
注意
当等号两边有空格的时候左右两边都需要加入双引号,如果左边变量未加双引号,则等号左右两边不需要空格。

二 if语句

2.1 if语句单分支结构

对于单分支选择结构,只有在条件成立时才会执行相应代码,否则不会执行任何操作。当只需要判定一种情况时可以选用单分支结构。
在这里插入图片描述

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

例:

a=2
b=1
if [ $a -gt $b ]
then
	echo "$a$b大"
fi

也可以写成条件测试的形式

[root@localhost ~]# [ $a -gt $b ] && echo "${a}bi${b}da"

在这里插入图片描述

2.2 if语句双分支结构

双分支选择结构针对“条件成立”和“条件不成立”两种情况分别执行不同的操作。当判定结果需要分两种情况讨论时一般采用双分支结构。
在这里插入图片描述

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

例:

#!/bin/bash
ping -c 3 -i 0.2 -W 3 $1 &> /dev/null	//表示ping3次,每次间隔0.2秒,等待超时3秒;$1表示第一个位置参数
if [ $? -eq 0 ]		//判断前一条命令的返回状态
then
	echo "Host $1 is up."
else
	echo "Host $1 is down."
fi

写成条件测试形式

[root@localhost ~]# [ $? -eq 0 ] && echo "up" || echo "down"

在这里插入图片描述

2.3 if语句多分支结构

多分支选择结构分别针对多种情况执行不同操作。当判定结果需要分三种或三种以上情况讨论时可以采用多分支结构。
在这里插入图片描述

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

例:

#!/bin/bash
read -p "请输入你想考的分数:" GRADE
if [ $GRADE -ge 85 ] && [ $GRADE -le 100 ]
then
        echo "$GRADE 分,优秀"
elif [ $GRADE -ge 70 ] && [ $GRADE -le 84 ]
then
        echo "$GRADE 分,合格"
else
        echo "$GRADE 分,不及格"
fi

写成条件判断语句

[root@localhost ~]# [ $GRADE -ge 85 ] && [ $GRADE -le 100 ] && echo "$GRADE 分,优秀" || [ $GRADE -ge 70 ] && [ $GRADE -le 84 ] && echo "$GRADE 分,合格" || echo "$GRADE 分,不及格"

在这里插入图片描述

2.4 $0的妙用

上面程序的健壮性仍然有待提高,因为当输入其他不正常的分数时默认都会显示“不合格”,此时可以使用$0返回当前程序,强制用户输入一个正常的分数,比如0-100之间的。

if语句判断成绩
#!/bin/bash
read -p "请输入您的分数(0-100):" GRADE
cj(){
if [ $GRADE -ge 85 ] && [ $GRADE -le 100 ]
then
        echo "$GRADE 分,优秀"
elif [ $GRADE -ge 70 ] && [ $GRADE -le 84 ]
then
        echo "$GRADE 分,合格"
else
        echo "$GRADE 分,不及格"
fi
}

if [ $GRADE -gt 100 ] | [ $GRADE -lt 0 ]
then
        echo "please input right number"
        $0
else
        cj
fi

三 case语句

多分支if语句可以改用case语句进行改写,这样操作可以使得结构更加清晰、层次分明
在这里插入图片描述

case 变量值 in
模式1)
	命令序列1
	;;
模式2)
	命令序列2
	;;
	......
	
*)
	默认命令序列
esac

例1:
成绩判断等第,由于case语句无法匹配范围([0-9],[a-z],[A-Z]除外),所以此处可以写个函数judge()把一个范围里的数都归为一类,返回相同值,再用case语句对该值进行分类判断。
方法1:

#!/bin/bash
read -p "请输入你想考的分数:" GRADE
judge(){
if [ $GRADE -ge 85 ] && [ $GRADE -le 100 ]
then
        echo "a"
elif [ $GRADE -ge 70 ] && [ $GRADE -le 84 ]
then
        echo "b"
fi						//else可省略
}

case `judge` in			//调用函数judge()
a)
        echo "$GRADE 分,优秀"
        ;;
b)
        echo "$GRADE 分,合格"
        ;;
*)
        echo "$GRADE 分,不及格"
esac

方法2

#!/bin/bash
read -p "请输入你的成绩:" GRADE
case "$GRADE" in
#[0-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9])
[1-5][0-9]|[0-9])
        echo "你的成绩不合格"
        ;;
6[0-9]|7[0-4])
        echo "你的成绩合格"
        ;;
7[5-9]|8[0-4])
        echo "你的成绩良好"
        ;;
8[5-9]|9[0-9]|100)
        echo "你的成绩优秀"
        ;;
*)
        echo "输入有误"
esac

例2:
用shell脚本实现http开关操作
在这里插入图片描述
awk表示提取字段,会在后面的博客中进行详解

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 这个问题不太清楚是问关于b'shell中的case语句的实例还是关于编写b'shell脚本时使用case语句的实例。如果是前者,可以给出一个示例: #!/bin/bash echo "请输入a或b" read input case $input in a) echo "您输入了a" ;; b) echo "您输入了b" ;; *) echo "输入无效" ;; esac 如果是后者,可以给出一个示例: #!/bin/bash read input case $input in [a-z]) echo "您输入了小写字母" ;; [A-Z]) echo "您输入了大写字母" ;; [0-9]) echo "您输入了数字" ;; *) echo "输入无效" ;; esac ### 回答2: Shell编程中,case语句主要用于根据不同的条件来执行不同的操作。例如,根据用户输入的命令来执行特定的命令,或者根据系统的不同状态来执行不同的操作。下面是一个简单的Shell编程案例,用以说明case语句的使用。 #!/bin/bash echo "请输入你的选择:" echo "1: 查看用户登录信息" echo "2: 查看系统版本信息" echo "3: 查看CPU信息" echo "4: 退出程序" read choice case $choice in 1) whoami ;; 2) cat /etc/issue ;; 3) cat /proc/cpuinfo ;; 4) exit 0 ;; *) echo "无效的选择" ;; esac 上面的代码中,首先要求用户输入一个选项,然后根据不同的选项执行不同的命令。例如,如果用户选择“1”,则会执行whoami命令来查看当前登录用户的信息;如果用户选择“2”,则会执行cat /etc/issue命令来查看系统版本信息;如果用户选择“3”,则会执行cat /proc/cpuinfo命令来查看CPU信息;如果用户选择“4”,则会退出程序。如果用户输入的选项不在1到4之间,则会提示“无效的选择”。 可以看到,case语句非常适合用于根据不同的条件来执行不同的操作,可以方便地实现用户交互和系统管理相关的脚本编写。同时,也可以通过case语句的嵌套来实现更复杂的逻辑控制。 ### 回答3: shell编程语言是一种命令行解释器,它允许用户访问操作系统的一些特征和功能,并按照自己的需要编写脚本。在shell编程中,case语句是一种控制流结构,用于尝试匹配一个或多个表达式。 case语句的基本语法如下: ``` case 值 in 模式1) 命令1 ;; 模式2) 命令2 ;; *) 默认命令 ;; esac ``` 在这个语法中,case语句首先尝试将值与多个模式进行匹配,如果找到与某个模式匹配的值,就会执行相应的命令。如果没有找到匹配的模式,则会执行默认命令。 下面是一个简单的case语句实例: ``` #!/bin/bash echo -n "Enter the month (1-12): " read month case $month in 1) echo "January" ;; 2) echo "February" ;; 3) echo "March" ;; 4) echo "April" ;; 5) echo "May" ;; 6) echo "June" ;; 7) echo "July" ;; 8) echo "August" ;; 9) echo "September" ;; 10) echo "October" ;; 11) echo "November" ;; 12) echo "December" ;; *) echo "Invalid month" ;; esac ``` 在这个实例中,用户被要求输入一个1-12之间的数字,然后用case语句将数字转换为相应的月份。如果用户输入的数字不在1-12之间,则执行默认命令,提示无效月份。 在case语句中,模式可以使用通配符来匹配多个表达式。例如,用户可能希望匹配所有以字母“a”开头的单词: ``` case $word in a*) echo "Starts with a" ;; *) echo "Doesn't start with a" ;; esac ``` 在这个实例中,如果$word以字母“a”开头,则输出“Starts with a”,否则输出“Doesn't start with a”。 总之,case语句shell编程中非常有用的控制流结构之一。它可用于匹配多个表达式,并根据匹配结果执行相应的命令。使用case语句shell脚本可以进行更灵活和可读性强的编写。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值