1. 程式人生 > >第4章 處理使用者輸入與顯示資料------------(getopt命令)

第4章 處理使用者輸入與顯示資料------------(getopt命令)

4.2.3 使用getopt命令

         getopt命令是個不錯的工具,在處理命令列選項和引數時非常方便。它對命令列引數進行重現組織,使其更便於在指令碼中解析。

1.命令格式

         getopt命令可以接受任意形式的命令列選項和引數列表,並自動將這些選項和引數轉換為適當的格式。命令格式如下:getopt options optstringparameters。選項字串(optstring)是處理的關鍵。它定義命令列中的有效選項字母。它還定義那些選項字母需要的引數值。

         首先,在選項字串中列出將在指令碼中用到的每個命令列選項字母。然後,在每個需要引數值的選項字母后面放置一個冒號。

getopt命令根據定義的選項字串解析提供的引數。

        

         其中的選項字串定義了四個有效選項字母,a、b、c和d。還定義選項字母需要一個引數值。當執行getopt命令時,會檢測提供的引數列表,然後基於提供的選項字串對列表進行解析。注意,解析時自動將-cd選項分隔成兩個不同的選項,並插入雙破折號來分隔行中的額外引數。

         如果指定的選項不包含在選項字串,getopt命令會預設生成一個錯誤訊息。如果想忽略這個錯誤訊息,可以在命令中使用-q選項。注意,getopt命令選項必須列在選項字串前面。現在就可以在指令碼中使用這個命令來處理命令列選項。

       

2.在指令碼中使用getopt

         可以在指令碼中使用getopt命令格式化為指令碼輸入的任意命令列選項或引數。這裡使用一點小技巧。這個小技巧是將現有的命令列選項和引數替換為getopt命令生成的格式化形式。方法是使用set命令。set命令可以處理shell中的各種變數set命令的一個選項是雙破折號,表示將命令列引數變數替換為set命令的命令列中的值。

         於是,這個技巧便是:將原始指令碼命令列引數送給getopt命令,然後將getopt命令的輸出送給set命令,以便將原始命令列引數替換為通過getopt格式化過的更精細的形式。如下所示:set  -- `getopt -q ab:c "

[email protected]"` 。現在原始的命令列引數變數就被替換成了getopt命令的輸出,getopt命令將命令列引數進行了格式化。           

#!/bin/bash
set -- `getopt -q hl:t:a "[email protected]"`
while [ -n "$1" ]
do
  case "$1" in
    -h) echo "Found the -h options";;
    -l) para="$2"
        echo "Found the -l options,with the parameter value $para"
        shift;;
    -a) echo "Found the -a options";;
    -t) para=$2
        echo "Found the -t options,with the parameter value $para"
        shift;;
    --) shift
        break;;
     *) echo "$1 is not options";;
  esac
  #所有命令列引數值左移一位
  shift
done

echo "輸出選項引數"
count=1
for para in [email protected]
do
   echo "引數#$1:$para"
   count=$[ $count+1 ]
done

getopt命令不能很好的處理帶有空格的引數值。它將空格解析為引數分隔符,而不是將雙引號引起來的兩個值合併為一個引數。

相關推薦

4 處理使用者輸入顯示資料------------(getopt命令)

4.2.3 使用getopt命令          getopt命令是個不錯的工具,在處理命令列選項和引數時非常方便。它對命令列引數進行重現組織,使其更便於在指令碼中解析。 1.命令格式          getopt命令可以接受任意形式的命令列選項和引數列表,並自動將這些

4 處理使用者輸入顯示資料------------(標準檔案描述符、STDIN/STDERR/STDOUT、臨時重定向、永久重定向exec)

4.4 顯示資料 4.4.1 標準檔案描述符          Linux系統將每個物件當作檔案處理。這包括輸入和輸出過程。Linux使用檔案描述符(file descriptor)標識每個檔案物件。檔案描述符是一個非負整數,可以唯一地標識會話中開啟的檔案。每個進行最多可以

redis實戰筆記(4)-4 數據安全性能保障

4.6 特殊 pac 命名 可用 lsp sentinel 樂觀鎖 個人開發 本章主要內容 4.1 將數據持久化至硬盤 4.2 將數據復制至其他機器 4.3 處理系統故障 4.4 Redis事務 4.5 非事務型流水線( non-transactional pipeline

4 ZK基本特性基於Linux的ZK客戶端命令列學習

ZK基本特性與基於Linux的ZK客戶端命令列學習 4-1 zookeeper常用命令列操作 4-2 session的基本原理與create命令的使用 4-3 set與delete命令的使用 4-4 zk特性 – 理解watcher機制 4-5

4 css文字text字型font-face

text-overflow 與 word-wrap text-overflow:用來設定是否使用一個省略標記(...)標示物件內文字的溢位。 語法: 但是text-overflow只是用來說明文字溢位時用什麼方式顯示,要實現溢位時產生省略號的效果,還須定義強制文字在一行內顯示(white-space:n

《瘋狂Java講義(4版)》-----4【流程控制陣列】

Java7增強後的switch語句 switch後的控制表示式只能是byte、short、char、int、列舉型別和java.lang.String型別。 char c = 'A'; switch(c){ case 'A': System.out.pri

易學筆記-go語言-4:基本結構和基本資料型別/4.4 變數/4.4.3 函式體內最簡單的變數初始化

函式體內最簡單的變數賦值 格式:  變數名 := 值 舉例: var goos string = os.Getenv("GOOS") fmt.Printf("The operating system is: %s\n", goos) //函式體內最

易學筆記-go語言-4:基本結構和基本資料型別/4.4 變數/4.4.2 宣告和賦值語句結合

宣告和賦值語句結合 格式:var identifier [type] = value 這裡的type是可選的,具體的型別參照: 第4章:基本結構和基本資料型別/4.2 Go 程式的基本結構和要素/4.2.8 型別 顯式型別舉例: //整型 var a&nbs

易學筆記-go語言-4:基本結構和基本資料型別/4.4 變數/4.4.4 函式體內並行初始化

函式體內並行賦值 在 第4章:基本結構和基本資料型別/4.4 變數/4.4.3 函式體內最簡單的變數賦值基礎上,多個變數同時賦值 舉例: 程式碼: a, b, c := 5, 10, "易學筆記"     fmt.Printf("a&n

易學筆記-Go語言-4:基本結構和基本資料型別/4.5 基本型別/4.5.2 整形

 整形 固定位元組數整形:與作業系統無關 int 和 uint 在 32 位作業系統上,它們均使用 32 位(4 個位元組),在 64 位作業系統上,它們均使用 64 位(8 個位元組)。 uintptr 存放指標 指定位元組

易學筆記-Go語言-4:基本結構和基本資料型別/4.5 基本型別/4.5.1 bool型別

 bool型別 關鍵字:bool,兩個結果:true 或者 false 何時回產生bool型別 ==:相等性筆記 !=:不相等性筆記 >、>=、<、<=:比較 可以進行的邏輯運算

易學筆記-Go語言-4:基本結構和基本資料型別/4.4 變數/4.4.7 變數的作用域

變數的作用域 變數的作用域有幾種: 包間變數:也是在函式外宣告的變數,而且第一個字母是大寫,所有本包函式或者包外函式都可見 全域性變數:在函式外宣告的變數,所有函式都可見 區域性變數:在本函式內部都可見 塊變數:僅僅在某個塊中可見,

4:基本結構和基本資料型別/4.2 Go 程式的基本結構和要素/4.2.5 可見性

易學筆記 十年IT經驗個人學習筆記分享: 開發語言:C/C++/JAVA/PYTHON/GO/JSP WEB架構:Servlets/springMVC/springBoot/springClound 容器架構:Docker容器/Docker叢集/Docker與微服務整合/

4:基本結構和基本資料型別/4.2 Go 程式的基本結構和要素/4.2.4 import:匯入包

易學筆記 十年IT經驗個人學習筆記分享: 開發語言:C/C++/JAVA/PYTHON/GO/JSP WEB架構:Servlets/springMVC/springBoot/springClound 容器架構:Docker容器/Docker叢集/Docker與微服務整合/

4:基本結構和基本資料型別/4.2 Go 程式的基本結構和要素/4.2.6 函式

易學筆記 十年IT經驗個人學習筆記分享: 開發語言:C/C++/JAVA/PYTHON/GO/JSP WEB架構:Servlets/springMVC/springBoot/springClound 容器架構:Docker容器/Docker叢集/Docker與微服務整合/

8 插入、更新刪除資料

8.1 插入資料 INSER INTO的各種插入法 8.2 更新資料 UPDATE可以更新表中的記錄。基本句法如下: UPDATE table_name SET column_name1=value1,column_name1=value2,... WHERE(condition);

易學筆記-Go語言-4:基本結構和基本資料型別/4.6 字串概述/4.6.1 字串表示

易學筆記 十年IT經驗個人學習筆記分享: 開發語言:C/C++/JAVA/PYTHON/GO/JSP WEB架構:Servlets/springMVC/springBoot/springClound 容器架構:Docker容器/Docker叢集/Docker與微服務整合/

易學筆記-Go語言-4:基本結構和基本資料型別/4.5 基本型別/4.5.6 位運算

易學筆記 十年IT經驗個人學習筆記分享: 開發語言:C/C++/JAVA/PYTHON/GO/JSP WEB架構:Servlets/springMVC/springBoot/springClound 容器架構:Docker容器/Docker叢集/Docker與微服務整合/

易學筆記-Go語言-4:基本結構和基本資料型別/4.5 基本型別/4.5.7 隨機數

易學筆記 十年IT經驗個人學習筆記分享: 開發語言:C/C++/JAVA/PYTHON/GO/JSP WEB架構:Servlets/springMVC/springBoot/springClound 容器架構:Docker容器/Docker叢集/Docker與微服務整合/

《影象處理、分析機器視覺》(4版)閱讀筆記—— 影象及其數學物理背景

3.1 概述 3.1.1 線性 向量(線性)空間(vector(linear) space) 3.1.2 狄拉克(Dirac)分佈和卷積 理想的衝擊是一個重要的輸入訊號,影象平面上的理想衝擊是用狄拉克分佈(Dirac distribution)定義的,。相當於訊號處理中的單位階躍函式