服务器测试中,我们就经常用到shell和python脚本。测试时间长了,这两种语言就有必要学习一下。下面我们将一个简单的shell脚本转化为python。
比如 一个检测ssd smart log的脚本
#!/bin/bash
for ssd in `lsscsi |grep -i disk |awk '{print $NF}'`
do
echo "==========$ssd===========" |tee -a ssd.log
smartctl -i $ssd |tee -a ssd.log
done
log如下:
[root@localhost ~]# cat ssd.log ==========/dev/sda=========== smartctl 7.0 2018-12-30 r4883 [x86_64-linux-3.10.0-1160.49.1.el7.x86_64] (local build) Copyright (C) 2002-18, Bruce Allen, Christian Franke, www.smartmontools.org === START OF INFORMATION SECTION === Vendor: AVAGO Product: MR9361-8i Revision: 4.68 Compliance: SPC-3 User Capacity: 479,559,942,144 bytes [479 GB] Logical block size: 512 bytes Physical block size: 4096 bytes Logical Unit id: 0x600605b0110407b02957eacaa6c2f752 Serial number: 0052f7c2a6caea5729b0070411b00506 Device type: disk Local Time is: Thu Jan 27 16:38:04 2022 CST SMART support is: Unavailable - device lacks SMART capability. ==========/dev/sdb=========== smartctl 7.0 2018-12-30 r4883 [x86_64-linux-3.10.0-1160.49.1.el7.x86_64] (local build) Copyright (C) 2002-18, Bruce Allen, Christian Franke, www.smartmontools.org === START OF INFORMATION SECTION === Vendor: AVAGO Product: MR9361-8i Revision: 4.68 Compliance: SPC-3 User Capacity: 479,559,942,144 bytes [479 GB] Logical block size: 512 bytes Physical block size: 4096 bytes Logical Unit id: 0x600605b0110407b02957eacba6c8d581 Serial number: 0081d5c8a6cbea5729b0070411b00506 Device type: disk Local Time is: Thu Jan 27 16:38:04 2022 CST SMART support is: Unavailable - device lacks SMART capability. ==========/dev/sdc=========== smartctl 7.0 2018-12-30 r4883 [x86_64-linux-3.10.0-1160.49.1.el7.x86_64] (local build) Copyright (C) 2002-18, Bruce Allen, Christian Franke, www.smartmontools.org
现在用python的语言转化一下,用os模块调用指令
import os
ssd = os.popen("lsscsi |grep -i avago |awk '{print $NF}' ").read()
print ssd
打印结果如下:
[root@localhost ~]# python try.py /dev/sda /dev/sdb /dev/sdc /dev/sdd /dev/sde /dev/sdf /dev/sdg /dev/sdh /dev/sdi /dev/sdj /dev/sdk /dev/sdl [root@localhost ~]# cat try.py
最后一行为空,遍历的时候需要去掉最后一行,然后遍历列表
import os
ssd = os.popen("lsscsi |grep -i avago |awk '{print $NF}' ").read()
print ssd.split('n')[:-1]
结果如下:
[root@localhost ~]# python try.py ['/dev/sda', '/dev/sdb', '/dev/sdc', '/dev/sdd', '/dev/sde', '/dev/sdf', '/dev/sdg', '/dev/sdh', '/dev/sdi', '/dev/sdj', '/dev/sdk', '/dev/sdl']
然后 输出 smart log信息
import os
ssd = os.popen("lsscsi |grep -i avago |awk '{print $NF}' ").read()
for i in ssd.split('n')[:-1]:
os.popen("echo ========="+i+"=======>>1.log")
c = os.popen("smartctl -i {} >> 1.log".format(i)).read()
结果如下:
[root@localhost ~]# cat 1.log =========/dev/sda======= smartctl 7.0 2018-12-30 r4883 [x86_64-linux-3.10.0-1160.49.1.el7.x86_64] (local build) Copyright (C) 2002-18, Bruce Allen, Christian Franke, www.smartmontools.org === START OF INFORMATION SECTION === Vendor: AVAGO Product: MR9361-8i Revision: 4.68 Compliance: SPC-3 User Capacity: 479,559,942,144 bytes [479 GB] Logical block size: 512 bytes Physical block size: 4096 bytes Logical Unit id: 0x600605b0110407b02957eacaa6c2f752 Serial number: 0052f7c2a6caea5729b0070411b00506 Device type: disk Local Time is: Thu Jan 27 16:34:40 2022 CST SMART support is: Unavailable - device lacks SMART capability. =========/dev/sdb======= smartctl 7.0 2018-12-30 r4883 [x86_64-linux-3.10.0-1160.49.1.el7.x86_64] (local build) Copyright (C) 2002-18, Bruce Allen, Christian Franke, www.smartmontools.org === START OF INFORMATION SECTION === Vendor: AVAGO Product: MR9361-8i Revision: 4.68 Compliance: SPC-3 User Capacity: 479,559,942,144 bytes [479 GB] Logical block size: 512 bytes Physical block size: 4096 bytes Logical Unit id: 0x600605b0110407b02957eacba6c8d581 Serial number: 0081d5c8a6cbea5729b0070411b00506 Device type: disk Local Time is: Thu Jan 27 16:34:40 2022 CST SMART support is: Unavailable - device lacks SMART capability. =========/dev/sdc=======



