目录
一、if 条件判断测试语句
根据实际情况自动执行相应的命令;if分为单分支结构、双分支结构和多分枝结构。
1、if分为单分支结构
if单分支结构由 if、then、fi 组成(相当于口语:如果......那么......)
语法结构:
if 条件测试操作 ------------------------>> if 目录不存在
then 命令序号 ----------------------->> then 创建该目录
fi ------------------------>> fi 结束
也可以写成一行用分号隔开:
if 条件 ;then 命令;fi
需求:利用shell自动创建一个固定名字de目录
2、 if的双分支结构
由if、then、else 、fi组成
功能实现方式:进行一次条件匹配,如果与条件匹配,则执行相应的预设命令,反之去执行不匹配的预设命令。相当于口语的“如果......那么......或者......那么”
语法结构:
if 条件
then
命令
else
命令
fi
需求:使用双分支的if条件语句验证某台主机是否在线
3、if 多分支结构的if语句
由“if 、then 、elif 、else、fi”组成
进行多次条件判断,一次在匹配中匹配成功都会执行相应的预设命令
语法结构:
if 条件1
then
命令1
elif 条件2
then
命令2
elif 条件3
then 命令3
.......
else
命令N
fi
4、需求
提示"请输入你的考试成绩:" 接收用户输入一个成绩, 之后使用if else条件句判断
要求1: 小于 60 输出"不及格"
要求2: 大于等于70 并且 小于80 输出"中等"
要求3: 大于等于80 并且 小于90 输出"良好"
要求4: 大于等于90 并且 小于等于100 输出"优秀"
要求5: 以上不符合输出"成绩不合法"
(())
是一种数学计算命令,它除了可以进行最基本的加减乘除运算,还可以进行大于、小于、等于等关系运算,以及与、或、非逻辑运算。当 a 和 b 相等时,(( $a == $b ))
判断条件成立,进入 if,执行 then 后边的 echo 语句。
5、if嵌套
需求:额外需求:评委被投诉后,现将女生、男生需要区分开来,女生7-10分为优秀,男生8-10分为优秀,女生的学号为1-10 男生的学号为11-20 ,请以交互时的方式询问“请输入参赛学员的学号(1-20):”,最后输出"该学生为男生/女生,成绩为优秀"
验证:
PS:在shell脚本中,单等号和双等号属于算数运算符;“-eq”属于关系运算符
1、相等关系运算符“-eq”不能在算数运算表达式“(( ))”中
2、在条件表达式“[ ]”中,单等号和双等号等价,都是相等算数运算符
3、在算数运算表达式“(( ))”中,单等号是赋值算数运算符,双等号为相等算数运算符
6、配合if使用的条件判断,一般使用tset和[ ]两种
①test 功能
test命令对整数比较测试
test命令对字符串
使用test命令对文件测试
②整数比较
语法:if test 数字1 选项 数字2
选项:
选项 | 说明 |
---|---|
-eq | 等于则为真 |
-ne | 不等于则为真 |
-gt | 大于则为真 |
-ge | 大于等于则为真 |
-lt | 小于则为真 |
-le | 小于等于则为真 |
二、for条件循环语句
for循环语句允许脚本一次性读取多个文件信息,然后逐一对信息进行操作。但遇到处理的数据时有范围的。for的语句在好不过了。
---------------------------------------------------------------------------------------------------------------------------------
语法组成:由for...in 、do 、done组成
for 变量名 in {取值列表} 取值列表:{n..N} 表示一个范围,或者提前定义一个文件,注入 内容
do
命令序列
done
---------------------------------------------------------------------------------------------------------------------------------
注:
for i in {1..50..2} 表示1~50的奇数。(已1为开始,步长为2 ,就是每次加2:1、1+2、3+2、 5+2......)
for i in {2..50..2} 表示2~50的偶数。(2为开始,依次加2递增)
for i in {10..1} 表示10到1倒序排列
for i in ${seq 10} 表示1到10 正序排列
for i in ${seq 10 -1 1} 表示 1到10倒序排列
for i in ${seq 1 2 10} 表示1到10的奇数,中间步长为2
for i in ${seq 0 2 10} 表示0到10的偶数,中间步长为2
1、需求:利用shell脚本调用指定文件内容新建多个用户
创建用户的所有用户放在文件中
验证:
同时删除多用户
2、需求: 打印5行内容
三、while 条件循环语句
whil和for 都为条件循环语句,二者的区别在于while的条件循环是不知道最终执行多少次(可定义结束时间)
而for是有使用范围和目标的。
在while中只要条件成立就会一直循环,当条件不成立时就会退出。脚本也可以加break进行退出。
语法组成:由while true 、do 、done组成 或while : 、do 、done及while 条件判断 、do、done
需求:猜价格游戏
四、case 语句
1、功能:case 语句可以使脚本程序的结构更加清晰、层次分明,常用于服务的启动、重启、停止的脚本,有的服务不提供这种控制脚本,需要用case语句编写
2、使用场景:主要适用于以下情况:某个变量存在多种取值,需要对其中的每一种取值分别执行不同的命令序列。这种情况与多分支的 if 语句非常相似,只不过 if 语句需要判断多个不同的条件,而 case 语句只是判断一个变量的不同取值
3、语法格式:
case 变量值 in
模式 1)
命令序列 1
;;
模式 2)
命令序列 1
;;
* )
默认命令序列
esac
需求:请输入周几(1~7),看每天吃啥?
脚本:
验证:
总结 :
学习shell脚本中if、for、while、case语句的用法