bash——Bourn Again Shell 是一種解釋器解釋執行的腳本語言,也可以實作程式設計功能。
bash變量類型:
本地變量:隻對目前shell有效
局部變量:local variable 僅對局部代碼有效
環境變量:export variable 對目前shell及其子shell有效
位置變量:$1,$2,$3
特殊變量:$#,$!,$?,$@
指定變量類型:declare
declare -i variable:聲明一個整型變量
declare -x variable:聲明一個環境變量
declare -a variable:聲明一個數組
語言控制結構:
1、順序結構
2、選擇執行
3、循環執行
bash的for循環:
for variable in Element list ;do
sentence one
sentence two
......
done
例1:寫一個腳本使用for建立10個使用者user1..user10,并為它們設定密碼。
<a href="http://s3.51cto.com/wyfs02/M00/25/C8/wKioL1Nm5wGDIg9KAACPHLkZcdc486.jpg" target="_blank"></a>
例2:寫一個腳本,使用for循環,複制/etc/fstab、/etc/inittab、/etc/rc.d/init.d/functions檔案至/tmp目錄中,并重命名為原有的名稱之後加目前的日期。
<a href="http://s3.51cto.com/wyfs02/M00/25/C8/wKiom1Nm6p_SP5frAACqxF53o5A107.jpg" target="_blank"></a>
如何在shell腳本中進行算術運算:
寫一個腳本,計算100以内所有整數的和。
<a href="http://s3.51cto.com/wyfs02/M01/25/CE/wKioL1Nm7hmTBkDpAABp7qfYTU4098.jpg" target="_blank"></a>
判斷:
if 條件;then
.....
else
.....
fi
例1:讓使用者輸入一個使用者,如果其ID号大于499就說明是普通使用者,否則就說明是管理者或系統使用者。
<a href="http://s3.51cto.com/wyfs02/M02/25/CF/wKioL1Nm-aiTvaBtAADDbZjRn54714.jpg" target="_blank"></a>
例2:寫一個腳本,其可以接受三個參數,最後一個參數為檔案名,但參數可變化,形如:
script.sh -a tuchao /tuchao/test1.sh
script.sh -b 2013-07-19 /tuchao/test1.sh
script.sh -c 'some infomation' /tuchao/test1.sh
此腳本能夠建立/magedu.com/scripts/test1.sh檔案,并且,如果給出了-a MageEdu,則檔案前兩行為:
#!/bin/bash
# Author: MageEdu
如果給出了-d 2013-07-19,則檔案前兩行為:
# Date: 2013-07-19
如果給出了-D "some infomation",則檔案前兩行為:
# Description: some infomation
其它任何參數,均提示錯誤并退出;
如果沒有退出,則使用vim打開此檔案,并使用光标預設處于最後一行;
儲存退出後,如果檔案有文法錯誤提示使用者有錯誤;
如果沒有文法錯誤,則給些檔案賦予執行權限;
<a href="http://s3.51cto.com/wyfs02/M00/25/D0/wKioL1NnCoyS2sGJAAGKzkbfH_g723.jpg" target="_blank"></a>
bash程式設計之case:
case variable in
value1 )
;;
value2)
value3)
* )
esac
例:寫一個腳本:可以接受一個參數,其使用形式如下:
sevtest.sh {start|stop|restart|status}
如果參數為start,且/var/lock/subsys/sevtest檔案不存在,則建立空檔案/var/lock/subsys/sevtest,并顯示“Starting Server successfully.”;否則,顯示“Server is already running.”
如果參數為stop,且/var/lock/subsys/sevtest檔案存在,則删除檔案/var/lock/subsys/sevtest,并顯示“Stop Server finished.”;否則,顯示“Server is stopped yet.”
如果參數為restart,則删除檔案/var/lock/subsys/sevtest後重新建立,并顯示“Restarting Server successfully.”;
如果參數為status,那麼:
如果/var/lock/subsys/Server檔案存在,則顯示為“Server is running.”
否則,則顯示為“Server is stopped.”
其它任何參數:則顯示“sevtest.sh {start|stop|restart|status}”
<a href="http://s3.51cto.com/wyfs02/M01/25/D1/wKiom1NnIUyT_KZnAAMIYJ__fZ8121.jpg" target="_blank"></a>
再來一個例子?
例2:寫一個腳本(前提:請為虛拟機新增一塊硬碟,假設它為/dev/sdb),為指定的硬碟建立分區:
1、列出目前系統上所有的磁盤,讓使用者選擇,如果選擇quit則退出腳本;如果使用者選擇錯誤,就讓使用者重新選擇;
2、當使用者選擇後,提醒使用者确認接下來的操作可能會損壞資料,并請使用者确認;如果使用者選擇y就繼續,n就退出;否則,讓使用者重新選擇;
3、抹除那塊硬碟上的所有分區(提示,抹除所有分區後執行sync指令,并讓腳本睡眠3秒鐘後再分區);并為其建立三個主分區,第一個為20M,第二個為512M, 第三個為128M,且第三個為swap分區類型;
<a href="http://s3.51cto.com/wyfs02/M02/26/00/wKioL1Nosu6hSz4PAANeG58syGM769.jpg" target="_blank"></a>
bash程式設計之函數,結構化程式設計:
寫一個腳本,完成以下功能:
說明:此腳本能于同一個repo檔案中建立多個Yum源的指向;
1、接受一個檔案名做為參數,此檔案存放至/etc/yum.repos.d目錄中,且檔案名以.repo為字尾;要求,此檔案不能事先存,否則,報錯;
2、在腳本中,提醒使用者輸入repo id;如果為quit,則退出腳本;否則,繼續完成下面的步驟;
3、repo name以及baseurl的路徑,而後以repo檔案的格式将其儲存至指定的檔案中;
4、enabled預設為1,而gpgcheck預設設定為0;
5、此腳本會循環執行多次,除非使用者為repo id指定為quit;
<a href="http://s3.51cto.com/wyfs02/M00/26/00/wKioL1Nos2_g8ojfAAKySINADZM174.jpg" target="_blank"></a>
終于寫完了,bash的内容有點多。 以上代碼都是小菜手寫測試截圖。
有問題歡迎與我交流QQ:1183710107
本文轉自qw87112 51CTO部落格,原文連結:http://blog.51cto.com/tchuairen/1406577