utils/function_cmd_scp.sh

#! /bin/bash

sshcmd()
{
#从第一个参数中获得要执行的命令
	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
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值