文章目录

  • 1.for语句的结构
    • 示例1
    • 示例2
    • 示例3
    • 示例4
  • 2.while语句的结构
    • 示例1
  • 3.until语句的结构
    • 示例1

1.for语句的结构

总结:

条件需要你预先已经知道会出现哪些情况,根据情况做出措施。

循环的主体是一些重复性的操作,当然了,重复性的操作也有循环条件的,这个循环条件是可以后给的。

在实际工作中,经常会遇到某项任务需要多次执行的情况,而每次执行时仅仅是处理的对象不一样,其他命令相同。例如根据通讯录中的姓名列表创建系统账号,根据服务器清单检查各主机的存活状态,根据IP地址黑名单设置拒绝访问的防火墙策略等。

当面对各种列表重复任务时,使用简单的if语句已经难以满足要求,而顺序编写全部代码更是显得异常烦琐、困难重重。而for循环语句,可以很好地解决类似问题。

使用for循环语句时,需要指定一个变量及可能的取值列表,针对每个不同的取值重复执行相同的命令序列,直到变量值使用完退出循环。在这里,“取值列表”称为for语句的指行条件,其中包括多个属性相同的对象,需要预先指定(如通讯录、IP黑名单等)。

读取不同的变量值,用来逐个执行同一组命令

示例1

需求:根据人事部门给出的员工的拼音列表,在Linux服务器中添加相应的用户账户,初始密码均设置为“123456”。其中员工列表中的账号数量并不固定,而且除了要求账户名称时拼音之外,并无其他特殊规律。

1.创建一个新用户列表,内容根据人事给定的姓名拼音来认定
[root@server ~]# vim users.txt
zhangsan
lisi
wangwu
2.循环创建列表里这些用户,并给他们这些设定初始密码,密码为“123456”
[root@server ~]# vim uaddfor.sh
#!/bin/bash
ULIST=$(cat /root/users.txt)
for UNAME in $ULIST
do
useradd $UNAME
echo "123456" | passwd --stdin $UNAME &> /dev/null
done[root@server ~]# sh uaddfor.sh
[root@server ~]# tail -f /etc/passwd
......
zhangsan:x:1003:1003::/home/zhangsan:/bin/bash
lisi:x:1004:1004::/home/lisi:/bin/bash
wangwu:x:1005:1005::/home/wangwu:/bin/bash更改以上脚本
[root@server ~]# cat uaddfor.sh
#!/bin/bash
ULIST=$(cat /root/users.txt)
for UNAME in $ULIST
doif [ $uname == `grep $UNAME /etc/passwd | awk -F: '{print $1}'` ]then echo "姓名重复"fiuseradd $UNAMEecho "123456" | passwd --stdin $UNAME &> /dev/null
done

示例2

若某些用户离职,把必要文件备份过后,就需要把一些用户连带他的宿主目录删除

1.创建离职用户名单
[root@server ~]# cat users.txt
zhangsan
lisi
[root@server ~]# cat udelfor.sh
#!/bin/bash
ULIST=$(cat /root/users.txt)
for UNAME in $ULIST
doa=`ls -lh /home/$UNAME | awk '{print $2}'`if [ $a -ne 0 ]then cp -r /home/$UNAME /userfile_backupfiuserdel -r $UNAME &> /dev/null
done[root@server ~]# sh udelfor.sh
[root@server ~]# id zhangsan
id: zhangsan: no such user

示例3

根据包含公司各服务器IP地址的列表文件,检查其中各主机的ping连通性,输出各主机是否启动、关闭。其中,服务器的数量并不固定,各服务器的IP地址之间也无特殊规律。

1.创建需要测试的主机列表
[root@server ~]# cat ipadds.txt
192.168.100.11
192.168.100.12
192.168.100.13
2.创建循环主体,根据ping的结果反馈,如果为真则认定其是在线,如果为假则认为其是下线的。
[root@server ~]# cat chkhosts.sh
#!/bin/bash
HLIST=$(cat /root/ipadds.txt)
for ip in $HLIST
doping -c 3 -i 0.2 -W 3 $ip &> /dev/nullif [ $? -eq 0 ]then echo "host $ip is up"else echo "host $ip is down"fi
done
[root@server ~]# sh chkhosts.sh
host 192.168.100.11 is up
host 192.168.100.12 is up
host 192.168.100.13 is down

示例4

根据列表给定的加班用户,给相应的用户工资加100元

分析:1.确定用户名单 2.根据用户名单加100元

[root@server ~]# cat jiaban.txt
zhangsan
lisi
wangwu[root@server ~]# cat gongzi.sh
#!/bin/bash
# get a salary list
base_money=3000
list=$(cat /root/jiaban.txt)
for user in $list
domoney=$(expr $base_money + 100)echo "$user salary is $money"
done
[root@server ~]# sh gongzi.sh
zhangsan salary is 3100
lisi salary is 3100
wangwu salary is 3100

位置变量给定用户和加班天数,算加班工作

[root@server ~]# cat gongzi.sh
#!/bin/bash
# get a salary list
base_money=3000
for user in $1
domoney=$(expr $base_money + 100 \* $2)echo "$user salary is $money"
done
[root@server ~]# sh gongzi.sh lisi 5
lisi salary is 3500

2.while语句的结构

for循环语句非常适用于列表无规律,且列表来源已固定(如某个列表文件)的场合。而对于要求控制循环次数、操作对象按数字顺序编号、按特定条件执行重复操作等情况,则更适合使用另外一种循环——while语句。

重复测试某个条件,只要条件成立则反复执行

使用while循环语句时,可以根据特定的条件反复执行一个命令序列,直到该条件不再满足时为止。当测试条件不再成立,从而结束循环

示例1

需求1:若要添加20个用户,名称依次为stu1、stu2、…、stu20.

[root@server ~]# cat uaddwhile.sh
#!/bin/bash
prefix="stu"
i=1
while [ $i -le 20 ]
douseradd ${prefix}$iecho "123456" | passwd --stdin ${prefix}$i &> /dev/nulllet i++
done
[root@server ~]# sh uaddwhile.sh
[root@server ~]# grep "stu" /etc/passwd | tail -5
stu16:x:1016:1016::/home/stu16:/bin/bash
stu17:x:1017:1017::/home/stu17:/bin/bash
stu18:x:1018:1018::/home/stu18:/bin/bash
stu19:x:1019:1019::/home/stu19:/bin/bash
stu20:x:1020:1020::/home/stu20:/bin/bash
[root@server ~]# cat uaddwhile2.sh
#!/bin/bash
i=1
while [ $i -le 30 ]
douname=stu$iif [ $uname==`grep $uname /etc/passwd | awk -F: '{print $1}'` ]then echo "姓名重复"fiuseradd $unameecho 123456 | passwd --stdin $uname &> /dev/nulllet i++
done

3.until语句的结构

until循环语句与while循环类似,while循环能实现的脚本until同样也可以实现,,但区别是while循环在条件真是继续执行循环,而until则是在条件为假时执行循环

重复测试某个条件,只要条件不成立则反复执行

示例1

计算1~50的和值
通过循环累加的方式计算1-50的和值

#!/bin/bash
i=1
sum=0
until [ $i -eq 51 ]
dolet sum+=$ilet i++
done
echo "和为:$sum"

Shell编程之循环语句(for、while、until)相关推荐

  1. shell编程之循环语句

    shell编程之循环语句 文章目录 shell编程之循环语句 一.for循环语句 1. for循环语法结构 ㈠ 列表循环 2. 应用案例 二.while循环语句 1. while循环语法结构 2. 应 ...

  2. Shell编程之循环语句(详细讲解以及脚本案例)

    Shell编程之循环语句(详细讲解以及脚本案例) 文章目录 一.for语句的结构 (一).for语句应用实例 1.示例1--批量添加用户 2.示例2--使用根据IP地址检查主机状态 3.示例3--fo ...

  3. Shell编程之循环语句与常用转义字符及一些小实验

    for循环语句 循环控制语句 seq命令 实例: while循环 实例: until循环 实例: 常用转义字符 shell脚本多重循环小实验 一.99乘法表 二.矩形 三.直角三角形 四.等腰直角三角 ...

  4. 【Shell编程之循环语句与函数】

    目录 一.for循环语句 示例: 示例1 示例2 示例3 二.跳出循环 举例 转义符 三.while 语句的结构 示例: 四.until语句的结构 1.基本格式 五.seq命令 一.for循环语句 读 ...

  5. (四)shell编程之循环结构

    shell编程之循环结构 #本机课程目标 掌握for循环语句的基本语法结构 掌握while和until循环语句的基本语法结构 一.for循环语句 关键词:爱的魔力转圈圈

  6. shell编程之条件语句(文件测试,test命令,字符串和逻辑测试,if单支语句,if双支语句,if多支语句,case命令,用if写跑步小实验)

    文章目录 shell编程之条件语句 条件测试 test命令 整数值测试 free -m 提供了更简洁的查看系统内存使用情况: 字符串和逻辑测试 字符串 逻辑测试 一元运算符,二元运算符和三元运算符 i ...

  7. Linux Shell脚本多循环语句练习题

    Linux Shell脚本多循环语句练习题 99乘法表 矩形 正直角三角形 反直角三角形 倒直角三角形 等腰三角形 倒等腰三角形 菱形 平行四边形 直角梯形 等腰梯形 99乘法表 #!/bin/bas ...

  8. Shell编程之条件语句(if语句,case分支语句)

    Shell编程之条件语句 一.条件测试操作 1.test命令 2.文件测试 3.整数值比较 4.字符串比较 5.逻辑测试 二.if语句 单分支结构 双分支结构 多分支结构 三.case分支语句 一.条 ...

  9. Shell:shell中的循环语句

    shell中的循环语句 for语法格式 for var in list;do commands done 其中list可以包含: 1) 直接写 for alpha in a b c d;doecho ...

最新文章

  1. 解读互联网40年中的10大“杀手”病毒
  2. 开发一次、多端覆盖的开源统一框架
  3. 没有文档,没有老员工讲解,悲催的新人如何快速熟悉一个新项目?
  4. 多文件编程 【多文件编程】(26)
  5. 虚拟硬盘VHD的程式化挂载方式
  6. ubuntu anaconda配置环境变量_Anaconda从下载到环境变量配置(windows)
  7. Usaco_1_3_Calf Flac
  8. 用C语言调用.bat批处理命令
  9. 数学分析 积分表及常用积分公式
  10. GB 4208-93 外壳防护等级(IP代码)
  11. 日系插画学习笔记(十):色彩基础
  12. python123作业题
  13. 单兵渗透工具-Yakit-Windows安装使用
  14. JAVA的远程控制系统(远程监控)实现
  15. 这几个消除笔软件,值得你们收藏
  16. 远程桌⾯连接电脑后键盘失灵解决方案
  17. python 获取计算机的网卡信息
  18. 陈正康考研英语长难句1~25
  19. 树莓派开发系列教程2——树莓派上手使用
  20. 图解java链表基本操作篇一(头插法和尾插法)

热门文章

  1. “快应用” VS “微信小程序” ,你挺谁?
  2. oa系统对服务器的要求1000台,OA系统的性能需要压力测试
  3. 电子商务人才缺口严重,并正在扩大
  4. Pointers on C - C 和指针 - 书中源代码
  5. office2016设置outlook登录263邮箱步骤
  6. 洞悉规模化敏捷框架S@S、LeSS、SAFe(下篇)
  7. yum与rpm、apt的区别:rpm的缺陷及yum的优势
  8. Android 基础总结(二)Android的事件处理
  9. 思科CCNA第一学期第八章答案
  10. waves服务器系统包,Waves Complete 12