【shell脚本5】shell脚本中(for,while,until,if,case和终止语句的运用)

一、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后直接退出,不会执行输出数字,也不会执行语块外的代码。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值