Linux Shell使用者輸入--整理

來源:互聯網
上載者:User

標籤:io   使用   ar   for   檔案   資料   sp   on   c   

在shell指令碼中處理linux輸入主要有三種形式:

1)將他們像命令列參數一樣處理,通過對應的位置參數來擷取對應的輸入參數

2)通過getopt和getopts這兩個命令

3)通過read命令以互動的方式擷取使用者的輸入參數

1.通過對應的位置參數擷取

  shell中的位置參數的計算是從0開始的依次往後加1對應使用者的輸入參數;例如$0對應的是使用者的程式名,$1對應的第一個參數,$2為第二個參數,依次類推直到第10個參數以後則應用花括弧將對應的位置參數包裹的擷取方式為${10}。

  $#,$*,[email protected]在為參數中有著特殊的含義:

  $#統計輸入的參數的總數這個總數不包含程式名

  $*將使用者的輸入所有參數當成一個單詞返回

  [email protected]將所有變數儲存為單個單詞。

但是${$#}這中方式擷取最後一個輸入參數將返回一個錯誤的值,正確的方式為${!#}

  通過shift命令可以將對應參數的參數向前移動一位通過shift可以遍曆使用者輸入的參數

count=1

while [ -n "$1" ]

do

       echo "Parameter #$count = $1"

       echo "Parameter \$0 #$count=$0"

       count=$[ $count + 1 ]

       shift

done

shift將$2後一位移動到了$1而$1上的參數將會被刪除而不會被移到$0上面。

2)getopt和getopts命令

  getopt和getopts允許使用者可以按照linux的命令格式輸入資料,getopt和getopts的使用格式大體相似。getopt命令將原命令參數格式化傳給set命令替換原始的命令列參數。使用的格式如下:

  set -- `getopt ab:c "[email protected]"` :表示對應的b選項後面需要帶參數

  同時getopt是以--符號來區分選項參數和輸入的傳輸的。

  getopt參數在擷取的過程也還是通過對應的為參數擷取的。

  對應的事列如下:

 set -- `getopt -q ab:c "[email protected]"`

while [ -n "$1" ]

do

      case "$1" in

       -a) echo "Found the -a option";;

       -b) param=$2

           echo "Found the -b option,with parameter value $param"

          shift;;

       -c) echo "Found the -c option";;

       --) shift

          break;;

      *)echo "$1 is not an option";;

       esac

       shift

done

count=1

for param in "[email protected]"

do

       echo "Parameter #$count: $param"

       count=$[ $count + 1 ]

done 

輸入-ac –b test1 test2 經getopt格式化後輸出為-a -c -b test1 -- test2。

getopts與getopt略有不同。如果選項需要跟一個參數,這個參數將會儲存到OPTARG環境變數中。OPTIND環境變數儲存了參數列表中getopts正在處理的參數位置。

對應的事列如下:

while getopts ab:c opt

do     

        case "$opt" in

        a) echo "Found the -a option";;

        b) echo "Found the -b option,with value $OPTARG";;

        c) echo "Found the -c option";;

        *) echo "Unknow option: $opt";;

        esac

done

shift $[ $OPTIND - 1]

count=1

for param in "[email protected]"

do

        echo "Parameter $count:$param"

        count=$[ $count + 1 ]

done

3) 通過read命令以互動的方式擷取使用者的輸入參數

 read -t 5 -p "Enter a numer:" opt

-t 設定逾時時間

-p輸出互動字串提示符,使用者的輸入將被儲存到opt變數中。如果沒有設定opt變數,使用者的輸入變數將會儲存到$REPLY環境變數中

-s將屏蔽使用者輸入的回想。

count=1

cat testcommand.sh | while read line

do

        echo "Line $count: $line"

        count=$[ $count + 1 ]

done

用read來讀取檔案裡儲存的資料,read命令每次會從檔案中讀取一行文本。

Linux Shell使用者輸入--整理

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.