歡迎您光臨本站 註冊首頁

Shell常用語句應用示例

←手機掃碼閱讀     火星人 @ 2014-03-09 , reply:0

Shell常用語句應用示例

if語句應用示例

例 8.13 檢查"/var/log/messages" 文件是否存在,若存在則統計文件內容的行數並輸出,否則不做任何操作(合理使用變數,可以提高編寫效率)
[root@linuxserver ~]# vi chklog.sh

#!/bin/bash
LogFile="/var/log/messages"
if [ -f $LogFile ] ; then
wc -l $LogFile
fi


[root@linuxserver ~]# sh chklog.sh ///執行該腳本進行測試(sh是bash的符號鏈接)
2102 /var/log/messages

例 8.14 提示用戶指定備份目錄的路徑,若目錄已經存在則顯示提示信息后跳過,否則顯示相應提示信息后創建該目錄.
[root@linuxserver ~]# vi mkbak.sh

#!/bin/bash
read -p "what is your backup directory:" BakDir
if [ -d $BakDir ] ; then
echo "$BakDir already exist."
else
echo "$BakDir is not exist, will make it."
mkdir $BakDir
fi

例 8.15 統計當前登錄到系統中的用戶數量,並判斷是否超過三個,若是則顯示實際數量並給出警告信息,否則列出登錄的用戶賬號名稱及所在終端.
[root@linuxserver ~]# vi chkuser.sh

#!/bin/bash
UsersNum=`who |wc -l`
if [ $UsersNum -gt 3 ] ; then
echo "Alert, too many login users (Total: $UsersNum)"
else
echo "Login users:"
who |awk '{print $1,$2}'
fi

例 8.16 檢查portmap進程是否已經存在,若已經存在則輸出“portmap service is running.”;否則檢查是否存在“/etc/rc.d/portmap”可執行腳本,
存在則啟動portmap服務,否則提示“no portmap script file.”
[root@linuxserver ~]# vi chkportmap.sh

#!/bin/bash
pgrep portmap &> /dev/null
if [ $? -eq 0 ] ; then
echo "portmap service is running."
elif [ -x "/etc/rc.d/portmap" ] ; then
service portmap start
else
echo "no portmap script file."
fi

例 8.17 每隔五分鐘監測一次mysqld服務進程的運行狀態,若發現mysqld進程已終止,則在“/var/log/messages”文件中追加寫入日誌信息(包括當時時間),
並重啟mysqld服務;否則不進行任何操作.
[root@linuxserver ~]# vi chkdbsvr.sh

#!/bin/bash
service mysqld status & > /dev/null //通過service工具檢查系統服務狀態
if [ $? -ne 0 ] ; then
echo "At time: 'date': MySQL Server is down." >> /var/log/messages
service mysqld restart
fi

[root@linuxserver ~]# crontab -e
*/5 * * * * /root/chkdbsvr.sh



for語句應用示例

例 8.18 依次輸出三條文字信息,包括一天中的“Morning”、“Noon”、“Evening”字串.
[root@linuxserver ~]# vi showday.sh

#!/bin/bash
for TM in "Morning" "Noon" "Evening"
do
echo "The $TM of the day."
done

例 8.19 對於使用“/bin/bash”作為登錄Shell的系統用戶,檢查他們在“/opt”目錄中擁有的子目錄或文件數量,如果超過100個,則列出具體數值及對應的用戶賬號.
[root@linuxserver ~]# vi chkfileown.sh

#!/bin/bash
DIR="/opt"
LMT=100
ValidUsers=`grep "/bin/bash" /etc/passwd |cut -d ":" -f 1`

for UserName in $ValidUsers
do
Num=`find $DIR -user $UserName |wc -l`
if [ $Num -gt $LMT ] ; then


echo "$UserName have $Num files."
fi
done


例 8.20 計算“/etc”目錄中所有“*.conf”形式的配置文件所佔用的總空間大小.
[root@linuxserver ~]# vi confsize.sh

#!/bin/bash
SizeNums=$(ls -l $(find /etc -type -f -a -name *.conf) | awk '{print $5}') //提取各文件的大小值
Total=0

for i in $SizeNums
do
Total=`expr $Total $i` //計算每個文件的大小之和
done
echo "Total size of conf files: $Total bytes."

while語句應用示例

例 8.21 由用戶從鍵盤輸入一個大於1的整數(如50),並計算從1到該數之間各整數的和.
[root@linuxserver ~]# vi sumint.sh

#!/bin/bash
read -p "Input a number (>1):" UP
i=1
Sum=0
while [ $i -le $UP ]
do
Sum=`expr $Sum $i`
i=`expr $i 1`
done
echo "The sum of 1-$UP is : $Sum"

例 8.22 批量添加20個系統用戶賬號,用戶名依次為“stu1”、“stu2”、“stu3”、..............、“stu20”,各用戶的初始密碼均為“123456”.
[root@linuxserver ~]# vi add20users.sh

#!/bin/bash
i=1
while [ $i -le 20 ]
do
useradd stu$i
echo "123456" |passwd --stdin stu$i & > /dev/null //為用戶賬號設置初始密碼
i=`expr $i 1` //將變數i遞增1的操作可改用“let i ”的簡略用法
done

例 8.23 編寫一個批量刪除用戶的腳本程序,將上例中添加的20個用戶刪除.
[root@linuxserver ~]# vi del20users.sh

#!/bin/bash
i=1
while [ $i -le 20 ]
do
userdel -r stu$i
i=`expr $i 1`
done


其他控制語句

case語句應用示列:


例 8.24 由用戶從鍵盤輸入一個字元,並判斷該字元是否為字母、數字或者其他字元,並輸出相應的提示信息.
[root@linuxserver ~]# vi hitkey.sh

#!/bin/bash
read -p "Press some key, then press Return:" KEY
case "$KEY" in
[a-z]|[A-Z])
echo "It's a letter."
;;
[0-9])
echo "It's a digit."
;;
*)
echo "It's function keys、Spacebar or other keys."
esac

until循環語句應用示例

例 8.25 批量刪除用戶的腳本程序
[root@linuxserver ~]# vi del20users.sh

#!/bin/bash
i=1
until [ $i -gt 20 ]
do
userdel -r stu$i
i=`expr $i 1`
done

shift語句應用示例

例 8.26 編寫一個Shell程序,計算多個整數值得和,需要計算的各個數值由用戶在執行腳本時作為命令行參數給出.
[root@linuxserver ~]# vi sumer.sh

#!/bin/bash
Result=0
while [ $# -gt 0 ]
do
Result=`expr $Result $1`
shift
done
echo "The sum is : $Result"


break語句應用示例

例 8.27 循環提示用戶輸入字元串,並將每次輸入的內容保存到臨時文件“/tmp/input.txt”中,當用戶輸入“END”字元串時退出循環體,並統計出input.txt文件中的行數、單詞數、
位元組數等信息,統計完后刪除臨時文件.
[root@linuxserver ~]# vi inputbrk.sh

#!/bin/bash
while true
do
read -p "Input a string:" STR
echo $STR >> /tmp/input.txt
if [ "$STR" = "END" ] ; then //建議為STR變數使用引號,以免字元串中有空格時出錯


break
fi
done
wc /tmp/input.txt
rm -rf /tmp/input.txt

continue語句應用示例

例 8.28 刪除系統中的stu1-stu20各用戶賬號,但是stu8、stu18除外.
[root@linuxserver ~]# vi delsome.sh

#!/bin/bash
i=1
while [ $i -le 20 ]
do
if [ $i -eq 8 ] || [$i -eq 18 ] ; then
let i
continue
fi
userdel -r stu$i
let i
done

Shell函數的應用

例 8.29 在腳本中定義一個help函數,當用戶輸入的腳本參數不是“start”或 “stop”時,載入該函數並給出關於命令用法的幫助信息,否則給出對應的提示信息.
[root@linuxserver ~]# vi helpfun.sh

#!/bin/bash
help() {
echo "Usage: "$0" start|stop"
}
case "$1" in
start)
echo "Starting ..."
;;
stop)
echo "Shutdown ..."
;;
*)
help
esac

函數的參數傳遞

例 8.30 在腳本中定義一個加法函數,用於計算兩個數的和,並調用該函數分別計算12 34、56 789的和.
[root@linuxserver ~]# vi adderfun.sh

#!/bin/bash
adder() {
echo `expr $1 $2`
}
adder 12 34
adder 56 789


[火星人 ] Shell常用語句應用示例已經有563次圍觀

http://coctec.com/docs/linux/show-post-47818.html