我试图通过以下代码找出文件中出现模式的次数:
#!/bin/sh
var='grep -c 'abc' file1'
if [ "$var" -lt 10 ]; then
echo "less than 10"
fi
我收到错误:非法号码:grep -c abc file1
有人可以帮忙。
感谢。
答案 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。[[
在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:~$