文章目录
用法示例
1、该脚本适用场景
ssh远程信息相同的多台linux服务器
2、运行环境需要先安装sshpass
apt install sshpass -y
yum install sshpass -y
3、用法
脚本路径 "指令1;指令2"
4、效果演示
root@gateway-ddns-60:~# ./test.sh "date;curl -sf myip.ipip.net"
root@gateway-ddns-60:~# ./test.sh "date;w"
####分割线#### hk.wsfnk.cf is up
ser552965470679
Sun May 14 17:04:17 CST 2023
17:04:17 up 24 days, 14:29, 0 users, load average: 0.00, 0.00, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
####分割线#### ttk.wsfnk.cf is up
ttk-vps
Sun May 14 12:05:10 MSK 2023
12:05:10 up 144 days, 7:38, 0 users, load average: 0.00, 0.00, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
####分割线#### 123.123.123.123 is down
脚本内容
#!/bin/bash
#set -x
# 必须以root身份执行
if [ "$UID" -ne "0" ]
then
echo "Must be root to run this script."
exit 1
fi
# 输入参数数量正确性判断
if [ "$#" -gt "1" ];then
echo "脚本已退出,原因:输入参数过多,仅允许输入一个参数"
exit 1
elif [ "$#" -eq "0" ];then
echo "脚本已退出,原因:未输入任何参数"
exit 1
fi
# 定义帮助信息函数
print_help() {
echo -e "用法1: $0 \"shell_commond1\""
echo -e "用法2: $0 \"shell_commond1;shell_commond2\""
echo "选项:"
echo " -h, --help 显示帮助信息"
echo " -v, --version 显示版本信息"
echo "特别注意: 仅允许一个输入参数,多个shell命令,请用双引号括起来,中间用分号隔开,脚本会按顺序执行"
}
# 定义主机列表
hosts=(
"ip_address01"
"ip_address02"
"ip_address03"
)
# 定义ssh相关信息,并接受$1参数作为脚本执行的command
username="root"
password="123456"
sshport="22"
command="$1"
# 定义实际工作函数
runing_work() {
for host in "${hosts[@]}"
do
# 判断主机是否up,并执行信息获取
if ping -c 1 -w 1 "$host" >/dev/null 2>&1; then
echo -e "####分割线#### $host is up"
# 在这里添加需要执行的命令
sshpass -p "$password" ssh -o StrictHostKeyChecking=no "$username"@"$host" -p "$sshport" "hostname; $command"
else
echo -e "####分割线#### $host is down"
fi
done
}
# 处理命令行参数
while [[ $# -gt 0 ]]; do
key="$1"
case $key in
-h|--help)
print_help
exit 0
;;
-v|--version)
echo "版本 1.0"
exit 0
;;
*)
runing_work
exit 0
;;
esac
shift
done
如果文章对你有帮助,欢迎点击上方按钮打赏作者
暂无评论