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