linux 獲取Pci-E設備列表(腳本)

 1 #!/bin/bash
 2 #
 3 #通過dmidecode獲取有關“Designation:、Type:、Current Usage:、Length:、Bus Address:的信息,並輸出到/tmp/dmidecode_slot.log文件內
 4 dmidecode -t slot | grep -E "Designation:|Type:|Current Usage:|Length:|Bus Address:" | sed 's/^[ \t]*//g' | sed '/^$/d' | grep -v "\-\-" \
 5  > /tmp/dmidecode_slot.log
 6  #在/tmp/dmidecode_slot.log文件內刪除x8 x16 x2 x4每行第一份匹配的值
 7 sed -i 's/x8 //;s/x16 //;s/x2 //;s/x4 //' /tmp/dmidecode_slot.log
 8 sed -i 's/Express //' /tmp/dmidecode_slot.log
 9 #獲取bus address值,並賦值給busid變量
10 busid=`cat /tmp/dmidecode_slot.log | grep "Bus Address:" | awk -F ":" '{print $3":"$4}'|awk -F "." '{print $1}'| sort | uniq`
11 #通過busid循環出對應的pcie插卡設備名稱,將空槽位設置未N/A,並將其值輸出到 /tmp/dmidecode_slot.log文件裏的bus addres 的下一行
12 for i in $busid
13  do 
14 # pci_devices=$(lspci | grep "$i" |awk -F ":" '{print $NF}'| sort |uniq -c | awk 'NF{NF--}1'| awk 'NF{NF--}1')
15  pci_devices=$(lspci | grep "$i" |awk -F ":" '{print $NF}'| sort |uniq -c|sed s'/^ *//g')
16 
17  if [ -n "$pci_devices" ]
18  then 
19  :
20  else 
21  pci_devices="N/A" 
22  fi
23  sed -i '/'"$i"'/a'"pcie_devices: $pci_devices"'' /tmp/dmidecode_slot.log
24 done
25 #
26 #
27 #去除標題,保留內容,並重新輸出到dmidecode_slot1,log
28 cat /tmp/dmidecode_slot.log |awk -F ": " '{print $2}' > /tmp/dmidecode_slot1.log
29 #
30 #去掉busid的0000:
31 cat /tmp/dmidecode_slot1.log | grep 0000:| sed -i 's/\.0//;s/0000://' /tmp/dmidecode_slot1.log
32 #添加格式化輸出分割線
33 sed -i 's/^/| &/g' /tmp/dmidecode_slot1.log
34 #
35 #將文件中的空格換成下劃線(_),方便printf對其格式化輸出
36 sed -i 's/ /_/g' /tmp/dmidecode_slot1.log
37 #將dmidecode_slot1.log內容轉換爲一行,並賦值爲pci_list
38 pci_list=$(echo `cat /tmp/dmidecode_slot1.log`)
39 #清屏
40 clear
41 #格式化輸出
42 echo -e "\033[033m
43 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++  
44 +                                      ____  __________           __    _      __                                                           +  
45 +                                     / __ \/ ____/  _/__        / /   (_)____/ /_                                                          +  
46 +                                    / /_/ / /    / // _ \______/ /   / / ___/ __/                                                          +  
47 +                                   / ____/ /____/ //  __/_____/ /___/ (__  ) /_                                                            +  
48 +                                  /_/    \____/___/\___/     /_____/_/____/\__/   v1.0-2018.10.17                                          +  
49 +                                                                                                                                           +\033[0m"
50 #
51 echo -e "\033[33m+------------+------------+-----------+--------+----------+---------------------------------------------------------------------------------+\033[0m" > /tmp/pcie_list.log
52 echo -e "\033[33m| SOLT       | TPYE       | USAGE     | LENGTH | BUS ADD  | DEVIECS                                                                         |\033[0m" >> /tmp/pcie_list.log
53 echo -e "\033[33m+------------+------------+-----------+--------+----------+---------------------------------------------------------------------------------+\033[0m" >> /tmp/pcie_list.log
54 printf "%-12s %-12s %-11s %-8s %-10s %-1s\n" $pci_list >> /tmp/pcie_list.log
55 echo -e "\033[33m+------------+------------+-----------+--------+----------+---------------------------------------------------------------------------------+\033[0m" >> /tmp/pcie_list.log
56 #將文件中的下劃線(_)換成空格,還原輸出
57 sed -i 's/_/ /g' /tmp/pcie_list.log
58 #將結果輸出到屏幕上
59 cat /tmp/pcie_list.log
60 #刪除臨時文件
61 #rm -rf /tmp/dmidecode_slot1.log /tmp/dmidecode_slot.log

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章