首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >文件检查3次并退出shell脚本

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

Stack Overflow用户
提问于 2018-01-12 13:03:41
回答 1查看 279关注 0票数 0

我想检查目录中的文件,如果有,然后将其推送到ssh服务器,检查服务器连接,如果文件不在那里,则每隔1分钟尝试3次,如果它来了(例如,在第二次参加会议时),则再次尝试连接ssh并推送。否则检查3次尝试并退出

请检查我的以下代码,它在第一次尝试后停止(在第二次尝试期间,我正在使文件可用)

代码语言:javascript
复制
#!/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
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-12 14:30:11

我已经试着为您简化这段代码。我希望它能有所帮助:

代码语言:javascript
复制
#!/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。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48219839

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档