本文共 2644 字,大约阅读时间需要 8 分钟。
#! /bin/bashsshcmd(){#从第一个参数中获得要执行的命令 myssh_cmd="$1" sleeptime=0#通过这个脚本执行命令 sh ${CUR_DIR}/sshcmd.sh -c "$myssh_cmd" -m "$IP" -u "$loginuser" -p "$loginpassword"#上面的命令执行失败后$? 会返回非0,因此这个if条件回城里 if [ $? -ne 0 ]; then while true do #c5 表示ping 这个ip地址五次 if ping -c5 "$IP" &> /dev/null; then break fi #如果sleeptime 一空大于等于180次,则退出 if [ $sleeptime -ge 180 ]; then echo "ERROR: ping $IP Failed" break fi #睡眠60s sleep 60 #睡眠总的时间 ((sleeptime = sleeptime + 60)) done#通过ping 主机和sleep 来等待主机反应 #由于前一次执行下面的命令failed了,通过前面的ping和sleep后,这里再次执行 sh ${CUR_DIR}/sshcmd.sh -c "$myssh_cmd" -m "$IP" -u "$loginuser" -p "$loginpassword" if [ $? -ne 0 ]; then #如果还是失败的话,则退出 echo " Failed in sshscp.sh, maybe there is no enough space on $IP" exit 1 fi fi }sshscp(){ MYSOURCE="$1" MYDESTDIR="$2" isdir="$3" tofrom="$4" sleeptime=0 scpcmd=#根据isdir的值是is还是no ,已经tofrom 等于to还是from 分四种case开生成要执行命令的字符串 if [ "$isdir" = "is" ]; then if [ $tofrom = "to" ]; then scpcmd="sh ${CUR_DIR}/sshscp.sh -s $MYSOURCE -d $loginuser@$IP:$MYDESTDIR -p $loginpassword -r " elif [ $tofrom = "from" ]; then scpcmd="sh ${CUR_DIR}/sshscp.sh -s $loginuser@$IP:$MYSOURCE -d $MYDESTDIR -p $loginpassword -r " else echo "wrong tofrom parameter" exit 1 fi elif [ "$isdir" = "no" ]; then if [ $tofrom = "to" ]; then scpcmd="sh ${CUR_DIR}/sshscp.sh -s $MYSOURCE -d $loginuser@$IP:$MYDESTDIR -p $loginpassword " elif [ $tofrom = "from" ]; then scpcmd="sh ${CUR_DIR}/sshscp.sh -s $loginuser@$IP:$MYSOURCE -d $MYDESTDIR -p $loginpassword " else echo "wrong tofrom parameter" exit 1 fi else echo "wrong isdir parameter" exit 1 fi echo "$scpcmd"#这里通过eval 来执行保存在字符串中的命令 eval $scpcmd if [ $? -ne 0 ]; then#如果执行失败,则先ping 主机,看主机是否有反应,最多ping 5次,如果主机没有反应,则sleep 60s。然后再ping主机,由于sleep 最多sleep 180s#因此最多也就ping 3次,如果主机还没有反应的话,就退出了。#如果主机有反应了,则继续执行命令. while true do if ping -c5 "$IP" &> /dev/null; then break fi if [ $sleeptime -ge 180 ]; then echo "ERROR: ping $IP Failed" break fi sleep 60 ((sleeptime = sleeptime + 60)) done eval $scpcmd if [ $? -ne 0 ]; then echo " Failed in sshscp.sh, maybe there is no enough space on $IP" exit 1 fi fi}
转载地址:http://rejmi.baihongyu.com/