linux getopt 命令
getopt命令是一個在處理命令列選項和引數時非常方便的工具。它能夠識別命令列引數,從而在指令碼中解析它們時更方便
1、命令的格式
getopt命令可以接受一系列任意形式的命令列選項和引數,並自動將它們轉換成適當的格式。它的命令格式如下:
getopt optstring parameters
optstring是這個過程的關鍵所在。它定義了命令列有效的選項字母,還定義了哪些選項字母需要引數值。 首先,在optstring中列出你要在指令碼中用到的每個命令列選項字母。然後,在每個需要引數值的選項字母后加一個冒號。getopt命令會基於你定義的optstring解析提供的引數。
[root@master ~]# getopt ab:cd -a -b test1 -cd test2 test3
-a -b test1 -c -d -- test2 test3
如果想忽略這條錯誤訊息,可以在命令後加-q選項。
[root@master ~]# getopt -q ab:cd -a -b test1 -cde test2 test3
-a -b 'test1' -c -d -- 'test2' 'test3'
2、選項字串optstring
"a:b:cd::e",這就是一個選項字串。對應到命令列就是-a ,-b ,-c ,-d, -e 。冒號又是什麼呢? 冒號表示引數,一個冒號就表示這個選項後面必須帶有引數(沒有帶引數會報錯哦),但是這個引數可以和選項連在一起寫,也可以用空格隔開,比如-a123 和-a 123(中間有空格) 都表示123是-a的引數;兩個冒號的就表示這個選項的引數是可選的,即可以有引數,也可以沒有引數,但要注意有引數時,引數與選項之間不能有空格(有空格會報錯的哦),這一點和一個冒號時是有區別的。
3、在指令碼中使用getopt
可以在指令碼中使用getopt來格式化指令碼所攜帶的任何命令列選項或引數,但用起來略微複雜。
方法是用getopt命令生成的格式化後的版本來替換已有的命令列選項和引數。用set命令能夠做到。
set命令的選項之一是雙破折線(--),它會將命令列引數替換成set命令的命令列值。
然後,該方法會將原始指令碼的命令列引數傳給getopt命令,之後再將getopt命令的輸出傳 給set命令,用getopt格式化後的命令列引數來替換原始的命令列引數,看起來如下所示。
set -- $(getopt -q ab:cd "$@")
[root@master ~]# cat hh.sh
#!/bin/b=<F12>h
# Extract command line options & values with getopt
set -- $(getopt -q ab:cd "$@")
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" ;;
-d)
echo "Found the -d 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
shift表示對引數左移,預設shift(shift 1),shift n表示引數左移3位,參考:https://blog.csdn.net/zhu_xun/article/details/24796235
if [ -n str ]表示當串的長度大於0時為真(串非空),參考:https://www.cnblogs.com/ariclee/p/6137456.html
break 跳出迴圈,break n 跳出指定的第n個封閉的迴圈,參考:https://www.cnblogs.com/xiaojianblogs/p/8242443.html
執行結果
[root@master ~]# sh hh.sh -a -b test -cd test1 test2 test3
Found the -a option
Found the -b option, with parameter value 'test'
Found the -c option
Found the -d option
Parameter #1: 'test1'
Parameter #2: 'test2'
Parameter #3: 'test3'
參考:
相關文章
- Linux-getoptLinux
- linux 中getopt和getopt_long 用法解析Linux
- linux 中解析命令列引數 (getopt_long用法)Linux命令列
- linux-解析命令列選項getopt_long用法Linux命令列
- Linux程式設計——用getopt處理命令列引數Linux程式設計命令列
- linux系統呼叫getoptLinux
- Linux選項解釋-getopt和getopt_long函式Linux函式
- 使用 getopt() 進行命令列處理命令列
- 命令列引數選項處理:getopt()及getopt_long()函式使用命令列函式
- linux的命令列解析引數之getopt_long函式使用Linux命令列函式
- linux之getopt 函式(轉)Linux函式
- getopt和getopt_long
- getopt與getopt_long
- 1.linux的命令列解析引數之getopt_long函式Linux命令列函式
- Linux下getopt函式的使用Linux函式
- linux下getopt函式的用法Linux函式
- getopt_long函式基本用法-linux函式Linux
- linux系統getopt函式詳解Linux函式
- 使用getopt_long()從命令列獲取引數命令列
- getopt for windowsWindows
- Linux下getopt()函式的簡單使用Linux函式
- 使用getopt_long()從命令列獲取引數,struct option命令列Struct
- 命令列引數解析函式getopt_long() 使用詳解命令列函式
- c++中getopt和getopt_long的使用方法C++
- Linux中getopt函式、optind等變數使用詳解Linux函式變數
- C/C++—— 分析命令列引數的getopt()函式使用介紹C++命令列函式
- 一個使用getopt()函式獲取命令列引數的例子(轉)函式命令列
- shell中getopt的使用
- python getopt模組怎麼用?Python
- getopt在Python中的使用Python
- Linux命令—–CP命令Linux
- 【Linux命令】grep命令Linux
- Linux命令--ps命令Linux
- 翻譯:man getopt(1)中文手冊
- linux命令大全-linux命令使用和管理Linux
- Linux命令(1)——xargs命令Linux
- Linux命令篇 - grep 命令Linux
- Linux命令篇 - sed 命令Linux