【问题标题】:Comparing an integer variable in the Bash shell [duplicate]比较 Bash shell 中的整数变量 [重复]
【发布时间】:2017-11-19 08:56:32
【问题描述】:

我知道我遗漏了一些非常明显的东西,但我就是看不到。在下面的代码中,new_i 变量正确递增,但是,当我到达 if 语句时,我认为我的语法不正确。我查看了一些示例,但是当if 语句大于(在本例中为15)一个数字时,没有一个显示变量设置为零。

#!/bin/sh
i=$(cat /etc/hour.conf)
new_i=$((i+1))
if [[ "$new_i" -gt 15 ]]; then
 new_i=0
fi
echo "$new_i">/etc/hour.conf
echo "$new_i"

当我运行此脚本时,我收到以下错误:

./loops: 3: ./loops: Illegal number: new_i

提前感谢您的帮助!

【问题讨论】:

  • 删除=之后的空格:new_i=0
  • 给出同样的错误信息
  • 啊,问题出在3线上……/etc/hour.conf的内容是什么?
  • echo 0>/etc/hour.conf
  • 嗯.. 你能找到那个文件吗? echo 0>x.txt && cat x.txt 给了我空文件。要修复它,您必须在 > 之前添加空格:echo 0 >/etc/hour.conf

标签: bash shell terminal variable-assignment


【解决方案1】:

这有效 - new_i=$(( 行中 i 前面的 $ 以及引号和一组括号的删除修复了错误,现在脚本按预期工作。感谢大家的帮助!

#!/bin/sh
i=$(cat /etc/hour.conf)
new_i=$(($i+1))
if [ $new_i -gt 15 ]; then
 new_i=0
fi
echo "$new_i">/etc/hour.conf
echo "$new_i"

【讨论】:

  • $((i+1))$(($i+1)) 的作用相同,如果 i 是有效数字。如果我将文件名更改为 x.txt 并将其初始内容设置为空,您发布的代码将有效。
  • 很高兴我们提供了帮助......但真的不清楚我们是如何做到的,哈哈;)
  • $((i+1))绝对开箱即用有效。
  • 对于[[ ]][ ],前者需要不同的shebang——例如,它将与#!/bin/bash 一起使用;只是不是#!/bin/sh
【解决方案2】:

尝试不带引号:

if [ $new_i -gt 15 ]; then
    ...
fi

或者,更好的是,使用 算术评估

if (( $new_i > 15 )) ; then
    ...
fi

【讨论】:

  • 不同的错误./loops Illegal number:new_i
  • -我认为这是一个错字
  • 我在测试时使用了-gt。
  • (( $new_i > 15) 给出了同样的错误.... ./loops: Illegal number: new_i
  • 如果变量不包含有效数字,去掉引号会有什么不同?
猜你喜欢
  • 2013-08-10
  • 1970-01-01
  • 2018-09-23
  • 1970-01-01
  • 1970-01-01
  • 2021-03-15
  • 1970-01-01
  • 2013-07-30
相关资源
最近更新 更多