shell脚本帮助 - 检查文件是否存在

时间:2010-08-31 22:16:24

标签: unix

我不确定为什么这段代码不起作用。它不会复制命令。 我成功地在命令行上运行它(没有检查) 我不认为我正在执行正确的文件检查?有没有更好,更清洁的方式来写这个? 我只想确保文件存在,如果存在,请将其复制。感谢。

#!/bin/bash
if [ $# != 1 ]; then
    echo "Usage: getcnf.sh <remote-host>" 2>&1
    exit 1
fi

#Declare variables
HOURDATE=`date '+%Y%m%d%H%M'`
STAMP=`date '+%Y%m%d-%H:%M'`
REMOTE_MYCNF=/var/log/mysoft/mysoft.log
BACKUP_DIR=/home/mysql/dev/logs/
export REMOTE_MYCNF HOURDATE STAMP

#Copy file over
echo "Checking for mysoft.log file $REMOTE_MYCNF $STAMP" 2>&1
if [ -f $REMOTE_MYCNF ]; then
echo "File exists lets bring a copy over...." 2>&1
   /usr/bin/scp $1:$REMOTE_MYCNF $BACKUP_DIR$1.mysoft.log
echo "END CP" 2>&1
   exit 0
   else
        echo "Unable to get file" 2>&1
        exit 0
fi

5 个答案:

答案 0 :(得分:3)

您检查远程计算机上的现有文件如下: 你应该这样做:

ssh $host "test -f $file"
if [ $? = 0 ]; then

答案 1 :(得分:2)

使用sh -x script.sh查看发生了什么。

答案 2 :(得分:0)

您正在测试是否存在远程文件

$1:$REMOTE_MYCNF

使用本地名称$REMOTE_MYCNF。 <{1}}测试永远不会得到满足。

答案 3 :(得分:0)

您不会检查$1是否已设置。

您的文件检查在本地计算机上运行 - 而不是在远程计算机上运行。

答案 4 :(得分:0)

将您的if更改为:

if[! -f $REMOTE_MYCNF -o ! -d $REMOTE_MYCNF];