bash腳本編程:
面向過程:
順序執行
選擇執行: if, case
循環執行: for, while, until
For循環
for 變量 in 列表; do
語句1;
語句2;
...
done
循環必須有退出條件;
單分支if語句:
if 條件; then
語句1
語句2
...
fi
單分支if語句例子
1:寫一個腳本,實現如下功能:如果用戶存在,就說明其存在;
#!/bin/bash
#
UserName=user1
if grep "^$UserName\>" /etc/passwd &> /dev/null; then
echo "$UserName exists."
fi
-------------------------------------------------------------
-------------------------------------------------------------
#!/bin/bash
UserName=user1
if id $UserName &> /dev/null; then
echo "$UserName exists."
fi
2:寫一個腳本,實現如下功能:如果用存在,就顯示其UID和SHELL;
#!/bin/bash
#
UserName=user1
if id $UserName &> /dev/null; then
grep "^$UserName\>" /etc/passwd | cut -d: -f3,7
fi
3:寫一個腳本,實現如下功能:如果設備/dev/sda3已經掛載,就顯示其掛載點;
#!/bin/bash
#
Device='/dev/sda3'
if mount | grep "^$Device" &> /dev/null; then
mount | grep "/dev/sda3" | cut -d' ' -f3
fi
4:寫一個腳本,實現如下功能:如果/etc/rc.d/rc.sysinit中有空白行,就顯示其空白行數;
#!/bin/bash
#
File='/etc/rc.d/rc.sysinit'
if grep "^$" $File &> /dev/null; then
grep "^$" $File | wc -l
fi
雙分支if語句:
if 條件; then
語句1
語句2
...
else
語句1
語句2
...
fi
練習:寫一個腳本,實現如下功能:如果設備/dev/sda3已經掛載,就顯示其掛載點;否則,就說明其未掛載或設備不存在;
#!/bin/bash
#
Device='/dev/sda3'
if mount | grep "^$Device" &> /dev/null; then
mount | grep "/dev/sda3" | cut -d' ' -f3
else
echo "$Device not mounted or not exist."
fi
多分支if語句:
語法格式:
if 條件1; then
語句1
語句2
...
elif 條件2; then
語句1
語句2
...
elif 條件3; then
語句1
語句2
...
else
語句1
語句2
...
fi
寫一個腳本:
判斷當前主機的CPU生產商,其信息在/proc/cpuinfo文件中vendor id一行中。
如果其生產商為GenuineIntel,就顯示其為Intel公司;
如果其生產商為AuthenticAMD,就顯示其為AMD公司;
否則,就顯示無法識別;
#!/bin/bash
#
Vendor=`grep "vendor_id" /proc/cpuinfo | uniq | cut -d: -f2`
if [[ $Vendor =~ [[:space:]]*GenuineIntel$ ]]; then
echo "intel"
elif [[ $Vendor =~ [[:space:]]*AuthenticAMD$ ]]; then
echo "AMD"
else
echo "Unknown"
fi
bash條件測試:
可獨立執行的命令不需使用如下測試的方式;
[ expression ] 括號內一般是需要測試的表達式 如:"$a" == "$b"
[[ expression ]]
test expression
bash命令有執行狀態返回值;
bash的變量類型:
本地變量
局部變量
環境變量
位置變量
特殊變量:
$?: 用於保存剛剛執行的命令的狀態返回值;
0:成功執行;
1-255:失敗,1,2,127
可以使用exit命令在腳本中自定義腳本執行狀態返回值;如果不定義,腳本執行狀態返回值取決於腳本執行結束前最後執行的那個語句的狀態;
$@, $*: 所有位置參數;
$#: 位置參數的個數;
bash整數測試:
expression: ��值1 比較符號 數值2
$A 比較符號 $B
大於:-gt
小於:-lt
等於:-eq
大等:-ge
小等:-le
不等:-ne
命令執行狀態返回值: 0-255
0: 正確執行
1-255: 錯誤執行
exit [n] 腳本執行的最後一條件命令的狀態返回值;
1:寫一個腳本,生成兩個隨機數,比較其大小;顯示大數;
bash有個內置變量:$RANDOM
$RANDOM 顯示隨機數
#!/bin/bash
#
A=$RANDOM
B=$RANDOM
if [ $A -ge $B ]; then
echo "Max number is $A."
else
echo "Max number is $B."
fi
2:寫一腳本,隨機生成一個整數,判定,顯示其奇偶性;
#!/bin/bash
#
A=$RANDOM
if [ $[$A%2] -eq 0 ]; then
echo "$A: Even"
else
echo "$A: Odd"
fi
3:給定一個用戶,如果其ID號大於499,就說明其是普通用戶,否則,就說明其是管理員或系統用戶;
#!/bin/bash
#
UserName=daemon
Uid=`id -u $UserName`
if [ $Uid -gt 499 ]; then
echo "A common user: $UserName."
else
echo "admin user or system user: $UserName."
fi
4:求200以內所有為3的整數倍的整數之和;
#!/bin/bash
#
Sum=0
for I in {1..200}; do
if [ $[$I%3] -eq 0 ]; then
Sum=$[$Sum+$I]
fi
done
echo "Sum: $Sum."
5:給定一個用戶,如果其UID等於GID,就說明這是個“good guy”,否則,“Bad guy.”
#!/bin/bash
#
UserName=user1
if [ `id -u $UserName` -eq `id -g $UserName` ]; then
echo "Good Guy."
else
echo "Bad Guy."
fi
6:寫一個腳本:計算100以內所有奇數的和以及所有偶數的和;分別顯示之;
#!/bin/bash
#
EvenSum=0
OddSum=0
for I in {1..100}; do
if [ $[$I%2] -eq 0 ]; then
EvenSum=$[$EvenSum+$I]
else
OddSum=$[$OddSum+$I]
fi
done
echo "EvenSum is: $EvenSum. OddSum is: $OddSum."
更多見下一頁: http://www.linuxidc.com/Linux/2013-07/87922p2.htm