shell编程——条件语句

本文探讨了条件测试的test命令、整数和字符串比较,以及if、case语句在脚本编程中的使用,包括单分支、双分支、多分支结构及嵌套if,实例解析了httpd服务管理、用户权限判断和防火墙脚本编写。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言


一、条件测试

(一)、test命令

测试表达式是否成立,若成立返回0,否则返回其他数值
格式1:test 条件表达式
格式2:[ 条件表达式 ]

文件测试
[ 操作符 文件或目录 ]

常用的测试操作符

常用选项
-d:测试是否为目录(Directory)
-e:测试目录或文件是否存在(Exist)
-f:测试是否为文件(File)
-r:测试当前用户是否有读写权限(Read)
-w:测试当前用户是否有权限写入(Write)
-x:测试当前用户是否有权限执行(eXcute)
-b:测试是否为设备文件
-c:测试是否为字符设备文件
-s:测试存在且文件大小为空
-L:测试是否为链接文件

在这里插入图片描述
在这里插入图片描述

(执行测试完之后,通过**预定义变量$?**可以获得测试命令的返回状态值,从而判断该条件是否成立)

(二)、整数值比较

[ 整数1 操作符 整数2 ]

 常用的测试操作符
-eq:等于(Equal)
-ne:不等于(Not Equal)
-gt:大于(Greater Than)
-lt:小于(Lesser Than)
-le:小于或等于(Lesser or Equal)
-ge:大于或等于(Greater or Equal)

在这里插入图片描述
在这里插入图片描述

(三)、字符串比较

格式1
[  字符串1  =  字符串2 ]  [  字符串1  ==  字符串2 ]   #表示字符串1跟字符串2相同
[  字符串1  !=  字符串2 ]    # 表示字符串1跟字符串2 不同

格式2
[  -z  字符串 ]		#检查字符串是否为空(Zero),对于未定义或赋予空值的变量将视为空串
[  -n  字符串 ]		#检查是否有字符串存在 

#常用的测试操作符
=:字符串内容相同
!=:字符串内容不同,!号表示取反的意思
-z:字符串内容为空

在这里插入图片描述
在这里插入图片描述

(四)、逻辑测试

格式1:【表达式1】操作符【表达式2

格式2:命令1 操作符 命令2

常用的测试操作符

-a或&&:逻辑与,“而且”的意思
-o或||:逻辑或,“或者”的意思
!:逻辑否

在这里插入图片描述
在这里插入图片描述

二、if语句的结构

(一)、单分支结构

在这里插入图片描述

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

在这里插入图片描述

在这里插入图片描述

(二)、if双分支语句

在这里插入图片描述

if 条件判断[ ]
then
cmd1
else
cmd2
fi

ping 脚本
在这里插入图片描述

在这里插入图片描述

判断当前用户是不是管理员
在这里插入图片描述

在这里插入图片描述

(三)、多分支结构

在这里插入图片描述

if 条件判断[ ]
then
cmd1
elif 条件判断[ ]
then
cmd2
elif 条件判断[ ]
then
cmd3
else
cmd2
fi

跑步比赛,输入你的比赛成绩成绩范围为(0-10),如果成绩大于等于8且小于等于10,则成绩合格进入决赛,再根据性别分入相对应的组别,如果成绩不合格,则淘汰。
在这里插入图片描述

在这里插入图片描述

评委被投诉后,现将女生、男生需要区分开来,女生7-10分为优秀,男生8-10分为优秀,女生的学号为1-10 男生的学号为11-20 ,请以交互时的方式询问“请输入参赛学员的学号(1-20):”,最后输出"该学生为男生/女生,成绩为优秀"
在这里插入图片描述

在这里插入图片描述

(四)、嵌套if

判断httpd 服务有没有开启,如果没有安装就进行安装并运行httpd 如果httpd在运行则输出“httpd is running”。

在这里插入图片描述
在这里插入图片描述

判断系统有无此用户

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

三、case语句(相当于一种菜单)

(一)、case语句结构

case 语句可以使脚本程序的结构更加清晰、层次分明,常用于服务的启动、重启、停止的脚本,有的服务不提供这种控制脚本,需要用case语句编写
case 语句主要适用于以下情况:某个变量存在多种取值,需要对其中的每一种取值分别执行不同的命令序列。这种情况与多分支的 if 语句非常相似,只不过 if 语句需要判断多个 不同的条件,而 case 语句只是判断一个变量的不同取值

(二)、case多分支结构

在这里插入图片描述

(三)、case多分支语句

语法格式:
case 变量值 in
模式 1)
	命令序列 1
	;;
模式 2)
	命令序列 1
	;;
* )
	默认命令序列
esac
case 行尾必须为单词“in”,每一模式必须以右括号“)”结束。 双分号“;;”表示命令序列的结束。 模式字符串中,可以用方括号表示一个连续的范围,如“[0-9]”;还可以用竖杠符号 |”表示或,如“A|B”。 最后的“*)”表示默认模式,其中的*当于通配符。

在这里插入图片描述

在这里插入图片描述

十位数,百位数的表示并根据所输入的数字对号入座

在这里插入图片描述
在这里插入图片描述

编写控制防火墙服务开启与关闭的脚本

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

编写apache启动服务脚本

在这里插入图片描述
在这里插入图片描述


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值