最近中文字幕大全|熟女少妇精品一区二区|国产网红主播精品一区|日本一区二区精品理论电影|欧洲少妇无码精品视频在线|久久国产精品永久免费网站|人妻无码久久一区二区免费麻豆|国产日韩欧美一区二区在线高清

十二年專注于品牌網(wǎng)站建設(shè) 十余年專注于網(wǎng)站建設(shè)_小程序開發(fā)_APP開發(fā),低調(diào)、敢創(chuàng)新、有情懷!
南昌百恒網(wǎng)絡(luò)微信公眾號(hào) 掃一掃關(guān)注
小程序
tel-icon全國(guó)服務(wù)熱線:400-680-9298,0791-88117053
掃一掃關(guān)注百恒網(wǎng)絡(luò)微信公眾號(hào)
掃一掃打開百恒網(wǎng)絡(luò)微信小程序

百恒網(wǎng)絡(luò)

南昌百恒網(wǎng)絡(luò)

linux中如何使用getopt命令?

百恒網(wǎng)絡(luò) 2017-09-15 7207

getopt命令是一個(gè)在處理命令行選項(xiàng)和參數(shù)時(shí)非常方便的工具。它能夠識(shí)別命令行參數(shù),從而在腳本中解析它們時(shí)更方便。

1、命令的格式

getopt命令可以接受一系列任意形式的命令行選項(xiàng)和參數(shù),并自動(dòng)將它們轉(zhuǎn)換成適當(dāng)?shù)母袷?。它的命令格式如下?

getopt optstring parameters

optstring是這個(gè)過程的關(guān)鍵所在。它定義了命令行有效的選項(xiàng)字母,還定義了哪些選項(xiàng)字母需要參數(shù)值。 首先,在optstring中列出你要在腳本中用到的每個(gè)命令行選項(xiàng)字母。然后,在每個(gè)需要參數(shù)值的選項(xiàng)字母后加一個(gè)冒號(hào)。getopt命令會(huì)基于你定義的optstring解析提供的參數(shù)。

下面南昌網(wǎng)絡(luò)公司-百恒網(wǎng)絡(luò)為大家舉一個(gè)getopt工作的簡(jiǎn)單例子,讓大家可以更好的了解它。

$ getopt ab:cd -a -b test1 -cd test2 test3

-a -b test1 -c -d -- test2 test3

$

optstring定義了四個(gè)有效選項(xiàng)字母:a、b、c和d。冒號(hào)(:)被放在了字母b后面,因?yàn)閎選項(xiàng)需要一個(gè)參數(shù)值。當(dāng)getopt命令運(yùn)行時(shí),它會(huì)檢查提供的參數(shù)列表(-a -b test1 -cd test2 test3),并基于提供的optstring進(jìn)行解析。注意,它會(huì)自動(dòng)將-cd選項(xiàng)分成兩個(gè)單獨(dú)的選項(xiàng),并插入雙破折線來分隔行中的額外參數(shù)。

如果指定了一個(gè)不在optstring中的選項(xiàng),默認(rèn)情況下,getopt命令會(huì)產(chǎn)生一條錯(cuò)誤消息。

$ getopt ab:cd -a -b test1 -cde test2 test3

getopt: invalid option -- e

-a -b test1 -c -d -- test2 test3

$

如果想忽略這條錯(cuò)誤消息,可以在命令后加-q選項(xiàng)。

$ getopt -q ab:cd -a -b test1 -cde test2 test3

-a -b 'test1' -c -d -- 'test2' 'test3'

$

注意,getopt命令選項(xiàng)必須出現(xiàn)在optstring之前。現(xiàn)在應(yīng)該可以在腳本中使用此命令處理命令行選項(xiàng)了。

2、在腳本中使用getopt

可以在腳本中使用getopt來格式化腳本所攜帶的任何命令行選項(xiàng)或參數(shù),但用起來略微復(fù)雜。那么具體如何操作呢?下面南昌網(wǎng)絡(luò)公司就來和大家探討一下:

方法是用getopt命令生成的格式化后的版本來替換已有的命令行選項(xiàng)和參數(shù)。用set命令能夠做到。

set命令的選項(xiàng)之一是雙破折線(--),它會(huì)將命令行參數(shù)替換成set命令的命令行值。

然后,該方法會(huì)將原始腳本的命令行參數(shù)傳給getopt命令,之后再將getopt命令的輸出傳 給set命令,用getopt格式化后的命令行參數(shù)來替換原始的命令行參數(shù),看起來如下所示。

set -- $(getopt -q ab:cd "$@")

現(xiàn)在原始的命令行參數(shù)變量的值會(huì)被getopt命令的輸出替換,而getopt已經(jīng)為我們格式化好了命令行參數(shù)。

利用該方法,現(xiàn)在就可以寫出能幫我們處理命令行參數(shù)的腳本。

$ cat test18.sh

#!/bin/bash

# Extract command line options & values with getopt

#

set -- $(getopt -q ab:cd "$@")

#

echo

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 "$@"

do

echo "Parameter #$count: $param"

count=$[ $count + 1 ] done

#

$

你會(huì)注意到它跟腳本test17.sh一樣,唯一不同的是加入了getopt命令來幫助格式化命令行參數(shù)。

現(xiàn)在如果運(yùn)行帶有復(fù)雜選項(xiàng)的腳本,就可以看出效果更好了。

$ ./test18.sh -ac

Found the -a option

Found the -c option

$

當(dāng)然,之前的功能照樣沒有問題。

$ ./test18.sh -a -b test1 -cd test2 test3 test4

Found the -a option

Found the -b option, with parameter value 'test1'

Found the -c option

Parameter #1: 'test2'

Parameter #2: 'test3'

Parameter #3: 'test4'

$

現(xiàn)在看起來相當(dāng)不錯(cuò)了。但是,在getopt命令中仍然隱藏著一個(gè)小問題??纯催@個(gè)例子。

$ ./test18.sh -a -b test1 -cd "test2 test3" test4

Found the -a option

Found the -b option, with parameter value 'test1'

Found the -c option

Parameter #1: 'test2

Parameter #2: test3'

Parameter #3: 'test4'

$

getopt命令并不擅長(zhǎng)處理帶空格和引號(hào)的參數(shù)值。它會(huì)將空格當(dāng)作參數(shù)分隔符,而不是根據(jù)雙引號(hào)將二者當(dāng)作一個(gè)參數(shù)。幸好還有另外一個(gè)辦法能解決這個(gè)問題。

以上便是南昌網(wǎng)絡(luò)公司-百恒網(wǎng)絡(luò)為大家介紹的關(guān)于linux中g(shù)etopt命令的使用方法,希望能夠?qū)Υ蠹矣兴鶐椭?。此外,本公司專業(yè)從事網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)等服務(wù),如有需要,歡迎大家來電咨詢,洽談合作!


400-680-9298,0791-88117053
掃一掃關(guān)注百恒網(wǎng)絡(luò)微信公眾號(hào)
掃一掃打開百恒網(wǎng)絡(luò)小程序

歡迎您的光顧,我們將竭誠(chéng)為您服務(wù)×

售前咨詢 售前咨詢
 
售前咨詢 售前咨詢
 
售前咨詢 售前咨詢
 
售前咨詢 售前咨詢
 
售前咨詢 售前咨詢
 
售后服務(wù) 售后服務(wù)
 
售后服務(wù) 售后服務(wù)
 
備案專線 備案專線
 
×