日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python getopts_getopts用法

發布時間:2025/3/13 python 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python getopts_getopts用法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

getopts可以編寫腳本,使控制多個命令行參數更加容易。getopts用于形成命令行處理標準形式。原則上講,腳本應具有確認帶有多個選項的命令文件標準格式的能力。

2.1

getopts腳本實例通過例子可以更好地理解getopts。以下getopts腳本接受下列選項或參數。?a設置變量ALL為true?h設置變量HELP為true

?f設置變量FILE為true?v設置變量VERBOSE為true

對于所有變量設置,一般總假定其初始狀態為false:

[sam@chenwy sam]$ ./getopt1 -a -h

ALL is true

HELP is true

[sam@chenwy sam]$ cat getopt1

#!/bin/sh

ALL=false

HELP=false

FILE=false

VERBOSE=false

while getopts ahfgv OPTION

do

case $OPTION in

a)ALL=true

echo "ALL is $ALL"

;;

h)HELP=true

echo "HELP is $HELP"

;;

f)FILE=true

echo "FILE is $FILE"

;;

v)VERBOSE=true

echo "VERBOSE is $VERBOSE"

;;

esac

done

getopts一般格式為:getopts option_string variable在上述例子中使用腳本:while getopts ahfgv OPTION可以看出while循環用于讀取命令行,options_string為指定的5個選項(-a,-h,-f,-g,-v),腳本中varible為OPTION。注意這里并沒有用連字符指定每一單個選項。運行上述腳本,給出幾個有效和無效的選項,結果為:

[sam@chenwy sam]$ ./getopt1 -a -h

ALL is true

HELP is true

[sam@chenwy sam]$ ./getopt1 -a -h -p

ALL is true

HELP is true

./getopt1: illegal option -- p

[sam@chenwy sam]$ ./getopt1 -p

./getopt1: illegal option -- p

可以看出不同選項的結合方式。

2.2

getopts使用方式getopts讀取option_string,獲知腳本中使用了有效選項。getopts查看所有以連字符開頭的參數,將其視為選項,如果輸入選項,將把這與option_string對比,如果匹配發現,變量設置為OPTION,如果未發現匹配字符,變量能夠設置為?。重復此處理過程直到選項輸入完畢。getopts接收完所有參數后,返回非零狀態,意即參數傳遞成功,變量OPTION保存最后處理參數,一會兒就可以看出處理過程中這樣做的好處。

2.3使用getopts指定變量取值有時有必要在腳本中指定命令行選項取值。getopts為此提供了一種方式,即在option_string中將一個冒號放在選項后。例如:getopts ahfvc: OPTION上面一行腳本指出,選項a、h、f、v可以不加實際值進行傳遞,而選項c必須取值。使用選項取值時,必須使用變量OPTARG保存該值。如果試圖不取值傳遞此選項,會返回一個錯誤信息。錯誤信息提示并不明確,因此可以用自己的反饋信息屏蔽它,方法如下:將冒號放在option_string開始部分。while getopts :ahfgvc: OPTION在case語句里使用?創建一可用語句捕獲錯誤。

[sam@chenwy sam]$ cat getopt1

#!/bin/sh

ALL=false

HELP=false

FILE=false

VERBOSE=false

COPIES=0

while getopts :ahfgvc: OPTION

do

case $OPTION in

a)ALL=true

echo "ALL is $ALL"

;;

h)HELP=true

echo "HELP is $HELP"

;;

f)FILE=true

echo "FILE is $FILE"

;;

v)VERBOSE=true

echo "VERBOSE is $VERBOSE"

;;

c)COPIES=$OPTARG

echo "COPIES is $COPIES"

;;

?)

echo "`basename ` -[a h f v] -[c value] file"

;;

esac

done

輸入所有合法選項:

[sam@chenwy sam]$ ./getopt1 -ah -c 3

ALL is true

HELP is true

COPIES is 3

選項- c不賦值,將返回錯誤,但顯示的是腳本語句中的反饋信息[sam@chenwy sam]$ ./getopt1 -ah -c

ALL is true

HELP is true

getopt1 -[a h f v] -[c value] file

去掉前面的冒號,提到系統的提示消息

:[sam@chenwy sam]$ ./getopt1 -ah -c

ALL is true

HELP is true

./getopt1: option requires an argument -- c

2.4訪問取值方式getopts的一種功能是運行后臺腳本。這樣可以使用戶加入選項,指定不同的磁帶設備以備份數據。使用getopts實現此任務的基本框架如下:

[sam@chenwy sam]$ cat backups

#!/bin/sh

OUITE=n

DEVICE=awa

LOGFILE=/tmp/logbackup

usage()

{

echo "Usage: `basename ` -d [device] -l [logfile] -q"

exit 1

}

if [ $# = 0 ]

then

usage

fi

while getopts :qd:l: OPTION

do

case $OPTION in

q) QUIET=y

LOGFILE="/tmp/backup.log"

;;

d)DEVICE=$OPTION

;;

l)LOGFILE=$OPTARG

;;

?)usage

;;

esac

done

echo "you chlose the ..."

echo "Quite=$QUIET $DEVICE $LOGFILE"

上述腳本中如果指定選項d,則需為其賦值。該值為磁帶設備路徑。用戶也可以指定是否備份輸出到登錄文件中的內容。運行上述腳本,指定下列輸入:

[sam@chenwy sam]$ ./backups -d /dev/rmt0 -q

you chlose the ...

Quite=y d /tmp/backup.log

getopts檢查完之后,變量OPTARG取值可用來進行任何正常的處理過程。當然,如果輸入選項,怎樣進行進一步處理及使該選項有有效值,完全取決于用戶。以上是使用getopts對命令行參數處理的基本框架。實際處理文件時,使用for循環,就像在tr-case腳本中使用shift命令過濾所有選項一樣。使用getopts與使用shift方法比較起來,會減少大量的編程工作。

2.5使用getopts處理文件轉換現在用所學知識將tr-case腳本轉換為getopts版本。命令行選項getopts方法與shift方法的唯一區別是一個VERBOSE選項。變量VERBOSE缺省取值為no,但選擇了命令行選項后,case語句將捕獲它,并將其設為yes,反饋的命令是一個簡單的if語句。

if [ "VERBOSE" = "on" ];

thenecho "doing upp on $LOOP ..newfile called

$LOOP$EXT"

fi

如果正在使用其他系統命令包,它總是反饋用戶動作,只需簡單地將包含錯誤的輸出重定向到/dev/null中即可。如:命令>/dev/null 2 >&1缺省時VERBOSE關閉(即不顯示),使用- v選項可將其打開。例如要用VERBOSE將myfile文件系列轉換為小寫,方法如下:tr-case -l -v myfile1 myfile2 ...或者tr-case -v -l myfile1 myfile2 ...可能首先注意的是使用g e t o p t s后腳本的縮減效果。這里用于文件處理的腳本與s h i f t版本相同。腳本如下:

[sam@chenwy sam]$ cat tr_case1

#!/bin/sh

FILES=""

TRCASE=""

EXT=""

OPT=no

VERBOSE="off"

while getopts :luv OPTION

do

case $OPTION in

l)TRCASE="lower"

EXT=".LC"

OPT=yes

;;

u)TRCASE="upper"

EXT=".UC"

OPT=yes

;;

v)VERBOSE=on

;;

?)echo "usage: `basename `: -[l|u] -v file[s]"

exit 1

;;

esac

done

shift `expr $OPTIND - 1`

if [ "$#" = "0" ] || [ "$OPT" = "no" ]

then

echo "usage: `basename `: -[l|u] -v file[s]"

exit 1

fi

for LOOP in "$@"

do

if [ ! -f $LOOP ]

then

echo "`basename ` :error cannot find file $LOOP"

exit 1

fi

echo $TRCASE $LOOP

case $TRCASE in

lower) if [ "VERBOSE" = "on" ];then

echo "doing...lower on $LOOP..newfile"

fi

cat $LOOP|tr "[a-z]" "[A-Z]" > $LOOP$EXT

;;

upper) if [ "VERBOSE" = "on" ];then

echo "doing upper on $LOOP..newfile"

fi

cat $LOOP|tr "[A-Z]" "[a-z]" >$LOOP$EXT

;;

esac

done

在腳本中指定命令行選項時,最好使其命名規則與U N I X或L I N U X一致。下面是一些選項及其含義的列表。

選項含義- a擴展- c計數、拷貝- d目錄、設備- e執行- f文件名、強制- h幫助- i忽略狀態- l注冊文件- o完整輸出- q退出- p路徑- v顯示方式或版本

3小結正確控制命令行選項會使腳本更加專業化,對于用戶來說會使之看起來像一個系統命令。本章講到了控制命令行選項的兩種方法,shift和getopts。使用getopts檢測腳本的數量遠遠小于使用s h i f t方法檢測腳本的數量。shift也克服了腳本參數$ 1 . . $ 9的限制。使用shift命令,腳本可以很容易偏移至所有調用參數,因此腳本可以做進一步處理。

總結

以上是生活随笔為你收集整理的python getopts_getopts用法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。