0
var1= grep "$1" ./[FILE] | wc -l
if [ -s ./[FILE] ] && [ "$var1" -eq 1 ]

然后

echo "it worked"

fi

我正在尝试使用以下命令使 var1 具有整数值:

 grep "$1" ./[FILE] | wc -l

我不确定它是否真的将值设置为我假设命令正在输出的值,因为在我的 echo "$var1" 中它正在回显我期望的值。但是,在我的 if 语句中:

if [ -s ./[FILE] ] && [ "$var1" -eq 1]

我不断收到非法号码错误。

4

2 回答 2

1

你可能会更好

var1=$(grep -c "$1" ./[FILE])
-c, --count
         Only a count of selected lines is written to standard output.
于 2013-02-15T22:07:51.553 回答
0

对此:

var1= grep "$1" ./[FILE] | wc -l
if [ -s ./[FILE] ] && [ "$var1" -eq 1 ]

=在 shell 脚本中,赋值的两边都不能有空格。第一行的读取方式是grep在将空字符串分配给var1. 我怀疑您的意图是捕获 的输出wc并将该值分配给var1,正如另一个答案中所指出的那样:

var1=$(grep "$1" ./[FILE] | wc -l)

但是,正如还指出的那样,您可以wc通过将其更改为来跳过该部分

var1=$(grep -c "$1" ./[FILE])

一个额外的观察 - 如果你[FILE]的大小为零grep,无论如何都不会找到任何东西,所以真的不需要整个if ... && ...构造。相反,这两行可能只是:

if (( $(grep -c "$1" ./[FILE]) == 1 ))
then
  echo "it worked"
....

如果该echo位是一个命令,甚至可以缩短为:

(( $(grep -c "$1" ./[FILE]) == 1 )) && echo "it worked"
于 2013-02-15T22:21:19.250 回答