欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

bash shell 比较大小 尽量不应该用 > > = 大于 等于 小于 等符号 AG chatgpt 有大用 有大大用 有大大大用

#!/bin/bash # if [ 1 > 30 ];then  #假如时间差大小30秒,就从faq上更新时间 echo "not" else echo "ok" fi 为什么会输出 not



在你的脚本中,件判断 [ 1 > 30 ] 实际上并不是在比较数字大小,而是执行了文件重定向操作。这就是为什么你总是得到 "not" 输出的原因。

问题出在几个方面:

  1. > 在 shell 中是重定向操作符,不是比较运算符。1 > 30 的意思是 "将标准输出(文件描述符1)重定向到名为'30'的文件",而不是比较1是否大于30。

  2. 即使想比较数字大小,正确的比较运算符应该是 -gt(greater than),而不是 >

正确的比较方式应该是:

bash
if [ 1 -gt 30 ]; then
  1. 作为重定向操作,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


普通分类: