mikaelson 发表于 2021-3-23 22:28

帮忙看看这个shell脚本


分别要从4台服务器取个硬盘剩余容量和已使用空间,然后把记录保存在本地

现在是这么写的,

echo -e "A地区磁盘使用率为:\c">/root/disk.txt
ssh root@1.1.1.1 `df -h|grep /dev/sdb1|awk "{print \$5}"`>>/root/disk.txt

echo -e "B地区磁盘使用率为:\c">>/root/disk.txt
ssh root@1.1.1.2 `df -h|grep /dev/sdb1|awk "{print \$5}"`>>/root/disk.txt

echo -e "C地区磁盘使用率为:\c">>/root/disk.txt
ssh root@1.1.1.3 `df -h|grep /dev/sdb1|awk "{print \$5}"`>>/root/disk.txt


最后生成结果为:
A地区磁盘使用率为:60%
B地区磁盘使用率为:60%
C地区磁盘使用率为:60%


虽然low了点,但是好歹实现了。现在想改成,多截取一个数据,就是剩余量,并且输出改成:


A 剩余XX% 使用 XX%
B 剩余XX% 使用 XX%
C 剩余XX% 使用 XX%

本人菜鸟一枚,都是百度造轮子的。。。

现在要多取一个参数,截取应该就是awk多加一个就好了,但是要怎么把截取的东西到输出里了。。因为我原先就一个参数,直接加到末尾就行了,都不用考虑。

请大家有空路过的指点指点。

枯叶笑 发表于 2021-3-23 22:50

定义一个变量,每次for循环读文件获取ip 然后得到使用率,接着用100减去就行了

mikaelson 发表于 2021-3-23 23:31

枯叶笑 发表于 2021-3-23 22:50
定义一个变量,每次for循环读文件获取ip 然后得到使用率,接着用100减去就行了

我试着用变量

test='ssh root@1.1.1.1 `df -h|grep /dev/sdb1|awk "{print \$5}"`>>/root/disk.txt’

好像这句就只能到grep了,awk就不生效了。。。

风景暗色调 发表于 2021-3-24 00:15

本帖最后由 风景暗色调 于 2021-3-24 00:20 编辑

测试过了,缺点:我未做被除数为0的判断,因为想睡觉了....

df -h -B K | grep "/dev/sda1"| awk '{printf("剩余百分比:%.2f%%\t已用百分比:%0.2f%%\n",(int($4)/int($2)*100),(int($3)/int($2)*100))}'

我是没用100来减去$5(df自带的已用百分比)这种方式取得剩余,因为df -h的百分比不够精确,我个人喜欢。


效果就是这样:


剩余百分比:75.67%      已用百分比:24.33%

另外:这玩意用ansible来管理他不香吗,或者用zabbix。

mikaelson 发表于 2021-3-24 08:45

风景暗色调 发表于 2021-3-24 00:15
测试过了,缺点:我未做被除数为0的判断,因为想睡觉了....

df -h -B K | grep "/dev/sda1"| awk '{ ...

辛苦大佬了。单独运行测试了下倒是没问题。

但是试了下跟ssh命令马上连接服务器并运行好像没生效。。引号太多了。

ssh root@1.1.1.1 'df -h -B K | grep "/dev/sda1"| awk '{printf("剩余百分比:%.2f%%\t已用百分比:%0.2f%%\n",(int($4)/int($2)*100),(int($3)/int($2)*100))}''

枯叶笑 发表于 2021-3-24 09:39

test='ssh root@1.1.1.1 df -h|grep /dev/sdb1|awk "{print $5}" | awk -F% "{print $1}"'
((avali=100-$test))
echo "已使用${test}% 未使用${avali}%" >> /root/test.txt
注意ssh前面是反引号,最后也是

枯叶笑 发表于 2021-3-24 09:41

还有awk后面是用单引号

mikaelson 发表于 2021-3-24 10:07

枯叶笑 发表于 2021-3-24 09:39
test='sshdf -h|grep /dev/sdb1|awk "{print $5}" | awk -F% "{print $1}"'
((avali=100-$test))
echo...

感谢大佬,不过弱弱的问下。

echo "已使用${test}% 未使用${100-$test}%"

这样为什么“未使用”算不出来。。。不能这么写吗?

风景暗色调 发表于 2021-3-24 10:14

mikaelson 发表于 2021-3-24 10:07
感谢大佬,不过弱弱的问下。

echo "已使用${test}% 未使用${100-$test}%"


${}是引用变量的,算数运算要使用$[] $(())(()) let expr 这些

wang1anfu 发表于 2021-3-24 10:14

参考一下下面的:
#!/bin/bash
#机器A

use_A=$(ssh root@192.168.15.95 df -k | grep /dev/sda1 | awk -F " " '{print $5}')
avail_A=`echo $[ 100 - $(echo ${use_A%*%}) ]"%"`
echo "A 剩余${avail_A} 使用${use_A}" >> /root/disk.txt
页: [1] 2
查看完整版本: 帮忙看看这个shell脚本