Linux Shell Script非法数字

时间:2012-02-29 01:26:08

标签: linux shell grep

我试图通过以下代码找出文件中出现模式的次数:

#!/bin/sh

var='grep -c 'abc' file1'

if [ "$var" -lt 10 ]; then
     echo "less than 10"
fi

我收到错误:非法号码:grep -c abc file1

有人可以帮忙。

感谢。

4 个答案:

答案 0 :(得分:3)

使用反引号(`)代替撇号('):

#!/bin/sh

var=`grep -c 'abc' file1`

if [ "$var" -lt 10 ]; then
     echo "less than 10"
fi

答案 1 :(得分:1)

你可能想要反引号(`)而不是单引号(')。即:

var=`grep -c 'abc' file1`

答案 2 :(得分:1)

您使用的是单引号而不是反引号,因此您的var变量实际上设置为字符串文字,而不是该命令的结果。你会看到如果你先回应变量:

pax$ var='grep -c 'abc' file1'
pax$ echo "[$var]"
[grep -c abc file1]

反引号版本将是:

var=`grep -c 'abc' file1`

但我建议尽可能使用bash编写脚本。你会很难找到一个默认没有它的主流发行版,有些人认为它比其他shell更强大。事实上,在某些系统上,/bin/sh bash

如果你可以使用那个rute,那么$()构造通常是一个更好的主意,因为你可以毫无痛苦地嵌套它们:

var=$(grep -c 'abc' file1)

答案 3 :(得分:0)

尝试发布以下内容以获得更好的答案:

  • grep --version
  • bash --version如果你的shell是Bash或者让我们知道你正在使用哪个shell。
  • 在back-ticks中使用grep或如下所示
  • [[在Bash中的用途比[更多。

最后,以下内容适用于我的机器而没有任何错误:

#!/bin/bash
var=$(grep -c "abc" file1)
if [[ "$var" -lt 10 ]]
then
    echo "less than 10"
fi

执行:

user@machine:~$ cat file1
abc
abcd
abcde
abcdef
user@machine:~$ 
user@machine:~$ ./t.sh 
less than 10
user@machine:~$