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_long函式使用Linux命令列函式
- 1.linux的命令列解析引數之getopt_long函式Linux命令列函式
- Linux下getopt函式的使用Linux函式
- getopt和getopt_long
- getopt與getopt_long
- python getopt模組怎麼用?Python
- 【Linux命令】grep命令Linux
- Linux命令—–CP命令Linux
- linux命令大全-linux命令使用和管理Linux
- Linux命令Linux
- 翻譯:man getopt(1)中文手冊
- Linux命令(1)——xargs命令Linux
- Linux命令之lldptool命令Linux
- Linux命令篇 - sed 命令Linux
- Linux命令篇 - grep 命令Linux
- Linux命令篇 - tar 命令Linux
- Linux命令之rz命令與sz命令Linux
- linux每日命令(5):mkdir命令Linux
- linux-mysql命令,tomcat命令LinuxMySqlTomcat
- linux每日命令(2):cd命令Linux
- linux每日命令(18):whereis命令Linux
- linux每日命令(12):nl命令Linux
- linux每日命令(10):touch命令Linux
- linux每日命令(11):cat命令Linux
- linux每日命令(38):iostat命令LinuxiOS
- linux每日命令(39):lsof命令Linux
- linux每日命令(32):gzip命令Linux
- linux每日命令(35):grep命令Linux
- linux每日命令(36):wc命令Linux
- linux每日命令(37):top命令Linux
- linux每日命令(29):chown命令Linux
- Linux命令總結--mkdir命令Linux
- Linux命令:grep命令AND、OR、NOT例項Linux
- Linux命令篇 - nc(ncat) 命令Linux
- Linux Less 命令Linux
- linux命令---scpLinux
- Linux iostat 命令LinuxiOS