Shell腳本自己是一個文本文件,這裏編寫一個簡單的程序,在屏幕上顯示一行helloworld!bash
腳本內容以下:函數
#!/bin/bash #顯示「Hello world!" echo "hello world!"
運行命令和結果以下:測試
編寫Shell程序首先要了解Shell腳本的基本構成。下面爲一個複雜一些的腳本示例,用於顯示當前日期時間、執行路徑、用戶帳戶及所在的目錄位置。spa
#!/bin/bash
#這是一個測試腳本
echo -n "當前時間和日期"
date
echo -n "程序執行路徑:" $PACH
echo "當前用戶名: `whoami`"
echo -n "當前路徑:"
pwd
#end 命令行
運行結果調試
一般,在第一行以「#」開頭指定Shell腳本的運行環境,即聲明該腳本使用哪一個Shell程序運行。Linux中一般的Shell腳本解釋器有bash、sh、csh、ksh等,其中bash是Linux默認的Shell。code
以#開頭的行爲註釋行,Shell在執行時會忽略"#"以後的全部內容。blog
echo命令用來顯示提示信息,參數-n表示在顯示信息時不自動換行。不加該參數,默認會在命令最後自動加上一個換行符以實現自動換行。字符串
whoami字符串的左右的反引號(`)用於命令替換,也就是將他所括起來字符串視爲命令執行,並將其輸出的字符串在原地展開。class
像其餘語言同樣,Shell也能夠包含外部腳本,將外部腳本的內容合併到當前腳本。包含外部腳本文件的用法以下:
. 腳本文件名
或者
source 腳本文件名
這裏將第二個腳本合併到第一個腳本中,即爲
#!/bin/bash #顯示「Hello world!" echo "hello world!" . example1
運行結果以下
執行Shell腳本有三種方式:
將Shell腳本的權限設置爲可執行,而後在命令行提示符下直接執行它就如咱們以前示例裏的同樣。
須要注意的是,直接百年祭生成的腳本文件是沒有執行權限的,若是要將Shell腳本直接看成命令執行,須要使用chmod命令將其設置爲具備權限執行。
chmod +x example
這裏值得注意的是,若是包含外部腳本,被包含的腳本並不須要有執行權限。另外在圖形界面中也可以使用文件管理器來設置權限,容許腳本做爲程序執行文件。
若是想像命令行那樣直接輸入腳本文件名,還須要讓腳本所在的目錄被包含在環境變量PATH 所定義的命令搜索路徑中,不然就要明確指定腳本文件的路徑,執行命令echo $PATH可查詢當前的搜索路徑(一般爲/bin、/sbin、/usr/bin、/usr/sbin)。若是放置Shell腳本文件的目錄不在當前的搜索路徑中,能夠將這個目錄追加到搜索路徑中。
能夠在指定的Shell下執行腳本,以腳本名做爲參數。基本用法以下:
Shell 名稱 腳步名
這種運行方式是直接運行Shell解釋器,其參數就是Shell腳本的文件名,如:
sh hello
運行結果爲:
從運行結果能夠看出這種方式沒法在腳本中調用外部腳本。
不過顯然這種方式運行的腳本沒必要在第一行指定Shell解釋器,即便指定了,也會忽略。並且因爲是經過解釋器來執行的,就不須要腳本文件具有執行權限。
這種方式還能在腳本名後面帶有參數,從而將參數值傳遞給程序中的命令,使一個Shell腳本能夠處理多種狀況,就如同函數調用時可根據具體問題給定相應的實參。因此這種方法多用來進行腳本調試。
還能夠將輸入重定向到Shell腳本。讓Shell從指定文件中讀入命令行,並進行相應處理,其通常形式爲:
bash < 腳本名
例如
bash < example1表示Shell腳本從文件example1中讀取命令,並執行他們。
經過對Shell腳本的調試,能夠查找和消除錯誤。在bash中,Shell腳本的調試主要是利用bash命令解釋程序的選項來實現。其格式以下:
bash [選項] 腳本名
其中,主要利用bash命令解釋程序的-V或-x選項來跟蹤程序的執行。例如:
或
一般,-v選項容許用戶查看Shell程序的讀入和執行。若是在讀入命令行時發生錯誤,則終止程序的執行。每一個命令行被讀入後,Shell按讀入時的形式顯示出該命令行,而後執行命令行。而-x選項也容許用戶查看Shell程序的執行,但它是在命令行執行前完成全部的替換後,才顯示出每個被替換後的命令行,而且在行前加前綴符號「+」(變量賦值語句不加"+"符號),而後執行命令。
二者的主要區別在於:使用-v選項,會打印出命令行的原始內容;使用-x選項,打印出通過替換後的命令行的內容。這兩個選項也能夠在Shell腳本內部用「set -選項」的形式引出,用"set +選項"禁止該選項起做用。若是隻想對程序的某一部分進行調試,則能夠將該部分用上面兩個語句單獨劃出來。