2012-02-29 136 views
1

我試圖找出模式的出現的次數與下面的代碼文件:的Linux Shell腳本非法數字

#!/bin/sh 

var='grep -c 'abc' file1' 

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

我收到錯誤:非法數字:grep的-c ABC文件1

有人可以請幫忙。

謝謝。

回答

3

使用反引號(`)而不是單引號('):

#!/bin/sh 

var=`grep -c 'abc' file1` 

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

你可能想反引號(`)而不是單引號(')。即:

var=`grep -c 'abc' file1` 
1

你已經使用了單引號,而不是反引號讓你var變量實際上是設置爲一個字符串字面而不是該命令的結果。你會發現,如果你第一次呼應變量:

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

倒引號的版本是:

var=`grep -c 'abc' file1` 

,但我想用bash在可能的腳本建議。你會很難找到一個默認沒有的主流發行版,有些人認爲它比其他發行版更強大。實際上,在一些系統上,/bin/shbash

如果你可以去那魯特的$()結構通常是一個好主意,因爲你可以嵌套它們無痛苦:

var=$(grep -c 'abc' file1) 
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 

執行:

[email protected]:~$ cat file1 
abc 
abcd 
abcde 
abcdef 
[email protected]:~$ 
[email protected]:~$ ./t.sh 
less than 10 
[email protected]:~$