5. 引號
在向程式傳遞任何引數之前,程式會擴充套件萬用字元和變數。這裡所謂擴充套件的意思是程式會把萬用字元
(比如*)替換成合適的檔名,它變數替換成變數值。為了防 止程式作這種替換,您可以使用
引號:讓我們來看乙個例子,假設在當前目錄下有一些檔案,兩個jpg檔案, mail.jpg 和tux.jpg。
1.2 編譯shell指令碼
#ch#!/bin/sh mod +x filename
cho *.jpg ∪緩螅梢醞ü淙耄?./filename 來執行您的指令碼。
這將列印出"mail.jpg tux.jpg"的結果。
引號 (單引號和雙引號) 將防止這種萬用字元擴充套件:
這將列印"*.jpg" 兩次。
單引號更嚴格一些。它可以防止任何變數擴充套件。雙引號可以防止萬用字元擴充套件但允許變數擴充套件。
#!/bin/sh
echo $shell
echo "$shell"
echo '$shell'
執行結果為:
/bin/bash
/bin/bash
$shell
最後,還有一種防止這種擴充套件的方法,那就是使用轉義字元——反斜桿:
這將輸出:
當要將幾行文字傳遞給乙個命令時,here documents(譯者注:目前還沒有見到過對該詞適合的翻譯)
一種不錯的方法。對每個指令碼寫一段幫助性的文字是很有用的,此時如果我們四有那個 here documents
就不必用echo函式一行行輸出。 乙個 "here document" 以 shift by 2
--) shift;break;; # end of options
-*) echo "error: no such option $1. -h for help";exit 1;;
*) break;;
esac
done
echo "opt_f is $opt_f"
echo "opt_l is $opt_l"
echo "first arg is $1"
echo "2nd arg is $2"
您可以這樣執行該指令碼:
cmdparser -l hello -f -- -somefile1 somefile2
返回的結果是:
opt_f is 1
opt_l is hello
first arg is -somefile1
2nd arg is somefile2
這個指令碼是如何工作的呢?指令碼首先在所有輸入命令列引數中進行迴圈,將輸入引數
與case表示式進行比較,如果匹配則設定乙個變數並且移除該引數。根據unix系統的慣例,
首先輸入的應該是包含減號的引數.
第2部分 例項
現在我們來討論編寫乙個指令碼的一般步驟。任何優秀的指令碼都應該具有幫助和輸入引數。並且寫乙個偽指令碼(framework.sh),該指令碼包含了大多數指令碼都需要的框架結構,是乙個非常不錯的主意。這時候,在寫乙個新的指令碼時我們只需要執行一下copy命令:
cp framework.sh myscript
然後再插入自己的函式。
Linux shell指令碼全面學習 一
1.linux 指令碼編寫基礎 1.1 語法基本介紹 1.1.1 開頭 程式必須以下面的行開始 必須方在檔案的第一行 bin sh 符號 用來告訴系統它後面的引數是用來執行該檔案的程式。在這個例子中我們使用 bin sh來執行程式。當編輯好指令碼時,如果要執行該指令碼,還必須使其可執行。要使指令碼可...
Linux Shell指令碼基礎
shell指令碼在處理自動迴圈或大的任務方面可節省大量時間,且功能強大。任何指令碼都可能有注釋,加注釋需要此行的第乙個字元為 直譯器對此行不予解釋。指令碼不是複雜的程式,它是按行解釋的。指令碼第一行總是以 bin sh開始,這段指令碼通知shell使用系統上的 bourne shell直譯器。指令碼...
linux shell指令碼犯錯
指令碼裡犯了錯 oracle it shell value 1 oracle it shell value 1 bash value command not found oracle it shell value 3 bash value command not found oracle it sh...