shell的流程控制之循环

1.1步进循环语句for

带列表的for循环

for variable in list
do
statement1
statement2
...
done

不带列表的for循环

for variable
do
statement1
statement2
...
done

类c风格的for语句循环

for ((expression1;expression2;expression3))
do
statement1;
statement2;
...
done

1.2while语句循环

1.1while语句循环读取文件

方法一:
[root@localhost test5] # cat file
shuju1
shuju2
shuju3
[root@localhost test5] # cat file.sh
#!/bin/bash
exec < file
while read a
do
echo $a
done
[root@localhost test5] # bash file.sh
shuju1
shuju2
shuju3
方法二:使用 cat 读文件,然后通过管道进入 while 循环处理
cat file | while read line
do
statement1
done
方法三:通过在 while 循环结尾,使用输入重定向方式
while read line
do
statement1
done < File

1.3 until语句

until 循环语句同样也存在于多种程序设计语言中。顾名思义, until 语句的作用是将循环体重复执行,直
到某个条件成立为止。 until 语句的基本语法如下:
until expression
do
statement1
statement2
...
done

1.4select循环

select 循环语句的主要功能是创建菜单,在执行带有 select 循环语句脚本时,输出会按照数字顺序的列表
显示一个菜单,并显示提示符(默认是 # ?),同时等待用户输入数字选择。 select 语句的基本语法如
select 变量名 [ in 菜单值列表 ]
do
statement1
statement2
...
done

1.5利用break continue控制循环

Shell 中的循环结构中,还有 2 个语句非常有用,即 break continue 语句。前者用于立即从循环中退
出;而后者则用来跳过循环体中的某些语句,继续执行下一次循环。
break 语句的作用是立即跳出某个循环结构。 break 语句可以用在 for while 或者 until 等循环语句的循环 体中。(break 是结束循环)
continue 语句则比较有趣,它的作用不是退出循环体。而是跳过当前循环体中该语句后面的语句,重新 从循环语句开始的位置执行。(continue 是结束当前循环,从循环语句开始位置继续执行)

1.6练习

1.for创建20用户 用户前缀由用户输入 用户初始密码由用户输入 例如:test01,test10

[root@manage 20221229]# vim homework1.sh 
#!/bin/bash
#########################
#File name:homework1.sh
#Version:v1.0
#Email:admin@test.com
#Created time:2022-12-29 15:56:38
#Description:
#########################
read -p  "please input user prefix:" prefix    用户键盘输入用户名前缀
read -p "please input your passwd:" passwd1    用户键盘输入密码
for i in {01..20}
do
        useradd $prefix$i    创建用户
        id $prefix$i &> /dev/null
        if [ $? -eq 0 ];then
                echo "$passwd1" | passwd --stdin $prefix$i &> /dev/null   设置用户密码
        fi
done

 测试:创建了用户,和密码

 2.for ping测试指网段的主机 网段由用户输入,例如用户输入192.168.2 ,则ping 192.168.2.10 --- 192.168.2.20UP: /tmp/host_up.txt Down: /tmp/host_down.txt

[root@manage 20221229]# vim homework2.sh 
#!/bin/bash
#########################
#File name:homework1.sh
#Version:v1.0
#Email:admin@test.com
#Created time:2022-12-29 15:56:38
#Description:
#########################
read -p "please input your network:" network     键盘输入测试网段
for i in {1..10}                                 自动补齐1..10
do
        if ping -c 2 $network.$i &> /dev/null   测试主机是否ping通
        then
                 echo "$network.$i 主机存在" >> /tmp/host_up.txt
        else
                echo "$network.$i 主机不存在" >> /tmp/host_down.txt
        fi

done

 测试:

[root@manage tmp]# cat host_up.txt 
192.168.27.2 主机存在
192.168.27.1 主机存在
192.168.27.2 主机存在
[root@manage tmp]# cat host_down.txt 
192.168.27.10 主机不存在
192.168.27.3 主机不存在
192.168.27.4 主机不存在
192.168.27.5 主机不存在
192.168.27.6 主机不存在
192.168.27.7 主机不存在
192.168.27.8 主机不存在
192.168.27.9 主机不存在
192.168.27.10 主机不存在

 3.使用for实现批量主机root密码的修改 成功或失败都必须记录 提示:主机IP存放在一个文件中 SSH:实现公钥认证,执行远程中主机命令 实现公钥认证 # ssh-keygen 在用于管理的主上生成密钥对 # ssh-copy-id -i 192.168.2.3

[root@manage 20221229]# vim homework3.sh 

#!/bin/bash
#########################
#File name:homework3.sh
#Version:v1.0
#Email:admin@test.com
#Created time:2022-12-29 17:01:51
#Description:
#########################
read -p "please input your passwd:" mima
for i in `cat hostlist.txt`
do
        ssh $i "echo "$mima" | passwd --stdin root"   修改主机列表里能连接ssh的IP的root用户密码
done

[root@manage 20221229]# bash homework3.sh   运行脚本文件
please input your passwd:redhat
ssh: connect to host 192.168.27.50 port 22: No route to host
ssh: connect to host 192.168.27.60 port 22: No route to host
Changing password for user root.
passwd: all authentication tokens updated successfully.
ssh: connect to host 192.168.27.112 port 22: No route to host

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值