【问题标题】:Comparing the integer using IF condition in bash script在bash脚本中使用IF条件比较整数
【发布时间】:2016-07-15 23:18:52
【问题描述】:

我正在 linux 中编写一些 bash 脚本,我只想比较两个数字。一个是磁盘大小,另一个是限制。我通过使用 linux cmd 获取磁盘大小并将其存储在如下所示的变量中,

declare -i output    
output= df -h | grep /beep/data| awk '{ printf ("%d",$5)}'    
echo "$output" # Got 80 here

limit = 80


if  [ $output -eq $limit ];
then
fi

运行时出现以下错误:

line 27: [: -eq: unary operator expected"

【问题讨论】:

  • 这是您运行的确切代码吗?看起来你不会越过第二条线
  • 您的df 行看起来不错,我可以从我的测试结果中确认您确定在原始代码中= 周围没有空格。
  • 为什么在复制和粘贴实际代码时遇到麻烦?
  • @sjsam:即使df 行在= 之后也有空格,而且他还没有将他的命令放在$()
  • @Fazlin :我在回答中更新了这一点,谢谢

标签: linux bash


【解决方案1】:
output= df -h | grep /beep/data| awk '{ printf ("%d",$5)}'    

应该是

output="$(df -h | grep /beep/data| awk '{ printf ("%d",$5)}')"
#Used command substitution in the previous step

还有

limit = 80

应该是

limit=80 # no spaces around =, check all your variables for this

旁注:检查[ command substitution ]并使用[ shellcheck ]检查脚本问题

【讨论】:

  • 实际上没有空格,只是我错误地粘贴在这里,现在我更改了 tat,但即使我得到同样的错误。相反,如果我通过整数条件比较变量的工作方式类似于 if [ 80 -eq 80] 这对我来说很好
  • @Gan :实际上您可能对脚本有其他问题,请检查编辑后的答案并查看旁注中给出的链接:)
【解决方案2】:

在BASH中,使用前不需要声明变量,你可以动态声明和赋值,所以第一行(declare -i)可以去掉。

如果你想获得使用百分比,'df' 可以选择(man df 获取更多信息)。 之后,使用“grep”,您只能使用该正则表达式获取数字,注意我只使用了两个命令,而不是您在第一种方法中使用的三个。

$ df --output=pcent /beep/data | grep -Eo '[0-9]+'

另外,为了捕获命令的输出并将其放入变量中,请使用:

var1=$(put your command with params here)

因此,第一行将是:

output=$(df --output=pcent /beep/data | grep -Eo '[0-9]+')
echo "${output}"

在 BASH 中,等号、变量名和赋值之间不能有空格。

limit=80

最后,为了比较整数,使用双括号和不带“$”的变量进行比较,而不是双括号。

if (( output >= limit )); then
    echo 'output is greater or equal than limit'
fi

你可以用来比较:

==  Equal to
!=  Not equal
>   Greater than
<   Less than
>=  Greater or equal
<=  Less or equal

【讨论】:

  • 顺便说一句,原来的方法有问题吗?
  • 比较整数使用: (( var1 == value )) ,更多信息:mywiki.wooledge.org/BashGuide 。此外,删除空格:limit=80
  • 虽然此代码可能有助于解决问题,但提供有关 why 和/或 如何 回答问题的附加上下文将显着改善其长期价值。请edit你的答案添加一些解释。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-11-11
  • 2011-05-09
  • 1970-01-01
  • 2016-07-27
  • 1970-01-01
  • 2014-12-16
  • 1970-01-01
相关资源
最近更新 更多