国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Linux > 正文

linux shell命令行選項與參數(shù)用法詳解

2019-10-26 18:40:14
字體:
供稿:網(wǎng)友
問題描述:在linux shell中如何處理tail -n 10 access.log這樣的命令行選項?
在bash中,可以用以下三種方式來處理命令行參數(shù),每種方式都有自己的應(yīng)用場景。
1,直接處理,依次對$1,$2,...,$n進行解析,分別手工處理;
2,getopts來處理,單個字符選項的情況(如:-n 10 -f file.txt等選項);
3,getopt,可以處理單個字符選項,也可以處理長選項long-option(如:--prefix=/home等)。
總結(jié):小腳本手工處理即可,getopts能處理絕大多數(shù)的情況,getopt較復(fù)雜、功能也更強大。
1,直接手工處理位置參數(shù)
必須要要知道幾個變量,
代碼如下:
   *    $0 :即命令本身,相當(dāng)于c/c++中的argv[0]
    *    $1 :第一個參數(shù).
    *    $2, $3, $4 ... :第2、3、4個參數(shù),依次類推。
    *    $#  參數(shù)的個數(shù),不包括命令本身
    *    $@ :參數(shù)本身的列表,也不包括命令本身
    *    $* :和$@相同,但"$*" 和 "$@"(加引號)并不同,"$*"將所有的參數(shù)解釋成一個字符串,而"$@"是一個參數(shù)數(shù)組。

手工處理方式能滿足多數(shù)的簡單需求,配合shift使用也能構(gòu)造出強大的功能,但處理復(fù)雜選項時建議用下面的兩種方法。
例子,(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內(nèi)置命令)
處理命令行參數(shù)是一個相似而又復(fù)雜的事情,為此,c提供了getopt/getopt_long等函數(shù),c++的boost提供了options庫,在shell中,處理此事的是getopts和getopt。
getopts/getopt的區(qū)別,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等)
關(guān)于getopts的使用方法,可以man bash  搜索getopts
getopts有兩個參數(shù),第一個參數(shù)是一個字符串,包括字符和“:”,每一個字符都是一個有效的選項,如果字符后面帶有“:”,表示這個字符有自己的參數(shù)。getopts從命令中獲取這些參數(shù),并且刪去了“-”,并將其賦值在第二個參數(shù)中,如果帶有自己參數(shù),這個參數(shù)賦值在“optarg”中。提供getopts的shell內(nèi)置了optarg這個變變,getopts修改了這個變量。
這里變量$optarg存儲相應(yīng)選項的參數(shù),而$optind總是存儲原始$*中下一個要處理的元素位置。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 青浦区| 闻喜县| 商都县| 泌阳县| 江油市| 宣恩县| 大同县| 横山县| 禹州市| 开阳县| 广平县| 尼木县| 宁化县| 满洲里市| 谷城县| 桐城市| 芒康县| 淮南市| 察哈| 苏尼特右旗| 富川| 门源| 汝阳县| 铜梁县| 依兰县| 营山县| 洞头县| 盈江县| 临澧县| 元阳县| 城固县| 邵东县| 宁安市| 临海市| 莱州市| 简阳市| 保德县| 洪洞县| 高唐县| 灵川县| 广河县|