一、case语句
- case语句和if语句相比,可以使得脚本程序的结构更加清晰、层次分明。
1.1 case语句的结构
- case语句主要适用于变量存在多种取值,需要对其中的每一种取值执行不同的条件。
- case分支语句的语法结构如下:
case 变量值 in
模式 1)
命令序列 1
;;
模式 2)
命令序列 2
;;
*)
默认命令序列
esac
- 关键字后面跟的是“变量值”,即 “$变量名”。整个分支结构包括在case……esac之间,中间的模式1、模式 2、…… 对应不同取值(程序期望的取值),其中 * 作为通配符,可匹配任意值。
- 语句流程:首先使用“变量值”与模式1 进行比较,若取值相同则执行模式1后的命令序列,知道遇见双分号,后跳转至esac,表示结束分支;若与模式1不相匹配,则继续与模式2进行比较………… 依次类推,若找不到任何匹配的值,则执行默认模式“*)”后的命令序列,直到遇见esac后结束分支。
- 使用case分支语句需注意
case行尾必须为单词 “in”,每一模式必须以右括号“)”结束。
双分号”;;“表示命令序列的结束
模式字符串中,可以用方括号表示一个连续的范围,如“[0-9]”,还可以用竖杠符号“|”表示或,如“A|B”
最后的“*)”表示默认模式,其中的* 相当于通配符。
1.2 case语句应用实例
1.2.1 输出成绩分类
- 输入成绩 成绩85-100的输出优秀,成绩70-84的输出良,成绩60-69的输出成绩合格,其他输出成绩为不合格。
#! /bin/bash
read -p "请输入成绩(0-100):" score
case "$score" in
8[5-9]|9[0-9]|100)
echo "成绩为优秀"
;;
7[0-9]|8[0-4])
echo "成绩为良"
;;
6[0-9])
echo "成绩为合格"
;;
* )
echo "成绩为不合格"
esac
~
[root@localhost ~]
请输入成绩(0-100):67
成绩为合格
二、for循环语句
- 在工作中,会遇到某项任务要执行多次的情况,每次执行时仅仅只是对象不一样,其他都一样。简单的if语句已经难以满足要求,for循环语句,可以很好的解决这一问题。
2.1 for语句的结构
- 使用for循环语句时,需要指定一个变量及可能的取值列表,针对每一个不同的取值重复执行的命令序列,直到变量值用完退出循环。
- “取值列表”为for语句的执行条件,其中包括多个属性相同的对象,需要预先指定。
- for 循环语句的语法结构如下
for 变量名 in 取值列表
do
命令序列
done
for ((i=1;i<=10;i++))
do
命令序列
done
- 执行流程: 首先将列表中的第一个取值赋给变量,并执行do……done循环体系中的命令序列,再将列表中的第2个取值赋给变量,并执行do……done循环体系中的命令序列,以此类推,直到表中所有取值都用完,最后跳到done语句,表示循环结束。
- 流程图
2.2 for语句应用示例
2.2.1根据IP地址列表检查主机状态
- ping 指定的IP地址看能不能用,能输入“up”,不能输出 “down”。
[root@localhost ~]
192.168.233.100
192.168.233.200
192.168.233.2
~
[root@localhost ~]
list=$(cat ipadds.txt)
for IP in $list
do
ping -c 3 -i 0.2 -W 3 $IP &> /dev/null
if [ $? -eq 0 ]
then
echo "Host $1 is up."
else
echo "Host $1 is down."
fi
done
[root@localhost ~]
Host is up.
Host is down.
Host is up.
2.2 输出一个等腰三角形
#! /bin/bash
i=1
while [ $i -le 9 ]
do
for ((j=9;j>=i;j-- ))
do
echo -n " "
done
for ((k=1;k<=2*i-1;k++))
do
echo -n "*"
done
let i++
echo " "
done
三、while循环语句
- 对于要求控制循环次数、操作对象按数字顺序编号、按特定条件执行重复操作等情况,适合使用while语句。
3.1whlie语句的结构
- while语句,可以根据特定的条件反复执行一个命令序列,直到该条件不再满足为止。应尽量避免出现死循环的情况,特殊情况除外。
- 语法结构如下
while 条件测试语句
do
命令序列
done
- 语句执行流程: 判断while后条件测试语句结果,结果成立,则执行do……done循环体中的命令序列,返回while后再次判断条件测试语句,如果满足,接续执行do……done循环体中命令,如果不满足直接退出循环。如此往复,直到条件测试结果不再满足。
- 流程图
3.2 while 语句应用示例
3.1 添加stu1到stu20用户,设置密码为123456
i=0
while [ $i -le 20 ]
do
useradd stu$1
echo “123456” | passwd --stdin stu$i
let i++
done
~