概述
循环
- 一、shell循环:for
- 1. 案例1:ping 测试主机
- 2. 案例2:通过用户列表文件创建用户
- 3. 案例3:使用for实现批量主机root密码的修改
- 二、shell循环:while until
- 1. while 语法结构
- 2.until 语法结构
- 三、 expect
- 1. 案例1:通过expect解决ssh交互问题
- 2. 案例2
一、shell循环:for
- 语法
for 变量名 [ in 取值列表 ]
do
循环体
Done - 示例:要求自动循环创建10个用户
for i in {1..10}
do
useradd "user$i"
done
1. 案例1:ping 测试主机
通过循环工具,探测全网主机。将在线主机记录在文本中。
[root@tianyun scripts]# cat ip.txt
172.16.8.100
172.16.8.4
172.16.100.254
#!/bin/bash/
#ping
>ip.txt ##清空记录文本
for i in {2..254}
do
{
ip=192.168.100.$i
ping -c1 -W1 $ip &> /dev/null
if [ $? -eq 0 ] ;then
echo "$ip" |tee -a ip.txt
fi
}& ##后台执行
done
wait ##等待前一个程序执行完毕。在执行下一个命令。
echo "finishi...."
2. 案例2:通过用户列表文件创建用户
[root@tianyun scripts]# cat user.txt
qianqian
qifeng
fengfeng
#!/bin/bash
for user in `cat user.txt`
do
useradd $user
echo "$user is created"
done
3. 案例3:使用for实现批量主机root密码的修改
前提1:已经完成秘钥登录配置(ssh-keygen)
前提2:定义主机地址列表
前提3:并了解远程修改密码的方法
1 邀请用户输入密码
2 循环调用IP地址
3 执行远程修改(ssh 192.168.122.20 “touch ~/ddd.txt”)
4 记录执行结果
二、shell循环:while until
1. while 语法结构
while语句结构(死循环/逐行处理文件)
while 条件测试
do
循环体
done
==当条件测试成立(条件测试为真),执行循环体
每秒显示一个数字,一次递增+1
while :
do
let i++
sleep 1
echo $i
done
2.until 语法结构
until语法结构
until 条件测试
do
循环体
done
==当条件测试成立(条件测试为假视为成立),执行循环体
#!/bin/bash
until [[ $i -eq 14 ]]
do
let i++
sleep 1
echo $i
done
三、 expect
观察ssh登录的交互现象
安装expect:yum install -y expect
1. 案例1:通过expect解决ssh交互问题
#!/usr/bin/expect
spawn ssh root@192.168.0.111
expect {
"yes/no" { send "yesr";exp_continue }
"password:" { send "666666r" };
}
Interact
注释:
spawn expect 内部命令,启动一个shell程序。
expect 期望哪些内容
yes/no 就send发送 yes ,r 表示回车
password 就send发送 centos
exp_continue,跳过循环,就继续下一条语句。
interact 允许用户交互
2. 案例2
准备工作:安装expect,准备公钥
#!/bin/bash
#创建一个IP地址文件。
>ip.txt
#使用for循环ping测试主机是否在线。
for i in {2..254}
do
{
#请注意练习环境的IP地址,可能与示例中不同。
ip=192.168.0.$i
ping -c1 -W1 $ip &> /dev/null
if [ $? -eq 0 ];then
echo "$ip" >> ip.txt
fi
}&
done
通过expect进行交互
#!/bin/bash
#创建一个IP地址文件。
>ip.txt
#使用for循环ping测试主机是否在线。
for i in {2..254}
do
{
#请注意练习环境的IP地址,可能与示例中不同。
ip=192.168.122.$i
ping -c1 -W1 $ip &> /dev/null
if [ $? -eq 0 ];then
echo "$ip" >> ip.txt
/usr/bin/expect <<-EOF
set timeout 10
spawn ssh-copy-id $ip
expect {
"yes/no" { send "yesr"; exp_continue }
"password:" { send "centosr" }
}
expect eof
EOF
fi
}&
done
wait
echo "finishi..."
最后
以上就是坚定鲜花为你收集整理的shell编程 循环一、shell循环:for二、shell循环:while until三、 expect的全部内容,希望文章能够帮你解决shell编程 循环一、shell循环:for二、shell循环:while until三、 expect所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复