一、for语句
(1)、语句结构
for 定义变量
do 使用变量执行动作
done 结束标志
(2)、示例
格式1
seq(启始值,间隔值,最终值)
for WESTOS in $(seq 1 2 10)
do
echo $WESTOS
done
格式2
in后如果变量值连续,可以使用{起始值…结束值}定义变量值
for WESTOS in {1..3}
do
echo $WESTOS
done
格式3
分别赋值
for WESTOS in ck1 ck2 ck3
do
echo $WESTOS
done
格式4
每次加一
for ((NUM=0;NUM<10;NUM++))
do
echo $NUM
done
(3) 、练习
练习1
使用for语句在in后使用罗列方法定义变量WESTOS的值为100—105,在循环中执行ping 172.25.254.$ip检测这些主机⽹络是否通畅,这里我们进行实验的虚拟主机的IP地址为172.25.42.100,因此只有172.25.254.100主机⽹络通畅
for ip in {100..105}
do
ping 172.25.42.$ip -c1 -w1 > /dev/null &&{
echo "172.25.42.$ip is up"
}||{
echo "172.25.42.$ip is done"
}
done
练习2
将/etc/passwd 倒数的8行不常用的用户删除掉
``这两个符号里面的内容代表执行
tail -n 8 /etc/passwd | awk -F : '{print $1}' > username
for USERNAME in `cat username`
do
`userdel -r $USERNAME`
done
二、while ture语句
(1)、语句结构
while ture 当...条件真
do 做...
done 结束
(2)、练习
练习1
编写脚本程序,使用while语句在条件为真时循环输出提示语,提示用户输入字符串并将用户输入的内容赋值给变量WORD,输出显示变量WORD的值
while true
do
read -p "please input word: " word
echo $word
done
练习2
当a的值小于10的时候都会进行a+1,不满足条件则会跳出
三、until do语句
(1)、语句结构
until false
do 执⾏动作
done 结束标志
(2)、练习
直到a等于10,否则a从0开始,每次都加1,输出a的值。
for循环加unil语句
for a in -1
do
until [ "$a" ="10" ]
do
a=$[$a+1]
echo $a
done
done
三、if…then…elif…then…else…fi语句
(1)、语句结构
if
then
执⾏动作
elif
then
执⾏动作
else
执⾏动作
fi 结束标志
(2)、练习
练习1
编写脚本程序,使用 if 语句对用户执行脚本时输入的数字进行判断,如果输入的数字为5则输出显示five,如果输入的数字为4则输出显示four,否则输出显示error
read -p "please input number: " number
if [ $number = 4 ]
then
echo "four"
elif [ $number = 5 ]
then
echo "five"
else
echo error
fi
练习2
编写数字竞猜脚本:输出提示语提示用户输入数字,每次$RANDOM都会随机生成一个随机数变量值,对其除以10取余操作得到0-9范围内的一个随机数,将用户输入的数字的值与生成的随机数的值作对比,如果相等则提示猜对了,如果不等则提升本次的猜的大小,继续进行。
main()
{
a=$[RANDOM%10]
read -p "please input your imaginationl numer: " number
if [ $number = $a ]
then
echo "right answer"
exit
elif [ $number -lt $a ] 判定是否小于随机值
then
echo "the number is small"
main
else
echo "the number is big"
main
fi
}
main
四、case语句
if 语句是判断机制,从第一个条件开始判断直到满足某一个条件为止,执行满足的判断条件所对应的命令语句,但这种每次从头开始判断的机制效率较低;case 语句是点名机制,会横向对比它所掌握的所有条件元素,符合哪个元素就执行哪个元素对应的语句,语句执行效率较高。case应答语句的结构为:
(1)、语句结构
case $1 in
word1|WORD1)
action1
;;
word2|WORD2)
action2
;;
*)
action3
esac 结束标志
(2)、例题
编写脚本程序,使用 语句对用户执行脚本时输入的字符串进行判断,如果输入的字符串为westos则输出显示westos,如果输入的字符串为linux则输出显示linux,否则输出显示error
1、使用if判断语句,当输入为linux时,可以发现程序进行了两次判断
if [ "$1" = "westos" ]
then
echo westos
elif [ "$1" = "linux" ]
then
echo liunx
else
echo error
fi
2、采用case语句,发现当输入为linux时,可以发现程序只进行了一次判断
case的点名机制效率更高,某些场景下相比较if语句进行了优化。
case $1 in
westos|WESTOS)
echo westos
;;
linux|LINUX)
echo westos
;;
*)
echo error
esac
五、continue / break / exit 终止条件终止条件 作用
(1)、语句结构
contiue | 终⽌此次循环提前进⼊下个循环 |
---|---|
break | 终⽌当前所在语句块的所有动作进⾏语句外的其他动作 |
exit | 退出脚本 |
(2)、练习
编写脚本,定义变量NUM的值为1—10,使用for语句循环输出显示变量NUM的值,并在变量NUM的值为6时输出lucky number !!
1、首先是基本语句
for NUM in {1..10}
do
if [ "$NUM" = "6" ]
then
echo lucky number
fi
echo $NUM
done
发现会在等于6的时候输出lucky number
2、使用continue语句
for NUM in {1..10}
do
if [ "$NUM" = "6" ]
then
echo lucky number
continue 终止此次循环,提前进入到下次循环
fi
echo $NUM
done
结果发现在运行到6时,输出了lucky number,并在输出了lucky number之后跳出了循环,不继续执行输出数字的操作。
3、使用break语句
在最后添加了一行输出######333,是为了和exit进行对比
for NUM in {1..10}
do
if [ "$NUM" = "6" ]
then
echo lucky number
break
fi
echo $NUM
done
echo '################'
结果发现在运行到6时,输出了lucky number,并在输出了lucky number之后跳出了所有的循环,也不会继续执行输出数字的操作。但是break所在语块外输出#######语句可以执行
4、使用exit语句
for NUM in {1..10}
do
if [ "$NUM" = "6" ]
then
echo lucky number
exit
fi
echo $NUM
done
echo '################'
发现运行到6后会输出lucky number后直接退出,不会执行输出数字,也不会执行语块外的代码。