Bash

如何在 bash 腳本中包含自定義命令選項1和d_1一種nd1 and2?

  • May 21, 2019

我有一個腳本myscript.sh

#!/bin/sh

echo $1 $2

使用類似…

./myscript.sh foo bar

這給了我…的輸出

foo bar

但是我怎樣才能讓這個腳本包含自定義命令選項?例如 …

./myscript.sh -a foo and corespond to $1

./myscript.sh -b bar and corespond to $2

由於您將 bash 列為使用的 shell,請鍵入:

$ help getopts

這將列印如下內容:

getopts:getopts 選擇字元串名稱

$$ arg $$

解析選項參數。 外殼程序使用 Getopts 將位置參數解析為選項。

OPTSTRING 包含要辨識的選項字母;如果一個字母后跟一個冒號,則該選項應該有一個參數,它應該用空格與它分開。

每次呼叫getopts都會將下一個選項放入shell變數$name中,如果name不存在則初始化,下一個要處理的參數的索引放入shell變數OPTIND中。每次呼叫 shell 或 shell 腳本時,都會將 OPTIND 初始化為 1。當一個選項需要一個參數時,getopts 將該參數放入 shell 變數 OPTARG。

Getopts 通常會解析位置參數 ( $ 0 - $ 9),但如果給出更多參數,則改為解析它們。

有關的:

  1. Getopts 教程。
  2. getopts 如何傳遞命令行選項
  3. 如何在 bash 中使用 getopts
  4. getopt、getopts 還是手動解析?

你應該使用man 1 bash

小例子:

#!/bin/bash

while getopts "a:b:" opt      # get options for -a and -b ( ':' - option has an argument )
do
   case $opt in
       a) echo "Option a: $opt, argument: $OPTARG";;
       b) echo "Option b: $opt, argument: $OPTARG";;
   esac
done

引用自:https://unix.stackexchange.com/questions/520049