我在 OSX 上,我需要一個處理多個引數的 bash 腳本。根據本網站上的一些答案,我撰寫了以下 bash 腳本(出于隱私考慮,一些字串已被洗掉):
#!/bin/bash
# A POSIX variable
OPTIND=1 # Reset in case getopts has been used previously in the shell.
# Default parameter value:
PORT=xxx
PUBKEY=xxx
HOST_IP=xxx
# show_help function
show_help() {
echo "Usage: $(basename "$0") [-h] [-p PORT] [-f PUBKEY] [-i HOST_IP]"
echo
echo " -p PORT add key to container running on port PORT (default: xxx)"
echo " -f PUBKEY add key file PUBKEY (default: xxx)"
echo " -i HOST_IP connect to host HOST_IP (default: xxx)"
echo
return
}
while getopts ":h:p:f:i:" option; do
case "$option" in
\?)
echo "invalid argument"
show_help
exit 1
;;
h)
show_help
exit 0
;;
p) PORT=$OPTARG
;;
f) PUBKEY=$OPTARG
;;
i) HOST_IP=$OPTARG
;;
esac
done
shift $((OPTIND-1))
USER_AT_HOST="root@$HOST_IP"
PUBKEYPATH="$HOME/.ssh/$PUBKEY"
ssh-copy-id -i "$PUBKEYPATH" "$USER_AT_HOST" -p "$PORT"
exit 0
該腳本適用于所有引數(包括無效引數),除了引數-h。當我將腳本稱為
script.sh -h
結果與
script.sh
而不是向我展示幫助。你能幫我理解發生了什么嗎?
uj5u.com熱心網友回復:
:后面的意思是h需要一個引數,但我認為不需要任何引數。去掉后面的冒號。getopts ":h:p:f:i:"-h-hh
通常,getopts 會顯示錯誤:
option requires an argument -- h
但是,當您使用另一個冒號開始字串時,錯誤報告已關閉。洗掉首字母:以查看引數處理中的錯誤。
uj5u.com熱心網友回復:
getopts模式中h:說-h必須有一個引數(例如,-h 2)所以,你試過script.sh -h 2嗎?
如果-h不應該有任何引數,那么:在h離開你之后洗掉getopts ":hp:f:i:"
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/494676.html
上一篇:不能在默認寫入中存盤字串陣列嗎?
下一篇:ExcelVBA中的洗掉線
