一、bash互動式程式設計
腳本參數:
使用者互動://linux的重要思想,盡量避免和使用者互動
1.腳本傳遞參數, a.sh tom jery
2.通過鍵盤擷取資料
read //
-p 'promtpt' //提示符
// read a b 輸入tom和jerry會分别識别為a和b
-t timeout 逾時時間
read a b //輸入 ja tom wolf //a==ja ,b='tom wolf'
read -t 5 -p "enter a name: " name
腳本:添加使用者
<code>[root</code><code>@mt</code> <code>test]</code><code># cat adduser.sh </code>
<code>#!/bin/bash</code>
<code>#</code>
<code>read -p </code><code>"Enter a username : "</code> <code>name</code>
<code>[ -z </code><code>$name</code> <code>] && echo </code><code>"username is needed ..."</code> <code>&& exit 2</code>
<code>read -p </code><code>"Enter a password for $name "</code> <code>passwd</code>
<code>[ -z </code><code>$passwd</code> <code>] && password=</code><code>"password"</code>
<code>if</code> <code>id </code><code>$name</code> <code>&> /dev/null ;then</code>
<code> </code><code>echo </code><code>"$name is exists."</code>
<code>else</code>
<code> </code><code>useradd </code><code>$name</code>
<code> </code><code>echo </code><code>"$password"</code> <code>| passwd --stdin </code><code>$name</code> <code>&> /dev/null</code>
<code> </code><code>echo </code><code>"useradd succeed.."</code>
<code>fi</code>
3.bash -n a.sh //文法錯誤,不能報告邏輯錯誤
bash -x a.sh //調試執行
二、bash選擇執行(if)
過程式程式設計語言的執行流程:
選擇執行
順序執行
循環執行
選擇執行:
&& ,||
if語句
case 語句
if語句:三種格式
單分支的if語句
if CONDITION;then
if-true 分支;
fi
雙分支的if語句
if CONDITION ;then
if-true分支
else
if-false 分支
多分支的if語句
if CONDITION1;then
條件1 為真分支
elif CONDITION2;then
條件2;為真分支
elif CONDITION3;then
條件3;為真分支
...
所有條件都不滿足時的分支
注意:分支隻會執行一個,首先測試為真;
多個條件同時都能滿足,隻執行第一個比對到的
腳本1-3位if語句
三、循環執行
//将一段代碼重複執行0,1多次
進入條件:滿足條件才進入循環
退出條件:每個循環都有退出條件,
bash腳本:
for循環
while循環
until循環
for循環
兩種格式:
(1)周遊清單
(2)控制變量
周遊清單:
for VARIABLE in LIST; do
循環體
done
進入條件:隻要清單有元素,即可進入循環
退出條件:清單中的元素周遊完成
LIST的生成方式
(1)直接給出
(2)整數清單
{start..end} / echo {20..30}
seq 10 //1-10
seq 5 10 //從5到10
seq 1 2 10 //步數為2,隻輸出奇數清單
(3)cat/ls /var :傳回清單的指令
cat /etc/issue
(4) ls -d /etc/p*
for i in /etc/p* 就可以
(5) 變量引用
$@,$# 等
腳本1:腳本傳遞一個檔案名,判斷檔案類型是什麼
<code> </code><code>#!/bin/bash</code>
<code> </code><code>#</code>
<code> </code><code>if</code> <code>[ $</code><code># -lt 1 ] ;then</code>
<code> </code><code>echo </code><code>"At lease one path.."</code>
<code> </code><code>exit 1</code>
<code> </code><code>fi</code>
<code> </code><code>if</code> <code>! [ -e </code><code>$1</code> <code>] ;then //假如不存在</code>
<code> </code><code>echo </code><code>"No suck file.."</code>
<code> </code><code>exit 2</code>
<code> </code>
<code> </code><code>if</code> <code>[ </code><code>-f</code> <code>$1</code> <code>] ;then</code>
<code> </code><code>echo </code><code>"Common file.."</code>
<code> </code><code>elif [ -d </code><code>$1</code> <code>] ; then</code>
<code> </code><code>echo </code><code>"Directory.."</code>
<code> </code><code>elif [ -L </code><code>$1</code> <code>] ; then</code>
<code> </code><code>echo </code><code>"Symbolic file..."</code>
<code> </code><code>elif [ -b </code><code>$1</code> <code>] ;then</code>
<code> </code><code>echo </code><code>"block file..."</code>
<code> </code><code>elif [ -c </code><code>$1</code> <code>] ; then</code>
<code> </code><code>echo </code><code>"Character file..."</code>
<code> </code><code>elif [ -S </code><code>$1</code> <code>]; then</code>
<code> </code><code>echo </code><code>"Socket file..."</code>
<code> </code><code>else</code>
<code> </code><code>echo </code><code>"Unknown ... "</code>
腳本2:傳遞一個參數給腳本,此參數為使用者名
根據其id号判斷其用于類型
0:root
1-999:系統使用者
1000+:登入使用者
<code> </code><code>[ $</code><code># -lt 1 ] && echo "At least one user name." && exit 1</code>
<code> </code><code>! id -u </code><code>$1</code> <code>&> /dev/null && echo </code><code>"no suck user"</code> <code>&& exit 2</code>
<code> </code><code>userid=$(id -u </code><code>$1</code><code>)</code>
<code> </code><code>if</code> <code>[ </code><code>$userid</code> <code>-eq</code> <code>0 ] ;then</code>
<code> </code><code>echo </code><code>"root"</code>
<code> </code><code>elif [ </code><code>$userid</code> <code>-ge</code> <code>1000 ] ;then</code>
<code> </code><code>echo </code><code>"logging user."</code>
<code> </code><code>else</code>
<code> </code><code>echo </code><code>"System user."</code>
腳本3:列出如下菜單為使用者
disk)show disks info
mem)show memory info;
cpu)show cpu info
cat /proc/meminfo或者lscpu
*) quit
提示使用者給出自己的選擇,而後顯示對應其選擇的相應系統資訊
<code> </code><code>cat 《《 EOF</code>
<code> </code><code>disk) show disks info</code>
<code> </code><code>mem) show memory info;</code>
<code> </code><code>cpu) show cpu info</code>
<code> </code><code>*) quit</code>
<code> </code><code>EOF</code>
<code> </code><code>read -p </code><code>"Your choice: "</code> <code>opt</code>
<code> </code><code>if</code> <code>[ </code><code>"$opt"</code> <code>== </code><code>'disk'</code> <code>] ;then </code>
<code> </code><code>fdisk -l /dev/sd[a-z]</code>
<code> </code><code>elif [ </code><code>"$opt"</code> <code>== </code><code>'mem'</code> <code>] ;then</code>
<code> </code><code>free -h</code>
<code> </code><code>elif [ </code><code>"$opt"</code> <code>== </code><code>'cpu'</code> <code>] ;then</code>
<code> </code><code>lscpu</code>
<code> </code><code>echo </code><code>"Unknown option.."</code>
<code> </code><code>exit 3</code>
腳本4:添加使用者
#!/bin/bash
#
for i in user20 user21 user22 ;do
if id $i &> /dev/null ; then
echo "$i exists.."
else
useradd $i && echo "Add user $i succeed"
fi
done
腳本5:從1-100的和
<code> </code><code>declare -i sum=0</code>
<code> </code><code>for</code> <code>i </code><code>in</code> <code>{1..100};</code><code>do</code>
<code> </code><code>sum=$[</code><code>$sum</code> <code>+ </code><code>$i</code><code>] </code>
<code> </code><code>echo </code><code>"\$sum is $sum"</code> <code>// 可以對$進行轉義</code>
<code> </code><code>done</code>
<code> </code><code>echo </code><code>$sum</code>
腳本6:判斷/var/log下所有檔案的類型
方法1:file /var/log/*
方法2:腳本
<code> </code><code>#!/bin/bash</code>
<code> </code><code>for</code> <code>filename </code><code>in</code> <code>/</code><code>var</code><code>/</code><code>log</code><code>/</code><code>*</code> <code>; do</code>
<code> </code><code>echo </code><code>-</code><code>n </code><code>"$filename "</code>
<code> </code><code>if</code> <code>[ </code><code>-</code><code>f $filename ] ;then</code>
<code> </code><code>elif</code> <code>[ </code><code>-</code><code>d $filename ] ; then</code>
<code> </code><code>elif</code> <code>[ </code><code>-</code><code>L $filename ] ; then</code>
<code> </code><code>elif</code> <code>[ </code><code>-</code><code>b $filename ] ;then</code>
<code> </code><code>elif</code> <code>[ </code><code>-</code><code>c $filename ] ; then</code>
<code> </code><code>elif</code> <code>[ </code><code>-</code><code>S $filename ]; then</code>
腳本7:練習
1.分别求100以内所有偶數之和,以及奇數之和
2.計算目前系統上的所有使用者的id之和
3.通過腳本參數傳遞一個目錄給腳本,而後計算此目錄下所有檔案檔案的行數,并說明此類檔案的總數
本文轉自MT_IT51CTO部落格,原文連結:http://blog.51cto.com/hmtk520/1950192,如需轉載請自行聯系原作者