[英]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或讓我們知道您使用的是哪個外殼。 [[
在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.