文件检查3次并退出shell脚本

时间:2018-01-12 05:03:41

标签: linux shell

我想检查目录中的文件,如果然后将其推送到ssh服务器checing server连接,如果文件不在那里,则每隔1分钟间隔尝试3次,如果它到来之间(例如2号参加)再试一次连接ssh和推送。否则检查3次尝试并退出

请检查我的下面的代码,它在第一次尝试后停止(在第二次尝试期间我正在提供文件)

#!/bin/sh
echo "OK, start pushing the Userdetails to  COUPA now..."
cd /usr/App/ss/outbound/usrdtl/
n=0


      until [ $n -ge 3 ] || [ ! -f /usr/App/ss/outbound/usrdtl/USERS_APPROVERS_*.csv ]
      do 
      if [ -f /usr/App/ss/outbound/usrdtl/USERS_APPROVERS_*.csv ] ;  
      then 
      pushFiles()
      else
      n=$[$n+1]
      sleep 60
      echo " trying " $n "times " 
      fi
      done

pushFiles()
{
echo "File present Now try SSH connection"
while [ $? -eq 0 ];
do
    echo $(date);
     scpg3 -v /usr/App/ss/outbound/usrdtl/USERS_APPROVERS_*.csv <sshHost>:/Incoming/Users/
     if [ $? -eq 0 ]; then
        echo "Successfull" 
        echo $(date);
        echo "Successfull" >> /usr/App/ss/UserApproverDetails.log
        exit 1;
        else
            echo $(date);
            echo "Failed" >> /usr/App/ss/UserApproverDetails.log
            echo "trying again to push file.."
            scpg3 -v /usr/App/sg/outbound/usrdtl/USERS_APPROVERS_*.csv <ssh Host>:/Incoming/Users/
            echo $(date);   
        exit 1;
    fi
done
}

1 个答案:

答案 0 :(得分:0)

我试图为您简化此代码。我希望它有所帮助:

#!/bin/bash

outdir="/usr/App/ss/outbound/usrdtl"
logfile="/usr/App/ss/UserApproverDetails.log"
file_prefix="USERS_APPROVERS_"

function push_files() {
    echo "File present now try SSH connection"
    local attempts=1
    local retries=2
    date

    while [[ ${attempts} -lt ${retries} ]]; do
        if scp ${outdir}/${file_prefix}*.csv <sshHost>:/Incoming/Users/ ; then

            echo "Successful" | tee -a ${logfile}
            date
            exit 0
        else
            echo "Failed" >> ${logfile}
        fi
        attempts=$((attempts+1))
    do
    echo "scp failed twice" | tee -a ${logfile}
    exit 2
}

echo "OK, start pushing the Userdetails to  COUPA now..."
cd ${outdir}
attempts=1
retries=3
while [[ ${attempts} -lt ${retries} ]]; do
    echo "looking for files...attempt ${attempts}"
    if test -n "$(shopt -s nullglob; echo ${outdir}/${file_prefix}*.csv)"; then
        push_files()
    fi
    attempts=$((attempts+1))
    sleep 60
done
echo "Files were never found" | tee -a ${logfile}
exit 1

请查看此代码并告诉我它是如何做不到您尝试做的事情。这里最复杂的部分是nullglob东西,这是一个方便的技巧,看看any file in a glob matches

另外,我通常使用bashisms。