標籤:
本人對shell指令碼一點都不瞭解,工作中用到了shell指令碼,所有就只能趕鴨子上架,搜度娘一點一點的寫了。在搜尋的過程中看到了比較好的案例。大家可以參考一下。以後肯定可以用的到。
聲明本文轉載至 http://www.educity.cn/linux/1241314.html
指令碼1:為root使用者編寫登入歡迎指令碼:
1、用vi命令在/root目錄是建立一個指令檔welcome.sh,內容如下:
2、使用chmod命令給welcome.sh檔案增加執行(x)許可權
3、修改/root/.bash_profile檔案,在root使用者每次登入系統時調用welcome.sh指令碼程式
#vi /root/.bash_profile添加如下內容:
4、驗證:使用root使用者重新登入,驗證歡迎指令碼的輸出資訊
指令碼2:編寫指令碼程式,用來啟動、停止和顯示系統服務狀態:
1、用vi命令在/root/bin目錄是建立一個指令檔status用來查看crond服務的狀態,內容如下:
設定x許可權
指令檔stop和start與status類似,稍作修改即可。
指令碼3:編寫健全狀態監控指令碼/opt/monitor.sh,用於記錄CPU負載、記憶體和交換空間、磁碟空間、最近的使用者登入情況等資訊,以及當時的時間資訊。
1、用vi命令在/opt目錄是建立一個指令檔monitor.sh,內容如下:
#!/bin/bash
mkdir -p /var/log/runrec
RecFile="/var/log/runrec/running.today"
RecTime=`date +"%Y-%m-%d %H:%M"`
LoadRec=`uptime`
MemRec=`free -m`
DiskRec=`df -hT`
LastLoginRec=`last -n 20`
echo"++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Record Time: $RecTime
cpu Load information:$LoadRec
Memory information:$MemRec
Disk Usage information:$DiskRec
Last login 20 users record:$LastLoginRec">> $RecFile
2、使用chmod命令給monitor.sh檔案增加執行(x)許可權
3、測試指令碼是否能正常運行及輸出正確資訊
4、設定計劃任務,要求每隔15分鐘執一次monitor.sh指令碼,並確認crond服務已啟動。
建立計劃任務:
#crontab –e 內容如下
*/15 * * * */opt/monitor.sh
查看crond服務狀態並設定crond開機自動起動。
#service crondstatus
#chkconfig--level 35 crond on
指令碼1:編寫SHELL指令碼監控主機
1、用vi命令在/root目錄是建立一個指令檔sysmon.sh,內容如下:
附:
a:使用df命令提取根分區的磁碟佔用率:如所示:
使用df -h命令查看磁碟分割的使用方式,其中根分區的已用空間是10%
用如中的命令可以過濾磁碟的已用空間
b:使用mpstat命令提取CPU使用率(要確保sysstat軟體包已安裝)。如所示:其中%idle表示CPU空閑時間百分比
用如中的命令可以得到CPU已用空間並賦值給變數CUG
c:使用free命令查看記憶體的使用方式。其中劃紅線的表示空餘記憶體。
用如中的命令可以得到記憶體使用量率並賦值給變數MUG
2、使用chmod命令給sysmon.sh檔案增加執行(x)許可權
3、測試sysmon.sh指令碼的執行情況
a:配置DNS服務負責解析郵件伺服器的MX和A記錄
b:修改/etc/nf檔案指向DNS伺服器位址
c:配置郵件伺服器
如果是postfix伺服器,配置如下:
修改main.cf檔案,修改後內容如下:
重啟postfix服務。並發測試郵件。
d:確認有可用的郵件伺服器,然後調低監控閾值,執行sysmon.sh指令碼進行測試
e:查收名為的郵箱,確認警告郵件內容
郵件內容如下:
4、設定crontab計劃任務,每隔半小調用一次sysmon.sh指令碼程式
重新啟動crond服務。
指令碼2:編寫SHELL指令碼(mkbak.sh)提示使用者指定備份目錄的路徑,若目錄已存則顯示提示資訊後跳過,否則顯示相應資訊後建立該目錄。
指令碼3:編寫指令碼程式(chkdbsvr.sh)用於每隔5分監視一次系統服務mysqld的運行狀態,若發現mysqld進程已經停止,則在/var/log/messages檔案中追加寫入日誌資訊(包括當時時間),並重啟mysqld服務;否則不進行任何操作
指令碼4:編寫指令碼程式用於監視系統服務httpd的運行狀態,要求如下
當服務狀態失常時在"/var/log/htmon.log"檔案中記入日誌資訊。
自動將狀態失常的httpd服務重新啟動。若重啟httpd服務失敗,測嘗試重新啟動伺服器主機
結合crond計劃任務,每周一至周五每隔15分鐘執行一次監測任務
1、在/opt目錄中建立指令碼htmon.sh,指令碼內容如下
#! /bin/bash
/sbin/service httpdstatus &> /dev/null
if [ $? -ne 0 ] ; then
echo "`date`" >> /var/log/htmon.log
/sbin/service httpd restart
/sbin/service httpd status &>/dev/null
if [ $? -ne 0 ] ; then
/sbin/chkconfig --level 2345 httpd on
/sbin/shutdown -r now
fi
fi
2、建立crontab計劃任務
*/15 * * * * /opt/htmon.sh
指令碼1:編寫一個名為getarp.sh的指令碼,記錄區域網路中各個主機的MAC地址。儲存到/etc/ether檔案中,若此檔案已存在,應先進行備份。第行一條記錄,第1列為IP地址,第2列為對應的MAC地址。
分析:
假定要掃描的網段是192.168.4.0,將192.168.4.賦值給變數NADD,作為檢測地址的首碼
使用”arping -c 2 -w 1 被檢測主機的IP”命令發送ARP請求,記錄MAC地址
用while迴圈語句檢測目標主並記錄MAC地址,這裡檢測的主機地址為2~3
1、用vi建立一個名為getarp.sh指令碼,內容如下:
#!/bin/bash
NADD="192.168.4."
FILE="/etc/ethers"
[-f $FILE ] && /bin/cp -f $FILE $FILE.old
HADD=1
while[ $HADD -lt 4 ]
do
arping -c 2 -w 1 ${NADD}${HADD} &>/dev/null
if [ $? -eq 0 ] ; then
arp -n | grep ${NADD}${HADD} | awk ‘{print$1,$3}‘ >> $FILE
fi
let HADD++
done
2、給指令碼getarp.sh增加x許可權
3、執行指令碼,查看檢測到的MAC資訊
指令碼2:編寫一個指令碼scanhost.sh,檢查有哪些主機開啟了匿名FPT服務,掃描對象為/etc/ethers檔案中的所有IP地址,掃描的連接埠號碼為21
環境描述:假定192.168.4.2主機為匿名訪問的FTP。 192.168.4.3非匿名訪部的FTP。
建立掃描檔案/etc/ethers,內容如下:
這裡採用wget下載工具:wget ftp://IP/
1、用vi建立一個名為scanhost.sh指令碼,內容如下:
#!/bin/bash
TARGET=$(awk‘{print $1}‘ /etc/ethers)
echo"follow is anonymous FTP server:"
forIP in $TARGET
do
wget –T 3 -t 3 ftp://$IP/ &> /dev/null
if [ $? -eq 0 ] ; then
echo $IP
fi
done
參數提示:-T 連線逾時時間;-t 串連重試次數
2、給指令碼getarp.sh增加x許可權
3、執行指令碼,查看掃描到的資訊
指令碼3:計算/etc/目錄中所有nf設定檔所佔用的總空間大小
用vi建立一個名為confsize.sh指令碼,內容如下:
#!/bin/bash
sizenums=$(ls-l $(find /etc/ -type f -a -name nf) | awk ‘{print $5}‘)
total=0
fori in $sizenums
do
total=$(expr $total + $i)
done
echo"total size of conf files: $total bytes."
指令碼4:編寫一個指令碼chkfileown.sh,對於使用bash作為登入shell的系統中,檢查他們在/opt目錄中的檔案數量並列出具體的數值及對應的使用者賬戶
1、用vi建立一個名為chkfileown.sh指令碼,內容如下:
#!/bin/bash
DIR="/opt/"
validusers=$(grep"bash$" /etc/passwd | awk -F: ‘{print $1}‘)
forusername in $validusers
do
num=$(find $DIR -user $username | wc -l)
echo "$username have $num files."
done
2、給指令碼getarp.sh增加x許可權
3、執行指令碼,查看執行後的資訊(注:/opt目錄下若沒有任何檔案,可事先建立一些測試檔案)
指令碼5:編寫指令碼用於大量新增使用者,要求如下:
要求提供互動功能,當管理員執行該指令碼時,可以根據提示指定需添加的使用者數量(少於100)、使用者名稱首碼、並能夠設定這些使用者賬戶的失效時間,初始密碼。
使用者名稱編號統一使用兩位元,如使用”01”、”02”、”03”的形式,而不是”1”、”2”、”3”的形式。
編寫對應的批量刪節除使用者指令碼,要能夠通過命令列參數指定使用者名稱首碼,執行指令碼後刪除所有使用了該首碼的使用者賬戶,但要防止刪除root使用者。
大量新增使用者指令碼:
1、大量新增使用者指令碼myuadd.sh內容如下:
#!/bin/bash
read-p "input nu <1-99>:" nu
read-p "input name:" name
read-p "input date <YYYY-MM-DD>:" date
read-p "input password:" password
a=1
if[ $nu -lt 100 ]
then
while[ $a -le $nu ]
do
if [ $a -lt 10 ]
then
useradd -e $date"$name"0"$a"
echo "$password" | passwd--stdin "$name"0"$a" &>/dev/null
else
useradd -e $date"$name""$a"
echo "$password" | passwd--stdin "$name""$a" &>/dev/null
fi
a=`expr$a + 1`
done
fi
2、給指令碼myuadd.sh增加x許可權
3、執行指令碼myuadd.sh,添加使用者
4、驗證結果:查看/etc/passwd檔案是否添了新使用者
大量刪除使用者指令碼:
1、大量刪除使用者指令碼myudel.sh內容如下:
#!/bin/bash
if[ $# -le 0 ] ; then
echo "error:the prefix of users has notbe specified."
echo "usage:$0 nameprefix"
exit 1
fi
tarjcvf /root/f.tar.gz /etc/passwd /etc/shadow /etc/group &>/dev/null
tobedel=`grep"$1" /etc/passwd | cut -d ":" -f 1 | grep -v"root"`
foru in $tobedel
do
userdel -r $u &> /dev/null
done
2、給指令碼myudel.sh增加x許可權
3、執行指令碼myudel.sh,刪除使用者。如myudel.shcaiwu03或myudel.sh caiwu
4、驗證結果:查看/etc/passwd檔案中已刪除的使用者是否還存在。
附:
我們可以用env或export命令查看環境變數,使用set命令查看所有變數(包括環境變數和自訂變數),使用unset命令刪除變數
LINUX系統中大多數版本都有隨機數產生器,就是/dev/random檔案。可以通過這個隨機數檔案相關的系統環境變數$RANDOM來隨機取得隨機數。在BASH環境下,這個RANDOM變數的內容介於0——32767之間,(man bash,搜尋 RANDOM 可以看到說明)所以,只要echo $RANDOM時,系統就會主動隨機取出一個介於0——32767的數值。例如要想0-9之間的隨機數時,可以用declare聲明數實值型別
或
linux shell指令碼神一般的測試案例