shell循环语句及实验
一,for循环语句
在工作中,经常会遇到某项任务需要多次执行的情况,而每次执行时仅仅是处理的 对象不一样,其他命令相同。例如,根据通讯录中的姓名列表创建系统账号,根据服务器清 单检查各主机的存活状态,根据 IP 地址黑名单设置拒绝访问的防火墙策略等。
当面对各种列表重复任务时,使用简单的 if 语句已经难以满足要求,而顺序编写全部代码更是显得异常烦琐、困难重重。本节将要学习的 for 循环语句,可以很好地解决类似问
for 循环语句的语法结构如下所
for变量名 n取值列表
do
命令序列
done
1根据姓名列表批量添加用户
[root@localhost ~]# vi /root/users.txt //用做测试的列表文件chenyedengchao zhangjie[root@localhost ~]# vi uaddfor.sh //批量添加用户的脚本#!/bin/bashULIST=$(cat /root/users.txt) for UNAME in $ULISTdouseradd $UNAMEecho "123456" | passwd --stdin $UNAME &>/dev/null
done[root@localhost ~]# chmod +x uaddfor.sh[root@localhost ~]# ./uaddfor.sh //测试并确认执行结果[root@localhost ~]# tail -3 /etc/passwdchenye:x1005:1005::/home/chenye:/bin/bash dengchaox:1006:1006::/home/dengchao:/bin/bash zhangji:x:1007:1007::/home/zhangji:/bin/bash
2,根据IP地址列表检查主机状态
[root@localhost ~]# vi /root/ipadds.txt //用做测试的列表文件
172.16.16.1
172.16.16.22
172.16.16.220
[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 //-c 发送包的数量;-i 发送 ping 包间隔;-W 超时时间if [ $? -eq 0 ]
then
echo "Host $IP is up."
else
echo "Host $IP is up."
fi done[root@localhost ~]# chmod +x chkhosts.sh[root@localhost ~]# ./chkhosts.sh //测试并确认执行结果
Host 172.16.16.1 is up.Host 172.16.16.22 is up.
Host 172.16.16.220 is down.
2,使用while循环语句
for 循环语句非常适用于列表对象无规律,且列表来源已固定(如某个列表文件)的场合。而对于要求控制循环次数、操作对象按数字顺序编号、按特定条件执行重复操作等情况, 则更适合使用另外一种循环——while 语句
使用 while 循环语句时,可以根据特定的条件反复执行一个命令序列,直到该条件不再满足时为止。在脚本应用中,应该避免出现死循环的情况,否则后边的命令操作将无法执行。 因此,循环体内的命令序列中应包括修改测试条件的语句,以便在适当的时候使测试条件不再成立,从而结束循环。
while 循环语句的语法结构如下所示
while 条件测试操作
do
命令序列
done
1),批量添加规律编号的用户
[root@localhost ~]# vi uaddwhile.sh //批量添加用户的脚本#!/bin/bashPREFIX="stu"i=1while [ $i -le 20 ] douseradd ${PREFIX}$iecho "123456" | passwd --stdin ${PREFIX}$i &> /dev/null let i++done[root@localhost ~]# chmod +x uaddwhile.sh
[root@localhost ~]# ./uaddwhile.sh
[root@localhost ~]# grep "stu" /etc/passwd | tail -3 stu18:x:1022:1022::/home/stu18:/bin/bash stu19:x:1023:1023::/home/stu19:/bin/bash stu20:x:1024:1024::/home/stu20:/bin/bash
2)猜价格游戏
[root@localhost ~]# vi pricegame.sh#!/bin/bashPRICE=$(expr $RANDOM % 1000)TIMES=0echo "商品实际价格范围为 0-999,猜猜看是多少?"
while truedoread -p "请输入你猜测的价格数目:" INT let TIMES++if [ $INT -eq $PRICE ] ; thenecho "恭喜你答对了,实际价格是 $PRICE" echo "你总共猜测了 $TIMES 次"exit 0elif [ $INT -gt $PRICE ] ; then echo "太高了!"elseecho "太低了!"
fi
done
[root@localhost ~]# chmod +x pricegame.sh
[root@localhost ~]# ./pricegame.sh
商品实际价格范围为 0-999,猜猜看是多少?
请输入你猜测的价格数目:500 太高了!
请输入你猜测的价格数目:250 太低了!
请输入你猜测的价格数目:375 太高了!
请输入你猜测的价格数目:280 太高了!
请输入你猜测的价格数目:265 太高了!
请输入你猜测的价格数目:253 恭喜你答对了,实际价格是 253
你总共猜测了 6 次
3,until循环语句
until 循环与 while 循环类似,while 循环能实现的脚本 until 同样也可以实现,但区别是
while 循环在条件为真是继续执行循环,而 until 则是在条件为假时执行循环。
until 循环语句的语法结构如下所示。
until 条件测试操作
do
命令序列
done
1),计算 1~50 的和
[root@localhost ~]# vi sum1to50_until_v1.sh#!/bin/bash i=0;s=0until [ $i -eq 50 ]
dolet "i=$i+1";let "s=$s+$i"
doneecho 'sum(1..50)='$s[root@localhost ~]# chmod +x sum1to50_until_v1.sh
[root@localhost ~]# ./sum1to50_until_v1.sh
sum(1..50)=1275
shell循环语句及实验相关推荐
- Shell循环语句(for循环;while循环;until循环)及中断(break和continue)
Shell循环语句 for循环语句 例题1:批量添加用户 例题2:根据IP地址检查主机状态 while循环语句 例题1 猜价格游戏 例题二:批量添加用户 until循环语句 例题:计算1~50的值 中 ...
- shell 循环语句和函数
循环语句 一.循环语句 1.for循环详解 2.while语句 3.until语句 4.双for循环 5.break和continue break,我们可以通过内外循环的输出来看break的特性. c ...
- Shell循环语句(for、while、until)及echo、IFS
循环语句与函数 echo简述 循环语句 for循环语句 表达式一 表达式二 表达式三(变量值的迭代方式) 表达式四 批量添加用户且密码均为111222 批量检测指定ip地址连通性 while循环语句 ...
- shell 循环语句
循环语句: for 语法结构: 1.列表循环 for variable in {list}docommand...done for variable in var1 var2 var3..docomm ...
- 简单易懂!!shell循环语句!for、while、until
这里写目录标题 for循环语句 基本格式 流程路 while循环语句 while语句结构 流程图 until循环语句 until语句基本结构 流程图 for循环语句 在实际工作中,经常会遇到某项任务需 ...
- linux shell 循环语句 for while until
for/do/done Shell脚本的for循环结构和C语言很不一样,它类似于某些编程语言的foreach循环.例如: #! /bin/shfor FRUIT in apple banana pea ...
- 【Linux】:shell循环语句
运行Shell脚本有两种方法: 1.vi test.sh #! /bin/bash #编写内容 运行sh test.sh 2.chmod +x ./test.sh #脚本具有执行权限 ./test.s ...
- Shell循环语句详解--for循环
文章目录 一.for循环基本格式 二.for循环脚本 2.1测试主机状态 2.2添加用户 2.3乘法表 三.总结 引言:在shell编程中,除了选择判断之外,对一些特殊情况需要进行循环操作,比如遍历目 ...
- 怎么编写Linux脚本循环语句,shell脚本及常用循环语句
博文结构 什么是shell 简单编辑shell 循环语句 一.什么是shell及作用 Shell字面理解就是个"壳",是操作系统(内核)与用户之间的桥梁,充当命令解释器的作用,将用 ...
最新文章
- 六、OpenStack配置计算结点
- 教师php一对一修改成绩,【教师助手】班小二发成绩,一键导入成绩表格,自动一对一私密分发...
- Leetcode 136 Single Number 仅出现一次的数字
- 深度学习(二十六)Network In Network学习笔记-ICLR 2014
- ‘MicrosoftWebDriver.exe‘ executable needs to be in PATH.
- 爬虫入门四(多线程爬虫)
- 安装Vmware-tools时CD/DVD找不到Vmware-tools压缩包
- SQL 中OPENQUERY的使用
- SQLServer复制需要有实际的服务器名称才能连接到服务器,请指定实际的服务器名转...
- 零基础学python要多久-零基础如何学Python?小白学Python需要多久?
- hdu 4121 xiangqi 模拟
- shell中find详解
- Atitit.嵌入式web 服务器 java android最佳实践
- [BZOJ 3888] [Usaco2015 Jan] Stampede 【线段树】
- 几个比较好的app开发框架
- 一线大厂软件测试流程(思维导图)详解
- JAVA微信小程序医院预约挂号小程序系统毕业设计 开题报告
- 算法入门:日期计算(附蓝桥杯)
- 本科数学基础差的感觉 SLAM 很难,如何去提高?
- 利用公网IP访问部署在阿里云服务器的spring boot项目(一)
热门文章
- 报泰山学堂计算机条件,山大泰山学堂:大师培养“诺贝尔”的试验田
- 七夕礼物就送蓝牙耳机!音质好的无线蓝牙耳机推荐
- 东芝z20t笔记本怎样u盘启动详细图解
- 自定义导航栏左上角胶囊按钮返回、首页小房子
- 【必备算法】字符串(反转问题):LeetCode题 344. 反转字符串,541. 反转字符串 II,917. 仅仅反转字母
- ROS四旋翼无人机快速上手指南(1):无人机系统硬件概述与指南简介
- plt.plot()函数
- oracle 匹配汉字数字,在oracle数据库中一字段存在汉字和数字,取数字部分
- 推荐一位武汉大学的小姐姐
- 笔记本一般多少瓦?大概多少小时用一度电?