Linux運維面試中常被問到的兩個shell腳本
腳本一:
在公司里有一個網段是 192.168.3.0的網段,現在想判斷一下哪些主機在線,哪些主機不在線。
shell腳本解決方案:
方法一:
首先要循環(huán)目標主機的IP地址,IP地址分為兩部分:
str=192.168.3.
num=1-255的自然數,所以num需要先遍歷,然后與str拼接
IP=${str}${num}
1
#!/bin/bash #定義變量str str="192.168.31." # for循環(huán)遍歷num #num是1-255的自然數,可以使用{1..255} for num in {1..255} do ip=${str}${num} if ping -c1 -w1 ${ip} &>/dev/null;then #如果可以ping通則提示 ip在線 echo "$ip is online." else # 如果ping不通,提示主機不在線 echo "$ip is offline" fi done
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
ping命令后面有兩個參數,一個是 -c,一個是-w
-c count 指定要被發(fā)送(或接收)的回送信號請求的數目,由 Count 變量指出
-w timeout 這個選項僅和 -c 選項一起才能起作用。它使 ping 命令以最長的超時時間去等待應答(發(fā)送最后一個信息包后)
方法二:
前面的和方法一一樣,到了ping命令之后,要判斷是否在線的時候,除了方法一,還可以判斷 echo $?
如果 $?結果為0 ,則表示能ping通,也就是ip在線,否則為不在線。
#!/bin/bash str="192.168.1." for num in {1..255} do ip=${str}${num} ping -c1 -w1 ${ip} &>/dev/null #在這里定義NUM為$? ,如果執(zhí)行成功則$?=0,如果ping不通則不為零 NUM=$? if [ $NUM -eq 0 ];then echo "$ip is online." else echo "$ip is offline" fi done
1
2
3
4
5
6
7
8
9
10
11
12
13
14
方法三
表示1-255的方式,出了{1.。255} 之外,還可以用seq 1 254
[root@laoxin-06 ~]# cat ping.sh #!/bin/bash str="192.168.31." # seq 1 254 for num in `seq 1 254` do ip=${str}${num} ping -c1 -w1 ${ip} &>/dev/null NUM=$? if [ $NUM -eq 0 ];then echo "$ip is online" else echo "$ip is offline" fi done
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
腳本二:
我們去面試經常被問到磁盤使用率,我們可以寫一個腳本來判斷磁盤的使用率
#!/bin/bash # 截取IP ## 截取IP有多種方法 IP=`ifconfig eth0 |awk -F " " 'NR==2{print $2}'` # 定義使用率,并轉換為數字 SPACE=`df -Ph |awk '{print int($5)}'` for i in $SPACE do #如果遍歷的數值大于90,我們就認為磁盤使用率超過了90%,然后告警 if [ $i -ge 90 ] then echo "$IP的磁盤使用率已經超過了90%,請及時處理" fi done
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
當然IP的截取方法有很多種,這里用了相對比較簡單的一種
總結
shell腳本其實沒有那么難,日常學習中,多多練習就好了。
Linux Shell 運維
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發(fā)現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發(fā)現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。