shell5(进度条、主机在线测试、免密登录)
1、显示进度条
#!/bin/bash # 编写脚本,显示进度条 myProgress(){ while : do echo -n '#' sleep 0.2 done } myProgress & cp -a $1 $2 killall $0 echo "拷贝完成"
2、编写脚本测试 192.168.4.0/24 整个网段主机的开关机状态
多进程版
#!/bin/bash # 编写脚本测试 192.168.4.0/24 整个网段中哪些主机处于开机状态,哪些主机处于关机 # 状态(多进程版) #定义一个函数,ping 某一台主机,并检测主机的存活状态 myping(){ ping ‐c 2 ‐i 0.3 ‐W 1 $1 &>/dev/null if [ $? -eq 0 ];then echo "$1 is up" else echo "$1 is down" fi } for i in {1..254} do myping 192.168.4.$i & done # 使用&符号,将执行的函数放入后台执行 # 这样做的好处是不需要等待ping第一台主机的回应,就可以继续并发ping第二台主机,依次类推
在线和离线主机输出到文件
#!/bin/bash ping_success_status() { if ping -c 1 $IP >> /dev/null; then echo "$IP is on" >> /root/success-host.txt continue fi } success=/root/success-host.txt failure=/root/failure-host.txt rm -rf $success rm -rf $failure if [[ ! -f $success ]];then touch /root/success-host.txt && chmod 777 /root/success-host.txt echo "$success 文件创建成功" else echo "$success 文件已经存在" fi if [[ ! -f $failure ]];then touch /root/failure-host.txt && chmod 777 /root/failure-host.txt echo "$failure 文件创建成功" else echo "$failure 文件已经存在" fi for IP in `echo 10.1.1.{1..254}` do { ping_success_status echo "$IP is off!" >> /root/failure-host.txt } & done wait echo "在线主机数如下:" && cat /root/success-host.txt | wc -l #cat /root/success-host.txt echo "离线主机数如下:" && cat /root/failure-host.txt | wc -l #cat /root/failure-host.txt
while版
#!/bin/bash # 编写脚本测试 192.168.4.0/24 整个网段中哪些主机处于开机状态,哪些主机处于关机 # 状态(while 版本) i=1 while [ $i -le 254 ] do ping ‐c 2 ‐i 0.3 ‐W 1 192.168.4.$i &>/dev/null if [ $? -eq 0 ];then echo "192.168.4.$i is up" else echo "192.168.4.$i is down" fi let i++ done
3、免密登录
先准备一个主机文件
vim ip.txt 192.66.66.101 192.66.66.102 192.66.66.103 192.66.66.104
上述假设上述主机密码都相同且都是 1
#!/usr/bin/bash get_keygen(){ /usr/bin/expct <<-EOF &>/dev/null spawn ssh-keygen expect { ".ssh/id_rsa):" { send "\r"; exp_continue } "Overwrite (y/n)?" { send "y\r"; exp_continue } "no passphrase):" { send "\r"; exp_continue } "passphrase again:" { send "\r" }; } interact expect eof EOF } send_key(){ /usr/bin/expct <<-EOF &>/dev/null spawn ssh-copy-id -i $ip expect { "connecting (yes/no)?" { send "yes\r"; exp_continue} "password:" { send "1\r"} } interact expect eof EOF } echo "正在制作密钥" echo "存放的ip的文件是ip.txt,对方密码是必须是1" sleep 5 get_keygen for ip in $(cat ./ip.txt) do send_key $ip echo "$ip,密钥发送成功" done