使用 if 语句比较 2 个百分比值

使用 if 语句比较 2 个百分比值

首先,我是新来的,所以如果我犯了任何错误,我很抱歉。这是我的第一个问题。

我正在编写一个脚本来复制基于 Linux 的产品的日志文件。我已经完成了复制部分,但是我希望该脚本必须在复制日志之前验证 /var 分区大小。

以下是给我一个错误的脚本部分。

我希望如果 /var 分区大小小于 80%,它必须复制日志,否则必须退出。

size=`df -kh | grep var | awk '{print $5}'` #output is 1%, so it must execute other statements.

echo var partion $size utilized

if (( "$size" <= 79% ))

then

        echo "/var partition is less than 80%"

else

exit

        echo "/var partition is more than 79%"

fi

脚本的输出

[root@manage home]# sh logcopy.sh 
var partion 1% utilized
logcopy.sh: line 19: ((: 1% <= 79% : syntax error: operand expected (error token is "<= 79% ")

脱离 awk 命令和 df -kh

[root@manage home]# df -kh | grep var | awk '{print $5}'
1%
[root@manage home]# df -kh
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda6             980M  642M  287M  70% /
/dev/sda1              95M   25M   65M  28% /boot
/dev/sda9             6.0G 1004K  5.7G   1% /home
/dev/sda7             4.6G  879M  3.5G  20% /usr/local
/dev/sda8             446G  2.7G  421G   1% /var

答案1

百分号是模运算符(例如8 % 5is 3),它需要第二个操作数。如果您使用过,错误将是类似的(( size <= 79% )),并且如果右侧本身size不包含百分号,您会得到相同的错误。

因此,让我们从输入中删除百分号

size=$(df -kh | awk '$6 == "/var" {print $5}')
size=${size%"%"}
if (( size < 80 )); then
    echo "/var is less than 80 % full"
fi

这里,${size%"%"}是后缀删除扩展${var%word},第一个%是语法的一部分,第二个(引用的)是%我们要删除的。这里的引号是因为${var%%word}相似,删除最长的匹配后缀而不是最短的。我们也可以使用,${size%%%}但这样读起来更混乱。

答案2

df您可以指定目标 ( df /var),而不是针对所有磁盘运行

对于 GNU/Linux,可以格式化输出。最后你可以省略%, tr, sed substitution...

df /var --output=pcent | tail -1 |tr -d '%'
55

只是如果您想使用awk过度df输出,最好使用 withdf -P使其可移植。如果磁盘路径太长,那么您可能不会在一行中获得输出,例如:

df -kh
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup00-LogVol00
                      3.9G  404M  3.3G  11% /
/dev/mapper/VolGroup00-LogVol05
                      3.9G  442M  3.3G  12% /home
/dev/mapper/VolGroup00-LogVol04
                      3.9G  261M  3.5G   7% /var
/dev/mapper/VolGroup00-LogVol03
                      3.9G  137M  3.6G   4% /tmp
/dev/mapper/VolGroup00-LogVol02
                      7.8G  3.6G  3.8G  49% /usr

相关内容