[英]getopts to use for both flags and option parsing
我在腳本中使用了getopts,並且希望將其用於以下所有選項解析順序。
./myscript -c server
./myscript -c -h server
./myscript server -c
./myscript -h server -c
./myscript server
我正在使用myscript如下。
#!/bin/bash
while getopts c:h: var
do
case $var in
h) host=$OPTARG;;
c) FLAG=1
esac
done
這里的“服務器”是一個參數,甚至應該加載-h選項是否指定以及我正在為FLAG使用的-c選項。有沒有辦法實現這一目標。
有時最好不要使用getopts
:
#!/bin/bash
while [[ $# -gt 0 ]]; do
case "$1" in
-c)
FLAG=1
;;
-h)
HOST=$2
shift
;;
-*)
echo "Unknown option: $1"
exit 1
;;
*)
HOST=$1
;;
esac
shift
done
順便說一句,由於您錯過了兩個分號,因此腳本會給您帶來語法錯誤:
c) FLAG=1 ;;
我通過應用一些額外的驗證解決了我的問題。
#!/bin/bash
USAGE() {
echo "Invalid Option"
exit 1
}
if [ $# -eq 2 ]; then
case $1 in
-c) FLAG=1; host=$2 ;;
-h) host=$2 ;;
esac
if [ -z "$host" ]; then
case $2 in
-c) FLAG=1; host=$1;;
-h) host=$1;;
*) USAGE;;
esac
fi
else
while getopts q:c:h: OPTION
do
case ${OPTION} in
q) USAGE;;
h) host=$OPTARG;;
c) FLAG=1 ;;
*)USAGE;;
esac
done
fi
if [ $# -eq 1 ]; then host=$1 ;fi
echo Host = $host FLag = $FLAG
在所有情況下,如輸出所示,我都在腳本中獲取主機。
$ ./myscript.sh server1
Host = server1 FLag =
$ ./myscript.sh -c server1
Host = server1 FLag = 1
$ ./myscript.sh server1 -c
Host = server1 FLag = 1
$ ./myscript.sh server1 -h
Host = server1 FLag =
$ ./myscript.sh -h server1
Host = server1 FLag =
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.