2012-06-28 56 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