當前位置:編程學習大全網 - 編程語言 - 第14章:處理用戶輸入

第14章:處理用戶輸入

[目錄]

向shell腳本傳遞數據的最基本方法是使用命令行參數。命令行參數允許您在運行腳本時向命令行添加數據。

Bash shell會將壹些稱為positional parameter的特殊變量分配給命令行中輸入的所有參數。這還包括shell執行的腳本的名稱。position參數變量是壹個標準數:1是第壹個參數,9。

您可以使用$0參數來獲取shell在命令行上啟動的腳本的名稱。

這裏有壹個潛在的問題。如果使用另壹個命令來運行shell腳本,該命令將與腳本名稱混合在壹起。當0變量的實際字符串不僅僅是腳本名稱,而是完整的腳本路徑時,變量$0將使用完整的路徑。使用basename命令可以解決上述問題。

bash shell中有壹些記錄命令行參數的特殊變量。

Bash shell提供了壹個特殊的變量$ #來指示腳本運行時所攜帶的命令行參數的數量。您可以在腳本中的任何地方使用這個特殊變量,就像普通變量壹樣。

有時,您需要獲取命令行中提供的所有參數。@可用於訪問所有參數。這兩個變量都可以將所有命令行參數存儲在壹個變量中。

*變量將把這些參數視為壹個整體,而不是多個個體。

$@變量將命令行上提供的所有參數視為同壹字符串中的多個獨立單詞。這樣就可以遍歷所有的參數值,得到每個參數。

@變量分別處理每個參數。

Bash shell提供了命令行參數,shift命令可以使用這些參數進行操作。shift命令根據命令行參數的相對位置來移動它們。使用shift命令時,默認情況下,它會將每個參數變量向左移動壹個位置。所以在變量2中,在變量1中,而變量0的值,也就是程序名,是不會變的)。

該腳本通過測試第壹個參數值的長度來執行while循環。當第壹個參數的長度為零時,循環結束。測試完第壹個參數後,shift命令會將所有參數的位置移動壹個位置。

選項是單個字母後跟單個虛線,它可以改變命令的行為。Bash shell提供了幾種處理選項的方法。

從表面上看,命令行選擇沒什麽特別的。在命令行上,它們遵循腳本,就像命令行參數壹樣。事實上,您可以像處理命令行參數壹樣處理命令行選項。

case語句檢查每個參數是否是有效選項。如果是這樣,請在相應的case語句中運行該命令。

在Linux中,選項和參數用壹個特殊的字符(-)分開,這個字符告訴腳本什麽時候選項結束,什麽時候普通參數開始。shell將使用雙折線來表示選項列表的結尾。在雙折線之後,腳本可以安全地將剩余的命令行參數視為參數而不是選項。

當遇到雙折線時,腳本使用break命令跳出while循環。因為我們過早地跳出了循環,所以我們需要添加另壹個shift命令來將虛線移出參數變量。

對於第壹個測試,嘗試使用壹組通用的選項和參數運行這個腳本。

結果顯示,腳本在處理時認為所有命令行參數都是選項。接下來,使用雙折線來分隔命令行上的選項和參數。

當腳本遇到雙折線時,它會停止處理選項,並將剩余的參數視為命令行參數。

壹些選項帶有額外的參數值。在這種情況下,命令行如下所示。

當命令行選項需要額外的參數時,腳本必須能夠正確地檢測和處理它們。

在處理命令行選項和參數時,getopt命令是壹個非常方便的工具。它可以識別命令行參數,這使得在腳本中解析它們變得更加容易。

getopt命令可以接受壹系列任意的命令行選項和參數,並自動將它們轉換成適當的格式。其命令格式如下:

Optstring是這個過程的關鍵。它定義了命令行上的有效選項字母,還定義了哪些選項字母需要參數值。首先,在optstring中列出您希望在腳本中使用的每個命令行選項字母。然後,在每個需要參數值的選項字母後添加壹個冒號。getopt命令根據您定義的optstring解析提供的參數。

Optstring定義了四個有效的選項字母:a、b、c和d。冒號(:)放在字母b之後,因為b選項需要壹個參數值。當getopt命令運行時,它檢查所提供的參數列表,並根據所提供的optstring對其進行解析。請註意,它會自動將-cd選項分成兩個單獨的選項,並插入壹條雙折線來分隔該行中的額外參數。

您可以在腳本中使用getopt來格式化腳本攜帶的任何命令行選項或參數,但是使用起來稍微復雜壹些。方法是用getopt命令生成的格式化版本替換現有的命令行選項和參數。您可以使用set命令來完成此操作。set命令的選項之壹是雙折線(-),它用set命令的命令行值替換命令行參數。然後,這個方法會將原腳本的命令行參數傳遞給getopt命令,然後將getopt命令的輸出傳遞給set命令,用getopt格式化的命令行參數替換原命令行參數,看起來如下:

現在原來的命令行參數變量的值將被getopt命令的輸出所替換,getopt已經為我們格式化了命令行參數。

與getopt不同,前者只在命令行上處理完選項和參數後生成輸出,而getopts命令壹次只處理命令行上檢測到的壹個參數。處理完所有參數後,它將退出並返回壹個大於0的退出狀態代碼。getopts命令具有以下格式:

optstring值類似於getopt命令中的值。optstring中列出了有效的選項字母。如果選項字母需要參數值,請添加冒號。要刪除錯誤信息,可以在optstring前添加壹個冒號。getopts命令將當前參數保存在命令行定義的變量中。

getopts命令使用兩個環境變量。如果選項後面需要壹個參數值,OPTARG環境變量將保存這個值。OPTIND環境變量保存getopts正在參數列表中處理的參數的位置。

getopts命令知道何時停止處理選項,並將參數留給您。當getopts處理每個選項時,它會將OPTIND環境變量的值遞增1。當getopts完成處理後,可以使用shift命令和OPTIND值來移動參數。

當您創建壹個shell腳本時,您顯然可以控制如何去做。您可以決定使用哪些字母選項以及如何使用它們。然而,壹些字母選項在Linux世界中有壹些標準含義。

盡管命令行選項和參數是從腳本用戶那裏獲得輸入的重要方式,但有時腳本需要更強的交互性。Bash shell提供read命令,實現強交互的命令輸入。

read命令接受來自標準輸入(鍵盤)或另壹個文件描述符的輸入。收到輸入後,read命令會將數據放入壹個變量中。

echo命令使用-n選項。此選項不在字符串末尾輸出換行符,允許腳本用戶在它之後立即輸入數據,而不是下壹行。

當使用read命令時,腳本可能會等待腳本用戶的輸入。如果不管是否有數據輸入,腳本都必須繼續執行,那麽可以使用-t選項來指定壹個計時器。t選項指定read命令等待輸入的秒數。當計數器到期時,讀取命令將返回非零退出狀態代碼。

read命令包含-p選項,該選項允許您直接在read命令行上指定提示符。

有時候妳需要從腳本用戶那裏獲得輸入,但是在屏幕上顯示輸入信息。典型的例子是輸入密碼,但是還有許多其他數據類型需要隱藏。-s選項可以防止read命令中輸入的數據出現在顯示器上(實際上,數據會顯示出來,但read命令會將文本顏色設置為與背景顏色相同)。

在輸入提示符下輸入的數據不會出現在屏幕上,但會被分配給腳本中使用的變量。

最後,您還可以使用read命令在Linux系統上讀取保存在文件中的數據。每次調用read命令時,它都會從文件中讀取壹行文本。當文件中沒有更多的內容時,read命令將退出並返回壹個非零退出狀態代碼。最難的部分是將文件中的數據傳遞給read命令。最常見的方法是對文件使用cat命令,並通過管道將結果直接發送給帶有read命令的while命令。

while循環繼續通過read命令處理文件中的行,直到read命令以非零退出狀態代碼退出。

  • 上一篇:我的姐姐爆紅,4歲的弟弟太敬業了,他的家庭也是常人高攀不起的
  • 下一篇:圓內接四邊形的性質
  • copyright 2024編程學習大全網