欢迎各位兄弟 发布技术文章
这里的技术是共享的
#!/bin/bash # if [ 1 > 30 ];then #假如时间差大小30秒,就从faq上更新时间 echo "not" else echo "ok" fi 为什么会输出 not
在你的脚本中,条件判断 [ 1 > 30 ]
实际上并不是在比较数字大小,而是执行了文件重定向操作。这就是为什么你总是得到 "not" 输出的原因。
问题出在几个方面:
>
在 shell 中是重定向操作符,不是比较运算符。1 > 30
的意思是 "将标准输出(文件描述符1)重定向到名为'30'的文件",而不是比较1是否大于30。
即使想比较数字大小,正确的比较运算符应该是 -gt
(greater than),而不是 >
。
正确的比较方式应该是:
bashif [ 1 -gt 30 ]; then
作为重定向操作,1 > 30
总是会成功(除非无法创建文件'30'),所以条件总是为真,执行 then 部分的代码。
要修正这个脚本,你应该使用 -gt
进行数字比较:
bash#!/bin/bash if [ 1 -gt 30 ]; then # 使用 -gt 比较数字 echo "not" else echo "ok" fi
这样脚本会正确地输出 "ok",因为1不大于30。
另外需要注意的是,在bash中也可以使用双括号进行算术比较,这样更直观:
bash#!/bin/bash if (( 1 > 30 )); then # 在双括号内可以使用常规的比较运算符 echo "not" else echo "ok" fi