bash腳本編程:
if語句、bash -n、bash -x
CONDITION:
bash命令:
用命令的執行狀態結果;
成功:true
失敗:flase
成功或失敗的意義:取決於用到的命令;
單分支:
if CONDITION; then
if-true
fi
雙分支:
if CONDITION; then
if-true
else
if-false
fi
多分支:
if CONDITION1; then
if-true
elif CONDITION2; then
if-ture
elif CONDITION3; then
if-ture
...
esle
all-false
fi
逐條件進行判斷,第一次遇為“真”條件時,執行其分支,而後結束;
示例:用戶鍵入文件路徑,腳本來判斷文件類型;
#!/bin/bash
#
read -p "Enter a file path: " filename
if [ -z "$filename" ]; then
echo "Usage: Enter a file path."
exit 2
fi
if [ ! -e $filename ]; then
echo "No such file."
exit 3
fi
if [ -f $filename ]; then
echo "A common file."
elif [ -d $filename ]; then
echo "A directory."
elif [ -L $filename ]; then
echo "A symbolic file."
else
echo "Other type."
fi
注意:if語句可嵌套;
循環:for, while, until
循環體:要執行的代碼;可能要執行n遍;
進入條件:
退出條件:
for循環:
for 變量名 in 列表; do
循環體
done
執行機制:
依次將列表中的元素賦值給“變量名”; 每次賦值後即執行一次循環體; 直到列表中的元素耗盡,循環結束;
示例:添加10個用戶, user1-user10;密碼同用戶名;
#!/bin/bash
#
if [ ! $UID -eq 0 ]; then
echo "Only root."
exit 1
fi
for i in {1..10}; do
if id user$i &> /dev/null; then
echo "user$i exists."
else
useradd user$i
if [ $? -eq 0 ]; then
echo "user$i" | passwd --stdin user$i &> /dev/null
echo "Add user$i finished."
fi
fi
done
列表生成方式:
(1) 直接給出列表;
(2) 整數列表:
(a) {start..end}
(b) $(seq [start [step]] end)
(3) 返回列表的命令;
$(COMMAND)
(4) glob
(b) 變量引用;
$@, $*
示例:判斷某路徑下所有文件的類型
#!/bin/bash
#
for file in $(ls /var); do
if [ -f /var/$file ]; then
echo "Common file."
elif [ -L /var/$file ]; then
echo "Symbolic file."
elif [ -d /var/$file ]; then
echo "Directory."
else
echo "Other type."
fi
done
示例:
#!/bin/bash
#
declare -i estab=0
declare -i listen=0
declare -i other=0
for state in $( netstat -tan | grep "^tcp\>" | awk '{print $NF}'); do
if [ "$state" == 'ESTABLISHED' ]; then
let estab++
elif [ "$state" == 'LISTEN' ]; then
let listen++
else
let other++
fi
done
echo "ESTABLISHED: $estab"
echo "LISTEN: $listen"
echo "Unkown: $other"
練習1:/etc/rc.d/rc3.d目錄下分別有多個以K開頭和以S開頭的文件;
分別讀取每個文件,以K開頭的文件輸出為文件加stop,以S開頭的文件輸出為文件名加start;
“K34filename stop”
“S66filename start”
練習2:寫一個腳本,使用ping命令探測172.16.250.1-254之間的主機的在線狀態;
本文出自 “梁小明的博客” 博客,請務必保留此出處http://7038006.blog.51cto.com/7028006/1829381