Linux Shell脚本非法编号

Linux Shell脚本非法编号,linux,shell,grep,Linux,Shell,Grep,我试图通过以下代码找出文件中模式的出现次数: #!/bin/sh var='grep -c 'abc' file1' if [ "$var" -lt 10 ]; then echo "less than 10" fi 我得到错误:非法号码:grep-c abc file1 有人能帮忙吗 谢谢。您可能想要倒勾(`),而不是单引号(`)。i、 e: 您可能需要倒勾(`)而不是单引号(')。i、 e: 使用反勾号(`)代替撇号('): 使用反勾号(`)代替撇号('): 您使用了单引号而

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

#!/bin/sh

var='grep -c 'abc' file1'

if [ "$var" -lt 10 ]; then
     echo "less than 10"
fi
我得到错误:非法号码:grep-c abc file1

有人能帮忙吗


谢谢。

您可能想要倒勾(`),而不是单引号(`)。i、 e:


您可能需要倒勾(`)而不是单引号(')。i、 e:

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

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


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

pax$ var='grep -c 'abc' file1'
pax$ echo "[$var]"
[grep -c abc file1]
反勾选版本为:

var=`grep -c 'abc' file1`
但我建议尽可能使用
bash
编写脚本。您将很难找到一个默认情况下没有它的主流发行版,而且有些人认为它比其他shell更强大。事实上,在某些系统上,
/bin/sh
bash

如果你可以这样做,
$()
构造通常是一个更好的主意,因为你可以轻松地嵌套它们:

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

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

pax$ var='grep -c 'abc' file1'
pax$ echo "[$var]"
[grep -c abc file1]
反勾选版本为:

var=`grep -c 'abc' file1`
但我建议尽可能使用
bash
编写脚本。您将很难找到一个默认情况下没有它的主流发行版,而且有些人认为它比其他shell更强大。事实上,在某些系统上,
/bin/sh
bash

如果你可以这样做,
$()
构造通常是一个更好的主意,因为你可以轻松地嵌套它们:

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

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

  • 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:~$

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

  • 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:~$