上部:
面向過程:
順序執行
選擇執行: if, case
循環執行: for, while, until
一、for語句
格式:
for 變量 in 列表;do
語句1;
語句2;
...
done
例1、寫一個腳本,添加10個用戶,并讓每個用戶的密碼同用戶名】
例2、寫一個腳本,分別顯示 /tmp/1.dir /tmp/2.dir /tmp/3.dir三個文件的時間戳,并將這三個文件被修改的時間改為201003030303.03
stat $Dir
touch -m -t 201003030303.03 $Dir
stat $Dir
done
bash的變量類型:
本地變量
局部變量
環境變量
位置變量 :$1、$2、$3、$4....
特殊變量:
$?: 用于保存剛剛執行的命令的狀態返回值;
0:成功執行;1-255:失敗,1,2,127
可以使用exit命令在腳本中自定義腳本執行狀態返回值;如果不定義,腳本執行狀態返
回值取決于腳本執行結束前最后執行的那個語句的狀態;
$@, $*: 所有位置參數;
$#: 位置參數的個數;
$0: 腳本名稱
二、if語句
1、單分支if語句:
格式:
if 條件; then
語句1
語句2
...
fi
例3、寫一個腳本,實現如下功能: 如果用戶存在,就說明其存在;
例5、寫一個腳本,實現如下功能: 如果/etc/rc.d/rc.sysinit中有空白行,就顯示其空白行數;
2、雙分支if語句:
格式:
if 條件; then
語句1
語句2
...
else
語句1
語句2
...
fi
例6、寫一個腳本,實現如下功能:
如果設備/dev/sda3已經掛載,就顯示其掛載點;否則,就說明其未掛載或設備不存在;
mount | grep "/dev/sda3" | cut -d' ' -f3
else
echo "$Device not mounted or not exist."
fi
3、多分支if語句:
格式:
if 條件1; then
語句1
語句2
...
elif 條件2; then
語句1
語句2
...
elif 條件3; then
語句1
語句2
...
else
語句1
語句2
...
fi
例7、寫一個腳本:
判斷當前主機的CPU生產商,其信息在/proc/cpuinfo文件中vendor id一行中。
如果其生產商為GenuineIntel,就顯示其為Intel公司;
如果其生產商為AuthenticAMD,就顯示其為AMD公司;
否則,就顯示無法識別;
echo "intel"
elif [[ $Vendor =~ [[:space:]]*AuthenticAMD$ ]]; then
echo "AMD"
else
echo "Unknown"
fi
下部:
一、bash條件測試:
整數測試 [ expression ]
字符測試 [[ expression ]]
條件測試 test expression test 根據表達式求值的結果返回 0(真)或 1(假)
1、整數測試:數值比較
-gt 大于
-ge 大于或等于
-eq 等于
-lt 小于
-le 小于或等于
-ne 不等于
例1:寫一個腳本,生成兩個隨機數,比較其大小;顯示大數;
bash有個內置變量:$RANDOM
例2:寫一腳本,隨機生成一個整數,判定,顯示其奇偶性;
例3、寫一個腳本:
計算100以內所有奇數的和以及所有偶數的和;分別顯示之;
例4、計算N以內所有奇數的和以及所有偶數的和;分別顯示之;N是通過參數傳遞過來的正整數;
例5、寫一個腳本,完成以下要求:
1、添加10個用戶user1, user2, ..., user10;但要先判斷用戶是否存在,不存在而后再添加;
2、添加完成后,顯示一共添加了幾個用戶;當然,不能包括因為事先存在而沒有添加的;
3、最后顯示當前系統上共有多少個用戶;
2、bash字符測試:
>: 大于
<: 小于
==: 等于
=~: 判斷左邊的字符串是否能夠被右邊的模式所匹配;通常用于[[]];
[[ $opt1 =~ $opt2 ]]一般做行首、行尾錨定;不要加引號
單目:
-z $STRING: 為空則為真,不空則為假;
-n $STRING: 為空則為假,不空則真;
例6、寫一個腳本,判定用戶的shell是否為bash;
例7、根據用戶shell的結束符是否為sh來判定其是否為登錄用戶:
二、bash測試之文件測試:
操作符 文件路徑
-f: 測試其是否為普通文件,即ls -l時文件類型為-的文件;
-d: 測試其是否為目錄文件,即ls -l時文件類型為d的文件;
-e: 測試文件是否存在;存在為真,否則為假;
-r: 測試文件對當前用戶來說是否可讀;
-w: 測試文件對當前用戶來說是否可寫;
-x: 測試文件對當前用戶來說是否可執行;
-s: 測試文件大小是否不空,不空則真,空則假;
短路操作:只要前半段已經可以決定最終結果,后半段就不再運算;
與運算:
真 && 真 = 真
真 && 假 = 假
假 && {真|假} = 假
或運算:
假 || 0 = 0
假 || 1 = 1
真 || =1
例8、給定一個路徑,判斷如果為普通文件,顯示之;如果為目錄,顯示之;
否則,說無法識別;
綜合例子:
寫一個腳本:可以接受一個參數,其使用形式如下:
script.sh {start|stop|restart|status}
如果參數為start,創建空文件/var/lock/subsys/script,并顯示“Starting script successfully.”;
如果參數為stop,則刪除文件/var/lock/subsys/script,并顯示“Stop script finished.”;
如果參數為restart,則刪除文件/var/lock/subsys/script后重新創建,并顯示“Restarting script successfully.”;
如果參數為status,那么:
如果/var/lock/subsys/script文件存在,則顯示為“script is running.”
否則,則顯示為“script is stopped.”
其它任何參數:則顯示“script.sh {start|stop|restart|status}”
新聞熱點
疑難解答