簡體   English   中英

Linux Shell腳本非法編號

[英]Linux Shell Script Illegal number

我試圖用以下代碼找出文件中模式出現的次數:

#!/bin/sh

var='grep -c 'abc' file1'

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

我收到錯誤消息:非法號碼:grep -c abc file1

有人可以幫忙嗎?

謝謝。

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

#!/bin/sh

var=`grep -c 'abc' file1`

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

您可能需要反引號(`),而不是單引號(')。 即:

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如果您的外殼是Bash或讓我們知道您使用的是哪個外殼。
  • 在反引號內使用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:~$

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM