getopt使用例子


絕大多數腳本使用getopts應該就可以滿足需求了,如果需要支持長選項以及可選參數,那么就需要使用getopt了.

getopt和getopts類似,也是通過冒號來區分選項是否接受參數值,其定義如下:

后面沒有冒號,表示選項不接參數
后面有一個冒號,表示選項必須接參數
后面有兩個冒號,表示選項參數可選
我們來看一下這個命令

example.sh -a -b value2 --argv3 value3
我們看到這個命令有兩個短選項和一個長選項,分別是-a,-b和--argv3,其中a不接收參數,b和argv3接收參數,我們看一下如何在腳本里面進行定義

ARGS=`getopt -o ab: -l "argv3:,help"  -- "$@"`
eval set -- "${ARGS}"

因為getopt是一個獨立的程序,所以我們使用``來進行getopt的執行和結果獲取,並通過eval set將規范化后的命令行參數分配至位置參數(1,1,2,...)

其中-o或--options選項后面接可接受的短選項;-l或--long選項后面接可接受的長選項,用逗號分開

一個完整的示例腳本如下:

#!/bin/bash

ARGS=`getopt -o ab: -l "argv3:,help" -- "$@"`
eval set -- "${ARGS}"

while true;
do
    case "$1" in
        -a) 
            echo "i am a"
            shift
            ;;
        -b) 
            echo "i am b, my value is $2" 
            shift 2
            ;;
        --argv3)
            echo "i am argv3, my value is $2"
            shift 2
            ;;
        --help)
            echo "i am help info"
            exit 0
            ;;
        --)
            shift
            break
            ;;
        *)
            echo "Internal error!"
            exit 1
            ;;
    esac
done

if [[ $# -eq 0  ]];then
    USAGE
fi

ARGS=`getopt -o d: -l "prepare,cleanup,ip:,sleep:,help" -- "$@"`
eval set -- "${ARGS}"

while true;
do
    case "$1" in
        --prepare)
			echo "prepare"
            ENV_PREPARE
			exit 0
            ;;
        --cleanup)
			echo cleanup
			ENV_CLEAN
			exit 0
            ;;
        --ip)
			SERVER_IP=$2
            shift 2
			;;
        --sleep)
			SLEEP_TIME=$2
            shift 2
			;;
        --help)
			USAGE
            exit 0
            ;;
        -d)
			DO_CASE $2
			if [[ $? -eq 0 && ! -z $SLEEP_TIME ]];then
				#只有server需要獲取結果
			   GET_RESULT
			fi
            shift 2
            ;;
        --)
            shift
            break
            ;;
        *)
            echo "Internal error!"
            exit 1
            ;;
    esac
done


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM