Shell 编程 循环语句

本篇主要写一些shell脚本循环语句的使用。


for 循环

指定次数

#!/bin/bash
for ((i=1;i<=10;i++))
do
  echo $i
done
[[email protected] ~]# vim num.sh
[[email protected] ~]# chmod +x num.sh
[[email protected] ~]# ./num.sh
1
2
3
4
5
6
7
8
9
10

遍历循环

#!/bin/bash
TMP=$(cat username.txt)
for USER in $TMP
do
  echo "用户:$USER"
done
[[email protected] ~]# vim users.sh
[[email protected] ~]# chmod +x users.sh
[[email protected] ~]# vim users.txt
[[email protected] ~]# cat users.txt
zhangsan
lisi
wangwu
[[email protected] ~]# ./users.sh
用户:zhangsan
用户:lisi
用户:wangwu
  • 添加用户
#!/bin/bash
TMP=$(cat users.txt)
for USER in $TMP
do
  useradd $USER && echo "123456" | passwd --stdin $USER &> /dev/null
done
echo "添加的用户信息为:"
tail -$(cat users.txt | wc -l) /etc/passwd
for USER in $TMP
do
  userdel -r $USER
done
echo "已删除添加的用户"
[[email protected] ~]# vim useradd.sh
[[email protected] ~]# chmod +x useradd.sh
[[email protected] ~]# ./useradd.sh
添加的用户信息为:
zhangsan:x:1001:1001::/home/zhangsan:/bin/bash
lisi:x:1002:1002::/home/lisi:/bin/bash
wangwu:x:1003:1003::/home/wangwu:/bin/bash
已删除添加的用户
  • 检查主机状态
#!/bin/bash
TMP=$(cat ipadds.txt)
for IP in $TMP
do
  ping -c 4 -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
[[email protected] ~]# vim ping.sh
[[email protected] ~]# chmod +x ping.sh
[[email protected] ~]# vim ipadds.txt
[[email protected] ~]# cat ipadds.txt
127.0.0.1
192.168.28.129
[[email protected] ~]# ./ping.sh
Host 127.0.0.1 is up
Host 192.168.28.129 is down

while 循环

  • 输出110
#!/bin/bash
num=1
while [ $num -le 10 ]
do
  echo $num
  #num=`expr $num + 1`
  let num++
done
  • 添加用户
#!/bin/bash
# useradd
num=1
while [ $num -le 10 ]
do
  useradd stu$num && echo "123456" | passwd --stdin stu$num &> /dev/null
  let num++
done
echo "添加的用户信息为:"
tail -10 /etc/passwd
# userdel
num=1
while [ $num -le 10 ]
do
  userdel -r stu$num
  let num++
done
echo "已删除添加的用户"
[[email protected] ~]# vim useradd10.sh
[[email protected] ~]# ./useradd10.sh
添加的用户信息为:
stu1:x:1001:1001::/home/stu1:/bin/bash
stu2:x:1002:1002::/home/stu2:/bin/bash
stu3:x:1003:1003::/home/stu3:/bin/bash
stu4:x:1004:1004::/home/stu4:/bin/bash
stu5:x:1005:1005::/home/stu5:/bin/bash
stu6:x:1006:1006::/home/stu6:/bin/bash
stu7:x:1007:1007::/home/stu7:/bin/bash
stu8:x:1008:1008::/home/stu8:/bin/bash
stu9:x:1009:1009::/home/stu9:/bin/bash
stu10:x:1010:1010::/home/stu10:/bin/bash
已删除添加的用户
  • 猜数字游戏

RANDOM值的范围为:0-32767

#!/bin/bash
key=$(expr $RANDOM % 1000)
times=0
while true
do
  read -p "请输入数字(0-999):" num
  let times++
  if [ $num -eq $key ]
  then
    echo "猜对了!你猜了 $times 次。"
    exit 0
  elif [ $num -gt $key ]
  then
    echo "猜高了"
  else
    echo "猜低了"
  fi
done
[[email protected] ~]# vim guess.sh
[[email protected] ~]# chmod +x guess.sh
[[email protected] ~]# ./guess.sh
请输入数字(0-999):500
猜低了
请输入数字(0-999):750
猜低了
请输入数字(0-999):875
猜高了
请输入数字(0-999):800
猜低了
请输入数字(0-999):850
猜高了
请输入数字(0-999):825
猜低了
请输入数字(0-999):835
猜低了
请输入数字(0-999):840
猜高了
请输入数字(0-999):838
猜对了!你猜了 9 次。

综合实例

  • 购物系统
#!/bin/bash
# Shopping System V1.1
c1=手套
c2=外套
c3=裤子
c4=鞋子
p1=40
p2=500
p3=150
p4=200
count=0
total=0
echo "欢迎光临!物美价廉!欢迎选购!"
for ((i=1;i<=5;i++))
do
  read -p "第 $i 家店,是否进入(y/n):" ack
  if [ $ack = y ]
  then
    echo "商品如下:"
    echo "1.$c1:¥$p1"
    echo "2.$c2:¥$p2"
    echo "3.$c3:¥$p3"
    echo "4.$c4:¥$p4"
    while true
    do
      read -p "是否购买(y/n):" ack
      if [ $ack = y ]
      then
        read -p "请输入需要购买的商品序号:" num
        case $num in
        1)
          echo "您购买了$c1"
          let count++
          total=`expr $total + $p1`
          ;;
        2)
          echo "您购买了$c2"
          let count++
          total=`expr $total + $p2`
          ;;
        3)
          echo "您购买了$c3"
          let count++
          total=`expr $total + $p3`
          ;;
        4)
          echo "您购买了$c4"
          let count++
          total=`expr $total + $p4`
          ;;
        *)
          echo "输入错误,购买失败"
        esac
      elif [ $ack = n ]
      then
        echo "您走出了第 $i 家店"
        break
      else
        echo "输入错误,请重新输入"
      fi
    done
  elif [ $ack = n ]
  then
    continue
  else
    echo "输入错误,请重新输入"
    let i--
  fi
done
echo "购物数量:$count"
echo "购物总价:$total"
echo "感谢您的光临!欢迎下次再来!"

原文地址:https://www.cnblogs.com/llife/p/11633411.html

时间: 2024-08-28 04:44:19

Shell 编程 循环语句的相关文章

Shell编程——循环语句

2.case 语句 只判断一种条件关系 语法: case ¢变量名 in "值1") 程序1 ;; "值2") 程序2 ;; *) 程序3 ;; esac 3.for循环 1)语法:(将值赋给变量执行程序,有几个值就执行几次) for 变量名 in 值1 值2 值3.... do 程序 done 2)语法:加法用算 循环控制条件成立时执行下面的程序 (注意:双括号用于加减算法,双括号与 中间值之间应有一个空格) for(( 初始值:循环控制条件:变量变化 )) do

【转载】shell编程——if语句 if -z -n -f -eq -ne -lt

shell编程中条件表达式的使用 if  条件then Commandelse Commandfi                              别忘了这个结尾 If语句忘了结尾fitest.sh: line 14: syntax error: unexpected end of fi if 的三种条件表达式 ifcommandthen if 函数then  命令执行成功,等于返回0 (比如grep ,找到匹配)执行失败,返回非0 (grep,没找到匹配) if [ expressi

linux下Bash编程循环语句特殊用法之编写脚本(十)

linux下Bash编程while语句特殊用法之编写脚本(十) 1.循环控制: break:中断整个循环语句,即退出循环后执行脚本后面的语句 continue:中断当前本次循环,提前进入下一轮循环 exit:结束脚本运行 2.while死循环,即当不知道循环多少次时 格式 : while :; do 循环语句 done 3.while从输入重定向文件中每行读取并赋值给read变量 格式:  while read LINE;do 循环语句 done < 路径文件 4.实例脚本 4.1.找出/etc

Shell脚本循环语句——for循环

学习脚本就是为了方便我们运维工作,而对运维人员从来讲,有很多工作也是需要重复执行的,比如我们管理用户帐户时就需要批量创建和删除用户帐户.而此时如果使用系统自带的useradd或者userdel去操作的话,就只能机械式的一个一个创建,一个一个的删除.那我们是不是就可以考虑写一个程序,让它自动化的去创建了.此时,我们的循环执行概念也就出来了.循环就是让程序按照一定的条件反复的执行相关操作,直到不在满足循环条件时结束. 循环语句常见分类: 1,for语句 2,while语句 3,until语句 循环体

Shell脚本循环语句——continue与break

continue与break常用于while.until.select循环语句中,指定条件下退出本轮循环或者所有循环,需要我们用实例去验证运行结果,就好理解了.但凭看文字介绍确实不怎么好理解. continue用法 continue用于循环体中continue [N]:提前结束第N层的本轮循环,而直接进入下一轮判断:最内层为第1层 while CONDTIITON1; do CMD1 ... if CONDITION2; then continue fi CMDn ... done 实例演示:#

Shell 编程 条件语句

本篇主要写一些shell脚本条件语句的使用. 条件测试 test 条件表达式 [ 条件表达式 ] 文件测试 -d:测试是否为目录(Directory). -e:测试文件或目录是否存在(Exist). -f:测试是否为文件(File). -r:测试当前用户是否有权限读取(Read). -w:测试当前用户是否有权限写入(Write). -x:测试是否设置有可执行权限(Excute). -nt:判断文件A是否比文件B新. -ot:判断文件A是否比文件B旧. -ef:判断两个文件是否为同一个文件,用来判

Shell 编程 case语句

本篇主要写一些shell脚本条件语句的使用. 条件测试 test 条件表达式 [ 条件表达式 ] 文件测试 -d:测试是否为目录(Directory). -e:测试文件或目录是否存在(Exist). -f:测试是否为文件(File). -r:测试当前用户是否有权限读取(Read). -w:测试当前用户是否有权限写入(Write). -x:测试是否设置有可执行权限(Excute). -nt:判断文件A是否比文件B新. -ot:判断文件A是否比文件B旧. -ef:判断两个文件是否为同一个文件,用来判

Shell 编程 until语句

本篇主要写一些shell脚本until语句的使用. 计算1-50的和 #!/bin/bash i=0 s=0 until [ $i -eq 51 ];do let s+=i;let i++ done echo $s [[email protected] ~]# vim sum.sh [[email protected] ~]# chmod +x sum.sh [[email protected] ~]# ./sum.sh 1275 为指定用户发送在线消息 #!/bin/bash username

Shell编程——case语句与循环语句(3)

case多分支语句 case语句的结构 针对变量的不同取值,分别执行不同的命令序列 实例1 击键类型识别 提示用户输入一个字符 判断出该字符是字母,数字或者其他字符 #!/bin/bash read -p "请输入一个字符:" key case $key in [a-z] | [A-Z]) echo "你输入的是字母" ;; [0-9]) echo "你输入的是数字" ;; *) echo "你输入的是特殊字符" esac 实