shell腳本應(yīng)用(三)

2018-06-08 17:06 更新

防偽碼:長(zhǎng)風(fēng)破浪會(huì)有時(shí),直掛云帆濟(jì)滄海

                shell腳本應(yīng)用(三)

前言:當(dāng)面對(duì)各種列表重復(fù)任務(wù)時(shí),使用if語(yǔ)句已經(jīng)難以滿足要求,而順序編寫全部代碼更是顯得異常繁瑣,困難重重。使用循環(huán)、分支等其他程序控制結(jié)構(gòu),從而能夠輕松完成更加復(fù)雜、強(qiáng)大的功能。

1、 使用for循環(huán)語(yǔ)句(讀取不同的變量值,用來(lái)逐個(gè)執(zhí)行同一組命令)

1) 根據(jù)姓名列表批量添加用戶

準(zhǔn)備員工列表文件users.txt,然后編寫一個(gè)名為uaddfor.sh的腳本,從users.txt文件中讀取各用戶名稱,重復(fù)執(zhí)行添加用戶,設(shè)置初始密碼的相關(guān)操作。

Vi  /root/users.txt

Vi  uaddfor.sh

執(zhí)行腳本:./uaddfor.sh之后查看用戶文件cat  /etc/passwd

 

2)若要?jiǎng)h除uaddfor.sh腳本添加的用戶,只需要將上面腳本中添加用戶的命令改為刪除的即可。

Vi  udelfor.sh

執(zhí)行腳本之后發(fā)現(xiàn)用戶已經(jīng)刪除

 

3)根據(jù)ip地址列表查看主機(jī)狀態(tài)

首先建立ip地址列表文件ipadds.txt,然后編寫一個(gè)名為chkhosts.sh的shell腳本,從ipadds.txt文件中讀取各服務(wù)器的ip地址,

重復(fù)執(zhí)行ping連通性測(cè)試,并根據(jù)測(cè)試結(jié)果輸出相應(yīng)的提示信息。

Vi  /root/ipadds.txt

編寫腳本vi chkhosts.sh

執(zhí)行腳本

2、 使用while循環(huán)語(yǔ)句(重復(fù)測(cè)試某個(gè)條件,只要條件成立則反復(fù)執(zhí)行。For循環(huán)適合無(wú)規(guī)律,列表已固定,while循環(huán)適合要求循環(huán)次數(shù),操作對(duì)象按數(shù)字順序編號(hào),按特定條件執(zhí)行重復(fù)操作的情況。)


1) 批量添加規(guī)律編號(hào)的用戶,添加20個(gè)用戶,名稱依次為stu1,stu2,... Stu20

Vi  uaddwhile.sh

循環(huán)條件:序號(hào)<=20

let ++:序號(hào)遞增,避免死循環(huán)

執(zhí)行腳本之后查看用戶:cat /etc/passwd

2)刪除所添加的用戶,只需將上述代碼修改即可

Vi  udelwhile.sh

執(zhí)行腳本之后查看用戶是否被刪除

3) 猜價(jià)格游戲

思路:通過(guò)環(huán)境變量RANDOM可獲得一個(gè)小于2的16次方的隨機(jī)整數(shù),計(jì)算其與1000的余數(shù)即可獲得0-999的隨機(jī)價(jià)格,反復(fù)猜測(cè)操作可以通過(guò)以true作為測(cè)試條件的while循環(huán)實(shí)現(xiàn),當(dāng)用戶猜中實(shí)際價(jià)格時(shí)終止循環(huán),判斷猜測(cè)價(jià)格與實(shí)際價(jià)格的過(guò)程采用if語(yǔ)句實(shí)現(xiàn),嵌套在while循環(huán)體內(nèi),使用變量來(lái)記錄猜測(cè)次數(shù)。

Vi  pricegame.sh

 Chmod  +x  pricegame.sh

./pricegame.sh執(zhí)行腳本

3、 使用case分支語(yǔ)句(針對(duì)變量的不同取值,分別執(zhí)行不同的命令序列 

Case語(yǔ)句可以使用腳本程序的結(jié)構(gòu)更加清晰。

1) 檢查用戶輸入一個(gè)字符,通過(guò)case語(yǔ)句判斷該字符是否為字母,數(shù)組或其他控制字符,并給出相應(yīng)的提示信息。

Vi  hitkey.sh

執(zhí)行腳本的效果:

1) 編寫系統(tǒng)服務(wù)腳本

通過(guò)位置變量$1指定的start,stop,restart,status控制參數(shù),分別用來(lái)啟動(dòng)、停止、重啟sleep進(jìn)程,以及查看sleep進(jìn)程的狀態(tài)。

Vi  myprog

測(cè)試并確認(rèn)myprog腳本的執(zhí)行結(jié)果如下:

然后執(zhí)行下面的命令添加myprog為系統(tǒng)服務(wù)

上機(jī)實(shí)驗(yàn)部分:

實(shí)驗(yàn)案例:shell腳本應(yīng)用實(shí)戰(zhàn)

1、編寫getarp.sh腳本文件

(1)通過(guò)arping命令發(fā)送ARP請(qǐng)求,根據(jù)反饋結(jié)果記錄MAC地址。

(2)將網(wǎng)段地址(如192.168.4.)賦值給變量NADD,作為檢測(cè)地址的前綴。

(3)使用while循環(huán)語(yǔ)句,重復(fù)檢測(cè)目標(biāo)并記錄MAC地址,主機(jī)地址從1-254。

我們使用橋接網(wǎng)絡(luò)獲取到0.102和0.103地址,并做測(cè)試


1、定義網(wǎng)段地址、MAC列表文件、發(fā)送ARP請(qǐng)求,并記錄反饋結(jié)果(如果網(wǎng)段發(fā)生變化,只需修改MADD=“192.168.x.”)

執(zhí)行腳本之后查看/etc/ethers文件

chmod +x getarp

./getarp

Cat  /etc/ethers

 2、編寫scanhost.sh腳本

(1)有很多方法可以檢測(cè)一個(gè)主機(jī)是否開啟匿名FTP服務(wù),這里采取以wget下載工具訪問(wèn)FTP根目錄的方式,若能夠成功列表,則視為匿名FTP已開啟,否則視為關(guān)閉。

(2)通過(guò)awk命令過(guò)濾出/etc/ethers文件中的所有IP地址,賦值給變量TARGET。

(3)使用for循環(huán)語(yǔ)句,讀取TARGET變量中的IP地址,重復(fù)探測(cè)FTP開啟情況。

執(zhí)行腳本之前在另一臺(tái)linux服務(wù)器B192.168.1.2上搭建ftp服務(wù)(使用vsftpd軟件),然后在linuxA上執(zhí)行腳本

在B上安裝vsftpd,如下圖所示:

Vim /etc/vsftpd/vsftpd.conf啟用匿名,默認(rèn)就啟用了,我們查看一下:

開啟ftp服務(wù)

Service  vsftpd  start

在A上登錄ftp 192.168.1.2測(cè)試,如果不能使用ftp命令,則需要安裝ftp-0.17......

最后在A上執(zhí)行腳本./scanhost.sh

執(zhí)行腳本之后發(fā)現(xiàn)192.168.1.2開啟了ftp匿名登錄。

謝謝觀看,希望能真心的幫到您!


本文出自 “一盞燭光” 博客,謝絕轉(zhuǎn)載!

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)