Shell 腳本基礎——編寫運行

編寫:
shell 腳本其實就是純文字文件 (ASCII) ,我們可以編輯這個檔案, 然後讓這個檔案來幫我們一次執行多個指令,或者是利用一些運算與邏輯判斷來幫我們達成某些功能。在 shell 腳本的撰寫同樣需要用到這些注意事項的:
1. 指令與參數間的多個空白會被忽略掉
2. 空白行與製表符也將被忽略掉
3. 如果讀取到一個 Enter 符號 ( CR ),就嘗試開始執行該行命令;
4. 至於如果一行的內容太多,則可以使用 \ 來延伸至下一行;
5. 任何加在 # 後面的字,將全部被視爲批註文字而被忽略!
執行:
如此一來,我們在 script 內所撰寫的程序,就會被從左到右從上到下一行一行的執行。好了,那麼這個程序假設文件名是 shell.sh 好了,如何執行這個腳本?很簡單,可以有底下幾個方法:
1.將 shell.sh 加上可讀與執行 (rx) 的權限,然後就能夠以 ./shell.sh 來執行了;
2.直接以 sh shell.sh 的方式來直接執行即可。
反正重點就是要讓那個 shell.sh 內的指令可以被執行的意思啦!那我爲何需要使用 ./shell.sh 來下達指令? 還記得我們在 bash 裏面一直強調的,指令是否能夠被執行與 PATH 這個環境變量有關, 所以,要執行當前目錄下的文件就需要加上 ./ 這個目錄啦!另外,其實您也可以將 shell.sh 放在您家目錄下的 ~/bin 這個目錄中,然後利用 PATH="$PATH":~/bin 的設定, 就能夠直接執行您的腳本,執行命令:  shell.sh
爲何 sh shell.sh 也可以執行呢?這是因爲 /bin/sh 其實就是 /bin/bash , 使用 sh shell.sh 亦即告訴系統,我想要直接以 bash 的功能來執行 shell.sh 這個檔案內的相關指令的意思。 而我們也可以利用 sh 的參數,如 -n 及 -x 來檢查與追蹤 shell.sh 的語法是否正確呢!




腳本實例:
[root@linux ~]# mkdir scripts; cd scripts
[root@linux scripts]# vi sh01.sh
#!/bin/bash
# Program:
# This program is used to show "Hello World !" in screen.
# History:
# 2005/08/23 VBird First release
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
echo -e "Hello World ! \a \n"
exit 0


將所有的撰寫的 script 放置到您家目錄的 ~/scripts 這個目錄內, 比較好管理啦!上面的寫法當中,我主要將整個程序的撰寫分成數段,大致是這樣:
1. 第一行 #!/bin/bash 在宣告這個 script 使用的 shell 名稱: 因爲我們使用的是 bash ,所以,必須要以『 #!/bin/bash 』來宣告這個檔案內的語法使用 bash 的語法!那麼當這個程序被執行時,他就能夠加載 bash 的相關環境設定檔, 並且執行 bash 來使我們底下的指令能夠執行!這很重要的!(在很多狀況中,如果沒有設定好這一行, 那麼該程序很可能會無法執行,因爲系統可能無法判斷該程序需要使用什麼 shell 來執行啊!)
2. 程序內容的宣告: 整個 script 當中,除了第一行的 #! 是用來宣告 shell 的之外,其它的 # 都是『批註』用途! 所以上面的程序當中,第二行以下就是用來說明整個程序的狀態。一般來說, 建議您一定要養成說明該 script 的:1. 內容與功能; 2. 版本信息; 3. 作者與聯絡方式; 4. 建檔日期;5. 歷史紀錄 等等。這將有助於未來程序的改寫與 debug 呢!
3. 主要環境變量的宣告: 建議務必要將一些重要的環境變量設定好,如此一來,則可讓我們這支程序在進行時,可以直接下達指令, 而不必寫絕對路徑呢!比較好啦,且環境變量只在當前shell生效,不影響系統shell
4. 主要程序部分 就將主要的程序寫好即可!在這個例子當中,就是 echo 那一行啦!
5. 執行成果告知 是否記得我們在 bash 裏面要討論一個指令的執行成功與否,可以使用 $? 這個變量來觀察~ 那麼我們也可以利用 exit 這個指令來讓程序中斷,並且回傳一個數值給系統。 在我們這個例子當中,我使用 exit 0 ,這代表離開 script ,並且回傳一個 0 給系統, 所以我執行完這個 script後,若接着下達 echo $? 則可得到 0 的值喔! 更聰明的讀者應該也知道了,呵呵!利用這個 exit n 的功能,我們還可以自訂錯誤訊息, 讓這支程序變得更加的 smart 呢!


接下來執行看看結果是怎樣吧?
[root@linux scripts]# sh sh01.sh
Hello World !


您會看到屏幕是這樣,而且應該還會聽到『咚』的一聲,爲什麼呢?還記得前一章提到的 printf 吧?用 echo 接着那些特殊的按鍵也可以發生同樣的事情~ 不過, echo 必須要加上 -e 的參數才行! 另外,你也可以利用:『chmod a+x sh01.sh; ./sh01.sh』來執行這個 script 的呢!

以上摘自鳥哥經典,有少量修改

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章