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


for 循环

指定次数

#!/bin/bash
for ((i=1;i<=10;i++))
do
echo $i
done
[root@localhost ~]# vim num.sh
[root@localhost ~]# chmod +x num.sh
[root@localhost ~]# ./num.sh
1
2
3
4
5
6
7
8
9
10
  • 九九乘法口诀表
#!/bin/bash
result=0
for ((i=1;i<=9;i++))
do
for ((j=1;j<=$i;j++))
do
result=`expr $i \* $j`
echo -en "$j * $i = $result\t"
done
echo ""
done
[root@localhost ~]# vim 99.sh
[root@localhost ~]# ./99.sh
1 * 1 = 1
1 * 2 = 2 2 * 2 = 4
1 * 3 = 3 2 * 3 = 6 3 * 3 = 9
1 * 4 = 4 2 * 4 = 8 3 * 4 = 12 4 * 4 = 16
1 * 5 = 5 2 * 5 = 10 3 * 5 = 15 4 * 5 = 20 5 * 5 = 25
1 * 6 = 6 2 * 6 = 12 3 * 6 = 18 4 * 6 = 24 5 * 6 = 30 6 * 6 = 36
1 * 7 = 7 2 * 7 = 14 3 * 7 = 21 4 * 7 = 28 5 * 7 = 35 6 * 7 = 42 7 * 7 = 49
1 * 8 = 8 2 * 8 = 16 3 * 8 = 24 4 * 8 = 32 5 * 8 = 40 6 * 8 = 48 7 * 8 = 56 8 * 8 = 64
1 * 9 = 9 2 * 9 = 18 3 * 9 = 27 4 * 9 = 36 5 * 9 = 45 6 * 9 = 54 7 * 9 = 63 8 * 9 = 72 9 * 9 = 81

遍历循环

#!/bin/bash
TMP=$(cat username.txt)
for USER in $TMP
do
echo "用户:$USER"
done
[root@localhost ~]# vim users.sh
[root@localhost ~]# chmod +x users.sh
[root@localhost ~]# vim users.txt
[root@localhost ~]# cat users.txt
zhangsan
lisi
wangwu
[root@localhost ~]# ./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 "已删除添加的用户"
[root@localhost ~]# vim useradd.sh
[root@localhost ~]# chmod +x useradd.sh
[root@localhost ~]# ./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
[root@localhost ~]# vim ping.sh
[root@localhost ~]# chmod +x ping.sh
[root@localhost ~]# vim ipadds.txt
[root@localhost ~]# cat ipadds.txt
127.0.0.1
192.168.28.129
[root@localhost ~]# ./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 "已删除添加的用户"
[root@localhost ~]# vim useradd10.sh
[root@localhost ~]# ./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
[root@localhost ~]# vim guess.sh
[root@localhost ~]# chmod +x guess.sh
[root@localhost ~]# ./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 "感谢您的光临!欢迎下次再来!"

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

  1. 1.Shell编程循环语句(if 、while、 until)

    循环语句 for循环语句 读取不同的变量值,用来逐个执行同一组命令 格式: for 变量名 in 取值列表 do 命令序列 done 示例:批量创建用户并设置密码 [root@localhost da ...

  2. shell编程——if语句【转载】

    (2)shell编程——if语句_macg_新浪博客http://blog.sina.com.cn/s/blog_6151984a0100ekl6.html shell编程——if语句转载 if 语句 ...

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

    shell编程中条件表达式的使用 if  条件then Commandelse Commandfi                              别忘了这个结尾 If语句忘了结尾fites ...

  4. Shell 编程 until语句

    本篇主要写一些shell脚本until语句的使用. 计算1-50的和 #!/bin/bash i=0 s=0 until [ $i -eq 51 ];do let s+=i;let i++ done ...

  5. Shell 编程 case语句

    本篇主要写一些shell脚本case语句的使用. 字符判断 #!/bin/bash read -p "请输入一个字符:" char case $char in [a-z]|[A-Z ...

  6. Shell 编程 条件语句

    本篇主要写一些shell脚本条件语句的使用. 条件测试 test 条件表达式 [ 条件表达式 ] 文件测试 -d:测试是否为目录(Directory). -e:测试文件或目录是否存在(Exist). ...

  7. shell编程——if语句 if -z -n -f -eq -ne -lt

    if  条件then Commandelse Commandfi                              别忘了这个结尾 If语句忘了结尾fitest.sh: line 14: sy ...

  8. shell编程——if语句

    if 语句格式 if  条件 then  Command else  Command fi                              别忘了这个结尾 If语句忘了结尾fi test.s ...

  9. Linux shell while循环语句

    for :明确循环次数 while :不确定循环换次数 while循环 (1) while CONDITION:do       statement       statement       < ...

随机推荐

  1. PATB1031查验身份证

    这一题遇见的错误有很多,学会了一些知识点 使用了strcpy函数,前是需要复制的数组,后面是被复制的数组 关于字符,如果是非数字可以使用 <='9' && >='0'来判断 ...

  2. Nuxt.js中scss公用文件(不使用官方插件style-resources)

    项目多多少少应该都遇到有公用文件这种情况,比如说偶尔某一天产品来找你,能不能明天把网站的这个颜色给我改下?第二天再来给我换回来? 如果再css2.x时代,不使用css预处理技术,这一改只能“查找替换” ...

  3. C语言-malloc

    malloc函数 编辑 锁定 同义词 malloc一般指malloc函数   malloc函数是一种分配长度为num_bytes字节的内存块的函数,可以向系统申请分配指定size个字节的内存空间.ma ...

  4. spring学习-ApplicationContext-spring上下文深入理解

    4月份开始复习一遍spring相关知识.让自己巩固一下spring大法的深奥益处,所以就看了大佬的博客,转载留下来日后继续研读.认为重点的标记为红色 以下文章内容转载自:http://www.cnbl ...

  5. 将物理机转换成vmware虚机

    随着虚拟化的快速发展,公司主要是以公有云+私有云结合的混合云部署,据我不成熟的了解,目前很少有公司会将一台单独的物理机作为服务器,在公司内部大家逐渐接受了私有云的部署方案,这样做不但可以节省硬件资源, ...

  6. vux scroller在iOS13上,一停止滑动就跳到顶部

    转载:https://blog.csdn.net/sllailcp/article/details/102502452 今天客户反馈的问题,说在最新版的iOS上(iOS13),滑动列表,滑完就会跳到顶 ...

  7. 30分钟用 Laravel 实现一个博客

    介绍 Laravel 是一款 MVC架构. 目前最流行的 PHP框架. Laravel的优点在于: 丰富的composer类库支持, 优雅的代码, 未来的主流框架(目前市场占有率最高的框架) Lara ...

  8. | C语言I作业04

    | C语言I作业004 标签: 18软件 李煦亮 问题 答案 这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 https://www.cnblogs.com/pengchen511/p/ ...

  9. SpringBoot工程常见报错汇总

    1.Springboot测试类运行报错 java.lang.IllegalStateException: Unable to find a @SpringBootConfiguration, you ...

  10. 解决element-ui表格表头内容太长时的换行问题

    在用vue+element-ui做一个后台管理系统时,遇到这样的问题, 如图: 使用el-table做一个表格,当表头内容过长时会换行,在不设置的宽度的时候每一列的宽度是等比例分配的,虽然elemen ...