服务器测试中,我们就经常用到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=======