Shell程序设计-循环与分支语句

目录

一、学会使用for、while循环语句

二、学会使用case分支语句


1.for、while循环语句:

条件控制语句所控制的自增变量,因为归属for循环的语法结构中,在for循环结束后,就不能再次被访问到了

for 变量名 in 取值列表
do
  命令序列
done

条件控制语句所控制的自增变量,对于while循环来说不归属其语法结构中,在while循环结束后,该变量还可以继续使用

while 条件测试操作
do
    命令序列
done

2. case分支语句:

case语句是多分支选择语句,if语句只有两个分支可供选择,而实际问题中常常需要用到多分支选择结构。

case  变量值  in
模式1)
    命令序列1
    ;;
模式2)
    命令序列2
    ;;
 ……
* )
    默认命令序列
esac

一、批量添加用户

[root@localhost ~]# vi  /root/users.txt

chenye

dengchao

zhangjie

[root@localhost ~]# vi uaddfor.sh

#!/bin/bash

ULIST=$(cat /root/users.txt)

for UNAME in $ULIST

do

    useradd $UNAME

    echo "123456" | passwd --stdin $UNAME

done

 

[root@localhost ~]# sh uaddfor.sh

[root@localhost ~]# tail -3 /etc/passwd

chenye:x:1011:1011::/home/chenye:/bin/bash

dengchao:x:1012:1012::/home/dengchao:/bin/bash

zhangjie:x:1013:1013::/home/zhangjie:/bin/bash

根据IP地址检查主机状态 

IP地址存放在ipadds.txt文件中,每行一个

[root@localhost ~]# vi chkhosts.sh

#!/bin/bash

HLIST=$(cat /root/ipadds.txt)

for IP in $HLIST

do

    ping -c 3 -i 0.2 -W 3 $IP &> /dev/null

    if [ $? -eq 0 ] ; then

        echo "Host $IP is up."

    else

        echo "Host $IP is down."

    fi

done

 使用ping命令检测各主机的连通性

[root@localhost ~]#  sh chkhosts.sh

Host 192.168.4.11 is up.

Host 192.168.4.110 is down.

Host 192.168.4.120 is up. 

 批量添加用户

用户名称以stu开头,按数字顺序进行编号

一共添加20个用户,即stu1stu2……stu20

初始密码均设为123456

[root@localhost ~]# vi uaddwhile.sh

#!/bin/bash

PREFIX="stu"

i=1

while [ $i -le 20 ]

do

    useradd ${PREFIX}$i

    echo "123456" | passwd --stdin ${PREFIX}$i &> /dev/null

    let i++

done

[root@localhost ~]# sh uaddwhile.sh

[root@localhost ~]# grep "stu" /etc/passwd | tail -3

stu18:x:1028:1028::/home/stu18:/bin/bash

stu19:x:1029:1029::/home/stu19:/bin/bash

stu20:x:1030:1030::/home/stu20:/bin/bash

 

[root@localhost ~]# vi pricegame.sh

#!/bin/bash

PRICE=$(expr $RANDOM % 1000)

TIMES=0

echo "商品实际价格为0-999之间,猜猜看是多少?"

while true

do

    read -p "请输入你猜测的价格数目:" INT

    let TIMES++

    if [ $INT -eq $PRICE ] ; then

        echo "恭喜你答对了,实际价格是 $PRICE"

        echo "你总共猜测了 $TIMES "

        exit 0

    elif [ $INT -gt $PRICE ] ; then

        echo "太高了!"

    else

        echo "太低了!"

    fi

done

 

 

[root@localhost ~]#sh pricegame.sh

商品实际价格为0-999之间,猜猜看是多少?

请输入你猜测的价格数目:500

太高了!

请输入你猜测的价格数目:250

太低了!

请输入你猜测的价格数目:375

太高了!

请输入你猜测的价格数目:280

太高了!

请输入你猜测的价格数目:265

太高了!

请输入你猜测的价格数目:253

恭喜你答对了,实际价格是 253

你总共猜测了 6

 


二、击键类型识别

提示用户输入一个字符

判断出该字符是字母、数字或者其他字符

[root@localhost ~]# vi hitkey.sh

#!/bin/bash

read -p "请输入一个字符,并按Enter键确认:" KEY

case "$KEY" in

  [a-z]|[A-Z])

      echo "您输入的是 字母。"

      ;;

  [0-9])

      echo "您输入的是 数字。"

      ;;

  *)

      echo "您输入的是 空格、功能键或其他控制字符。"

esac

 

[root@localhost ~]# sh hitkey.sh

请输入一个字符,并按Enter键确认:k

您输入的是 字母 k

[root@localhost ~]# ./hitkey.sh

请输入一个字符,并按Enter键确认:8

您输入的是 数字 8

[root@localhost ~]# ./hitkey.sh

请输入一个字符,并按Enter键确认:^[[19~

您输入的是 空格、功能键或其他控制字符。


总结:

for语句可根据已知的列表对象重复执行命令序列,更适合无规律的循环操作。
​ while语句可根据特定的条件重复执行命令序列,更适合有规律的循环规律。

case语句可根据变量的不同的取值执行不同的命令序列,比多分支的if语句结构更加清晰。

  • 21
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值