吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1054|回复: 12
收起左侧

[求助] 帮忙看看这个shell脚本

[复制链接]
mikaelson 发表于 2021-3-23 22:28
分别要从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前面是反引号,最后也是

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
mikaelson + 1 + 1 热心回复!

查看全部评分

枯叶笑 发表于 2021-3-24 09:41
还有awk后面是用单引号
 楼主| mikaelson 发表于 2021-3-24 10:07
枯叶笑 发表于 2021-3-24 09:39
test='ssh  df -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
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2025-1-17 03:49

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表