Linux shell指令碼全面學習4

2021-08-31 02:45:27 字數 1707 閱讀 3434

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...