shell報錯:-bash: [: ==: 期待一元表達式
問題腳本:
1 #!/bin/bash
2 PRICE=$(expr $RANDOM % 1000)
3 TIMES=0
4 echo "商品的實際價格范圍0~999,猜猜看是多少?"
5 while true
6 do
7??????? read -p "請輸入你猜測的價格數(shù)目:" INT
8??????? let TIMES++
9 if [ $INT -eq $PRICE ]
10 then
11??????? echo "恭喜你答對了,實際價格是 $PRICE"
12??????? echo "你總共猜測了 $TIMES 次"
13??????? exit 0
14 elif [ $INT -gt $PRICE ]
15 then
16??????? echo "太高了!"
17 else
問題報錯:
./caizhi.sh: 第 9 行:[: -eq: 期待一元表達式
./caizhi.sh: 第 14 行:[: -gt: 期待一元表達式
解決方法:
1. 當 if 語句中使用 [ ] 條件修飾符時, $TNT 變量必須加上引號。
2. 當 if 語句中使用 [[ ]] 條件修飾符時,$TNT 變量的引號可有可無。
正確腳本:
????? 1 #!/bin/bash
????? 2 PRICE=$(expr $RANDOM % 1000)
????? 3 TIMES=0
????? 4 echo "商品的實際價格范圍0~999,猜猜看是多少?"
????? 5 while true
????? 6 do
????? 7???????? read -p "請輸入你猜測的價格數(shù)目:" INT
????? 8???????? let TIMES++
????? 9 if [ "$INT" -eq "$PRICE" ]????? //在這一行將變量的雙引號加上或者改為雙中括號
???? 10 then
???? 11???????? echo "恭喜你答對了,實際價格是 $PRICE"
???? 12???????? echo "你總共猜測了 $TIMES 次"
???? 13???????? exit 0
???? 14 elif [ "$INT" -gt "$PRICE" ]???? //這這一行將變量的雙引號加上或者改為雙中括號
???? 15 then
???? 16???????? echo "太高了!"
???? 17 else
腳本執(zhí)行情況:
[root@localhost opt]# ./caizhi.sh
商品的實際價格范圍0~999,猜猜看是多少?
請輸入你猜測的價格數(shù)目:456
太高了!
請輸入你猜測的價格數(shù)目:345
太高了!
請輸入你猜測的價格數(shù)目:101
太低了!
請輸入你猜測的價格數(shù)目:102
恭喜你答對了,實際價格是 102
你總共猜測了 4 次