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