运行我的shell脚本时出现错误“没有这样的文件或目录”,“找不到命令”

时间:2016-05-05 09:52:46

标签: linux bash shell

我的剧本内容

`sqlline.py tpxxx.entexxx.org <<END

!outputformat csv

!record /ap_data/DD3/Rawf/Raw_f_$1_$2.csv

select column1,column2,column3,column4 from DD3_vxxv_$1.DD3_vv_RAW_DATA where v_id=$3 and period=$4;

!record

!quit

END;`

`sed -i '1d;$d' /ap_data/DD3/Rawf/Raw_f_$1_$2.csv;

sed -i "s/'//g" /ap_data/DD3/Rawf/Raw_f_$1_$2.csv;

cd /ap_data/D2O/RawDownload/

zip Raw_f_$1_$2.zip Raw_f_$1_$2.csv;

scp Raw_f_$1_$2.zip txxx@daxxxx.entexxx.org:/opt/cdar/common/D2O/TabUpload/;

rm Raw_f_$1_$2.csv Raw_f_$1_$2.zip;`

执行脚本时:

./rawfile.sh: line 7: 0/?: No such file or directory
./rawfile.sh: line 13: adding:: command not found

脚本提供正确的输出。但仍然显示错误“没有这样的文件或目录”,“命令未找到”

我的文件权限是:-rwxrwxrwx

1 个答案:

答案 0 :(得分:1)

您的脚本有两个主要可执行部分的反引号。

反引号导致内部内容在子shell中执行并替换回脚本。这意味着在您的情况下,您的脚本正在执行两个命令。其中一个是第一个反引号表达式的输出,另一个是第二个反引号表达式的输出。

例如:

$ `echo hello`
bash: hello: command not found
$ `echo echo hello`
hello

这里发生的是第一个echo命令生成输出,该输出被替换到命令行中,使命令行仅由shell评估&#34; hello&#34; ..这不是命令。第二个命令行打印&#34; echo hello&#34;,这是一个有效的命令行,并评估打印&#34; hello&#34;。

从两个主要语句中删除反引号,直接执行命令。

#!/bin/sh

sqlline.py tpxxx.entexxx.org <<END
!outputformat csv
!record /ap_data/DD3/Rawf/Raw_f_$1_$2.csv
select column1,column2,column3,column4 from DD3_vxxv_$1.DD3_vv_RAW_DATA where v_id=$3 and period=$4;
!record
!quit
END

sed -i '1d;$d' /ap_data/DD3/Rawf/Raw_f_$1_$2.csv
sed -i "s/'//g" /ap_data/DD3/Rawf/Raw_f_$1_$2.csv
cd /ap_data/D2O/RawDownload/
zip Raw_f_$1_$2.zip Raw_f_$1_$2.csv
scp Raw_f_$1_$2.zip txxx@daxxxx.entexxx.org:/opt/cdar/common/D2O/TabUpload/
rm Raw_f_$1_$2.csv Raw_f_$1_$2.zip