亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Linux Shell > 正文

linux shell命令行選項與參數用法詳解

2020-07-27 19:17:35
字體:
來源:轉載
供稿:網友
問題描述:在linux shell中如何處理tail -n 10 access.log這樣的命令行選項?
在bash中,可以用以下三種方式來處理命令行參數,每種方式都有自己的應用場景。
1,直接處理,依次對$1,$2,...,$n進行解析,分別手工處理;
2,getopts來處理,單個字符選項的情況(如:-n 10 -f file.txt等選項);
3,getopt,可以處理單個字符選項,也可以處理長選項long-option(如:--prefix=/home等)。
總結:小腳本手工處理即可,getopts能處理絕大多數的情況,getopt較復雜、功能也更強大。
1,直接手工處理位置參數
必須要要知道幾個變量,
復制代碼 代碼如下:

   *    $0 :即命令本身,相當于c/c++中的argv[0]
    *    $1 :第一個參數.
    *    $2, $3, $4 ... :第2、3、4個參數,依次類推。
    *    $#  參數的個數,不包括命令本身
    *    $@ :參數本身的列表,也不包括命令本身
    *    $* :和$@相同,但"$*" 和 "$@"(加引號)并不同,"$*"將所有的參數解釋成一個字符串,而"$@"是一個參數數組。

手工處理方式能滿足多數的簡單需求,配合shift使用也能構造出強大的功能,但處理復雜選項時建議用下面的兩種方法。
例子,(getargs.sh):

復制代碼 代碼如下:

#!/bin/bash
if [ $# -lt 1 ]; then
    echo "error.. need args"
    exit 1
fi
echo "commond is $0"
echo "args are:"
for arg in "$@"
do
    echo $arg
done


運行命令:

復制代碼 代碼如下:

./getargs.sh 11 22 cc
commond is ./getargs.sh
args are:
11
22
cc

2,getopts (shell內置命令)
處理命令行參數是一個相似而又復雜的事情,為此,c提供了getopt/getopt_long等函數,c++的boost提供了options庫,在shell中,處理此事的是getopts和getopt。
getopts/getopt的區別,getopt是個外部binary文件,而getopts是shell builtin。

復制代碼 代碼如下:

[root@jbxue ~]$ type getopt
getopt is /usr/bin/getopt
[root@jbxue ~]$ type getopts
getopts is a shell builtin

getopts不能直接處理長的選項(如:--prefix=/home等)
關于getopts的使用方法,可以man bash  搜索getopts
getopts有兩個參數,第一個參數是一個字符串,包括字符和“:”,每一個字符都是一個有效的選項,如果字符后面帶有“:”,表示這個字符有自己的參數。getopts從命令中獲取這些參數,并且刪去了“-”,并將其賦值在第二個參數中,如果帶有自己參數,這個參數賦值在“optarg”中。提供getopts的shell內置了optarg這個變變,getopts修改了這個變量。
這里變量$optarg存儲相應選項的參數,而$optind總是存儲原始$*中下一個要處理的元素位置。
while getopts ":a:bc" opt  #第一個冒號表示忽略錯誤;字符后面的冒號表示該選項必須有自己的參數
例子,(getopts.sh):

復制代碼 代碼如下:

echo $*
while getopts ":a:bc" opt
do
        case $opt in
                a ) echo $optarg
                    echo $optind;;
                b ) echo "b $optind";;
                c ) echo "c $optind";;
                ? ) echo "error"
                    exit 1;;
        esac
done
echo $optind
shift $(($optind - 1))
#通過shift $(($optind - 1))的處理,$*中就只保留了除去選項內容的參數,可以在其后進行正常的shell編程處理了。
echo $0
echo $*


執行命令:

復制代碼 代碼如下:

./getopts.sh -a 11 -b -c
-a 11 -b -c
11
3
b 4
c 5
5
./getopts.sh

3,getopt(一個外部工具)
具體用用法可以 man getopt
#-o表示短選項,兩個冒號表示該選項有一個可選參數,可選參數必須緊貼選項,如-carg 而不能是-c arg
#--long表示長選項
例子,(getopt.sh):

復制代碼 代碼如下:

#!/bin/bash
# a small example program for using the new getopt(1) program.
# this program will only work with bash(1)
# an similar program using the tcsh(1) script. language can be found
# as parse.tcsh
# example input and output (from the bash prompt):
# ./parse.bash -a par1 'another arg' --c-long 'wow!*/?' -cmore -b " very long "
# option a
# option c, no argument
# option c, argument `more'
# option b, argument ` very long '
# remaining arguments:
# --> `par1'
# --> `another arg'
# --> `wow!*/?'
# note that we use `"$@"' to let each command-line parameter expand to a
# separate word. the quotes around `$@' are essential!
# we need temp as the `eval set --' would nuke the return value of getopt.
#-o表示短選項,兩個冒號表示該選項有一個可選參數,可選參數必須緊貼選項
#如-carg 而不能是-c arg
#--long表示長選項
#"$@"在上面解釋過
# -n:出錯時的信息
# -- :舉一個例子比較好理解:
#我們要創建一個名字為 "-f"的目錄你會怎么辦?
# mkdir -f #不成功,因為-f會被mkdir當作選項來解析,這時就可以使用
# mkdir -- -f 這樣-f就不會被作為選項。
temp=`getopt -o ab:c:: --long a-long,b-long:,c-long:: /
     -n 'example.bash' -- "$@"`
if [ $? != 0 ] ; then echo "terminating..." >&2 ; exit 1 ; fi
# note the quotes around `$temp': they are essential!
#set 會重新排列參數的順序,也就是改變$1,$2...$n的值,這些值在getopt中重新排列過了
eval set -- "$temp"
#經過getopt的處理,下面處理具體選項。
while true ; do
        case "$1" in
                -a|--a-long) echo "option a" ; shift ;;
                -b|--b-long) echo "option b, argument /`$2'" ; shift 2 ;;
                -c|--c-long)
                        # c has an optional argument. as we are in quoted mode,
                        # an empty parameter will be generated if its optional
                        # argument is not found.
                        case "$2" in
                                "") echo "option c, no argument"; shift 2 ;;
                                *)  echo "option c, argument /`$2'" ; shift 2 ;;
                        esac ;;
                --) shift ; break ;;
                *) echo "internal error!" ; exit 1 ;;
        esac
done
echo "remaining arguments:"
for arg do
   echo '--> '"/`$arg'" ;
done

運行命令:
復制代碼 代碼如下:

./getopt.sh --b-long abc -a -c33 remain
option b, argument `abc'
option a
option c, argument `33'
remaining arguments:
--> `remain'

以上就是有關linux shell命令行選項與參數用法的詳細內容,希望對大家有所幫助。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
97**国产露脸精品国产| 成人欧美一区二区三区黑人孕妇| 国产精品高清网站| 国产日韩欧美在线视频观看| 韩国欧美亚洲国产| 日韩免费高清在线观看| 日韩欧美高清在线视频| 国产视频精品va久久久久久| 日本sm极度另类视频| 国产日韩欧美夫妻视频在线观看| 一区二区三区回区在观看免费视频| 久久久久成人网| 欧美亚洲伦理www| 久久精品影视伊人网| 日韩久久午夜影院| 久久影院免费观看| 91免费电影网站| 青草成人免费视频| 日韩有码在线视频| 久久99热精品这里久久精品| 91性高湖久久久久久久久_久久99| 国产精品久久久久久久久久三级| 欧美激情综合色综合啪啪五月| 一本大道久久加勒比香蕉| 韩国国内大量揄拍精品视频| 国产精品久久久久久久久免费| 欧美精品www在线观看| 国产精品69久久久久| 久久久精品影院| 亚洲精品永久免费精品| 国产精品吴梦梦| 亚洲成人国产精品| 国产日韩欧美中文| 亚洲日韩中文字幕在线播放| 成人自拍性视频| 日产精品99久久久久久| 欧美日韩一区二区免费视频| 日韩高清av一区二区三区| 亚洲日本欧美中文幕| 欧美激情免费视频| 日韩欧美在线视频日韩欧美在线视频| 欧美与欧洲交xxxx免费观看| 欧美一区三区三区高中清蜜桃| 日韩成人av网| 懂色av一区二区三区| 亚洲xxxx3d| 久久久爽爽爽美女图片| 亚洲欧美日韩直播| 亚洲缚视频在线观看| 亚洲白拍色综合图区| 亚洲人成电影在线| 国产精品美女午夜av| 中文字幕亚洲在线| 欧美性猛交xxx| 91老司机精品视频| 亚洲色图综合久久| 欧美午夜片在线免费观看| 国内成人精品视频| 亚洲人成五月天| 国产成人欧美在线观看| 欧美激情影音先锋| 97香蕉超级碰碰久久免费的优势| 91在线视频免费| 久久国产精品久久久久久| 久久久女女女女999久久| 777国产偷窥盗摄精品视频| 国产日韩欧美另类| 午夜精品久久久久久久久久久久| 欧美美最猛性xxxxxx| 亚洲精品中文字幕女同| 欧美激情一区二区三级高清视频| 亚洲人av在线影院| 欧美大秀在线观看| 精品国产乱码久久久久久虫虫漫画| 亚洲美女又黄又爽在线观看| 97久久精品人人澡人人爽缅北| 欧美在线不卡区| 国产日韩欧美在线看| 国产精品视频成人| 一区二区av在线| 91色精品视频在线| 欧美极品美女视频网站在线观看免费| 久久影院模特热| 久久久久久久一区二区三区| 2024亚洲男人天堂| 亚洲一区亚洲二区| 国产精品夫妻激情| 国产精品女主播视频| 91久久久亚洲精品| 精品中文字幕久久久久久| 青青久久av北条麻妃黑人| 欧美大片在线影院| 欧美视频免费在线观看| 91精品久久久久久综合乱菊| 夜夜嗨av一区二区三区免费区| 91中文字幕在线| 欧美尤物巨大精品爽| 国产精品夜色7777狼人| 亚洲夜晚福利在线观看| 欧美日韩国产专区| 亚洲综合精品一区二区| 91精品国产91| 国产欧美日韩视频| 国产精品都在这里| 精品一区二区亚洲| 欧美又大粗又爽又黄大片视频| 欧美性20hd另类| 一区二区三区黄色| 欧美性受xxxx白人性爽| 国产精品高清网站| 7777免费精品视频| 91欧美日韩一区| 亚洲精品wwww| 亚洲伊人一本大道中文字幕| 国产精品女人久久久久久| 91亚洲va在线va天堂va国| 精品国产一区二区三区久久狼5月| 欧美精品日韩三级| 国产欧美亚洲精品| 麻豆国产精品va在线观看不卡| 欧美在线视频网站| 亚洲毛片在线观看| 日韩精品免费在线视频观看| 日韩精品一区二区三区第95| 亲子乱一区二区三区电影| 欧美精品在线免费播放| 日韩av影视在线| 亚洲精品大尺度| 国产综合香蕉五月婷在线| 538国产精品视频一区二区| 精品女同一区二区三区在线播放| 国产亚洲精品久久久久久| 欧美精品18videos性欧美| 久久精品国产2020观看福利| 日韩av在线网址| 91社影院在线观看| 亚洲国产一区二区三区在线观看| 久久91亚洲人成电影网站| 精品成人69xx.xyz| 午夜精品www| 92看片淫黄大片欧美看国产片| 国产精品激情av在线播放| 国产精品无av码在线观看| 日韩在线观看网址| 成人写真福利网| 欧美精品一区三区| xxav国产精品美女主播| 欧美一级bbbbb性bbbb喷潮片| 日产精品99久久久久久| 国产精品久久久久久久久久新婚| 亚洲国产精品久久久久秋霞不卡| 国产欧美一区二区| 1769国产精品| xxxxx成人.com| 日本乱人伦a精品| 国内偷自视频区视频综合| 国内免费久久久久久久久久久| 中文字幕精品av| 欧美成人精品xxx| 成人久久18免费网站图片| 亚洲成人久久久| 在线播放日韩专区| 欧美巨猛xxxx猛交黑人97人| 国产精品18久久久久久首页狼|