在bash脚本中使用IF条件比较整数

时间:2016-07-15 06:07:36

标签: linux bash

我正在使用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"

2 个答案:

答案 0 :(得分:4)

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 ]检查脚本问题

答案 1 :(得分:1)

在BASH中,没有必要在使用它之前声明变量,你可以动态声明和赋值,这样就可以删除第一行(declare -i)。

如果您想获得使用的百分比,' df'有一个选项可以做到这一点(男子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