2016-07-13 79 views
-1

我想知道为什么在我的shellcript下面写下“not found”错误,所以请告诉我我在代码中的错误(环境:mac OS X和CentOS6)ls和grep命令“找不到”shellcript中的错误

“xaf.sh”

#!/bin/sh 
SERVER=$1 
USER=$2 
PASS=$3 
FILE=$4 
PATH=$5 

echo $1 
VAR=`ls | grep ${FILE}` 

for one_file in ${VAR}; do 
    echo $one_file 
    echo "go" 
    touch ./ftp_err/log 

    ftp -nv 2>./ftp_err.log <<END 
     open $SERVER 
     user $USER $PASS 
     cd /$PATH 
     binary 
     prompt 
     put ${one_file} 
    exit 
END 

    VAR2=`wc ./ftp_err.log` 
    if [VAR2 -gt 0 ] ; then 
     echo "you have an error in sending ${one_file}" 
    else 
     echo "you have succeeded Transfer of ${one_file}" 
     rm ${one_file} 
    fi 
    rm ./ftp_err.log 
done 

...并命令我如何发出和执行的结果如下(用户名和密码的部分被替代#)

**Command** 
./xaf.sh 192.168.202.171 #r#####er c#####b## 2 /tmp/ 

**Result** 
./xaf.sh: line 9: ls: command not found 
./xaf.sh: line 9: grep: command not found 
+0

我成功使用LS,grep的代码,并为如下 #!/ bin/sh的写在 回声$ 1 FILE = $ 1 VAR ='LS |对于$ {VAR}中的one_file,grep $ {FILE}' ;做 echo $ one_file echo“go” done –

+0

这是什么目的:''VAR ='ls | grep $ {FILE}'''?改为使用:'for *中的one_file $ file“*;做...' –

回答

4

别吨做到这一点:

PATH=$5 

$PATH是shell的一个特殊变量。它定义执行子命令时要搜索的目录列表。如果您覆盖该变量,则shell不再知道在哪里查找子命令,如lsgrep

试着给你的变量一些其他的名字,比如:

xpath=$5 
... 
cd /$xpath 

代替。

通常,避免使用大写变量名称。为了自己的目的,shell使用许多不同的大写变量名称。

+0

@glennjackman - 谢谢。更好? –

+0

是的,但“xpath”具有特定的含义,因此将其用作变量名有点误导。 “路径= $ 5”很好, –

+0

谢谢大家。终于我通过这个错误,但我发现了另一个关于FTP连接....我会尝试修复它,如果我得到它,我会告诉你在这个线程中正确的代码。 –

1
#!/bin/sh 
SERVER=$1 
USER=$2 
PASS=$3 
FILE=$4 
XPATH=$5 
LOG='ftp_err.log' 


echo $1 
VAR=`ls | grep ${FILE}` 

for one_file in ${VAR}; do 
    echo $one_file 
    echo "go" 
    touch ${LOG} 

    ftp -n 2>${LOG} <<END 
     open $SERVER 
     user $USER $PASS 
     cd /$XPATH 
     binary 
     prompt 
     put ${one_file} 
    exit 
END 
    VAR2=`grep '' ${LOG}|wc -l` 
    if [${VAR2} -gt 0 ] ; then 
     echo "you have an error in sending ${one_file}" 
    else 
     rm ${one_file} 
    fi 
    rm $LOG 

done 

嗨大家好。 这个正常工作在Linux到Linux。(centos6)

+0

此代码用于ftp并删除已发送的文件 –