2012-06-28 59 views
0

我正在使用下面的代碼來複制文件。我得到錯誤if語句..請幫助... $ 1是一個數字,將在$ j中搜索這是一個文件...我想複製文件,如果有一些記錄,否則將不會做任何事情。 ..用於if和grep的Unix Shell腳本語法和-gt

for j in $2/$file_z 
do 
if ``grep $1 $j | wc -l` -gt 0` 
then 
    echo $j 
    cp $j $3 
fi 
done 
+0

請一定要包括在以後的實際的錯誤信息;伊戈爾這次找到了一份很好的工作:)但實際的錯誤有時不太清楚。 – sarnold

回答

2

有兩個錯誤在你的腳本:

  • 嵌套backticks是不允許的。
  • $2/$file_z代替$(<$2/$file_z)

修正:

for j in `<$2/$file_z` 
do 
if grep -q "$1" "$j" > /dev/null 
# if grep "$1" "$j" > /dev/null # if your grep does not support -q 
then 
    echo $j 
    cp $j $3 
fi 
done 

更優化:

for j in `<$2/$file_z` 
do 
grep -l "$1" "$j" /dev/null && cp $j $3 
done 

grep本身可以打印文件的名稱。

你也可以亂寫for相同:

cp -v $(grep -l "$1" `<$2/$file_z`) $3 

的命令使與您的整個腳本。

+0

忘記bacticks,不贊成使用'$()'形式。正如你所說,反引號不支持嵌套元素。 –

+0

謝謝伊戈爾,但它給我以下錯誤。 grep:非法選項 - q 用法:grep -hblcnsviw模式文件。 。 。 – Dogar

+0

如果$ j(路徑/文件)中存在$ 1(數字參數),但是您的語句將評估其中是否存在某條記錄,那麼我想複製該文件? – Dogar

1
for j in $(<$2/$file_z); do 
    echo "$1" | grep &>/dev/null "$j" && cp "$j" "$3" 
done 

這是不可移植的:

grep -q 

這就是爲什麼我用grep &>/dev/null代替=)

+0

用法:grep -hblcnsviw模式文件。 。 。 ./script.sh[14]:87346346832:找不到 現在就來... – Dogar

+0

對不起,請參閱我編輯的帖子 –

+0

感謝SPUTNICK ...它現在對我來說很有用......我會模仿它。 ..謝謝... :-) – Dogar