踩坑集合|shell报错(-bash: [: ==: 期待一元表达式 解决方法 ([: ==: unary operator expected))

shell报错:-bash: [: ==: 期待一元表达式 解决方法 问题脚本:

1 #!/bin/bash 2 PRICE=$(expr $RANDOM % 1000) 3 TIMES=0 4 echo "商品的实际价格范围0~999,猜猜看是多少?" 5 while true 6 do 7read -p "请输入你猜测的价格数目:" INT 8let TIMES++ 9 if [ $INT -eq $PRICE ] 10 then 11echo "恭喜你答对了,实际价格是 $PRICE" 12echo "你总共猜测了 $TIMES 次" 13exit 0 14 elif [ $INT -gt $PRICE ] 15 then 16echo "太高了!" 17 else

问题报错:
./caizhi.sh: 第 9 行:[: -eq: 期待一元表达式
./caizhi.sh: 第 14 行:[: -gt: 期待一元表达式
解决方法:
1. 当 if 语句中使用 [ ] 条件修饰符时, $TNT 变量必须加上引号。
【踩坑集合|shell报错(-bash: [: ==: 期待一元表达式 解决方法 ([: ==: unary operator expected))】2. 当 if 语句中使用 [[ ]] 条件修饰符时,$TNT 变量的引号可有可无。
正确脚本:
1 #!/bin/bash 2 PRICE=$(expr $RANDOM % 1000) 3 TIMES=0 4 echo "商品的实际价格范围0~999,猜猜看是多少?" 5 while true 6 do 7read -p "请输入你猜测的价格数目:" INT 8let TIMES++ 9 if [ "$INT" -eq "$PRICE" ]//在这一行将变量的双引号加上或者改为双中括号 10 then 11echo "恭喜你答对了,实际价格是 $PRICE" 12echo "你总共猜测了 $TIMES 次" 13exit 0 14 elif [ "$INT" -gt "$PRICE" ]//这这一行将变量的双引号加上或者改为双中括号 15 then 16echo "太高了!" 17 else

脚本执行情况:
[root@localhost opt]# ./caizhi.sh 商品的实际价格范围0~999,猜猜看是多少? 请输入你猜测的价格数目:456 太高了! 请输入你猜测的价格数目:345 太高了! 请输入你猜测的价格数目:101 太低了! 请输入你猜测的价格数目:102 恭喜你答对了,实际价格是 102 你总共猜测了 4 次





    推荐阅读