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 次
推荐阅读
- Linux|109 个实用 shell 脚本
- linux笔记|linux 常用命令汇总(面向面试)
- Linux|Linux--网络基础
- linux|apt update和apt upgrade命令 - 有什么区别()
- linux|2022年云原生趋势
- Go|Docker后端部署详解(Go+Nginx)
- 开源生态|GPL、MIT、Apache...开发者如何选择开源协议(一文讲清根本区别)
- GitHub|7 款可替代 top 命令的工具