shell获取解析参数

时间:2014-08-18 03:36:47

标签: linux shell unix

我想使用我的shell脚本:

myscript.sh -key keyValue

如何获得 keyValue ? 我尝试了getopts,但它要求key是一个字母!

3 个答案:

答案 0 :(得分:0)

使用手动循环,例如:

while :; do
  case $1 in
    -key)
      shift
      echo $1
      break
    ;;
    *)
      break
  esac  
done

答案 1 :(得分:0)

无需使用getopts

while [ "$#" -gt 0 ]; do
    case "$1" in
    -key)
        case "$2" in
        [A-Za-z])
            ;;
        *)
            echo "Argument to $1 must be a single letter."
            exit 1
            ;;
        esac
        keyValue=$2
        shift
        ;;
    *)
        echo "Invalid argument: $1"
        exit 1
        ;;
    esac
    shift
done

如果你的shell是bash,它可以像这样简化:

while [[ $# -gt 0 ]]; do
    case "$1" in
    -key)
        if [[ $2 != [A-Za-z] ]]; then
            echo "Argument to $1 must be a single letter."
            exit 1
        fi
        keyValue=$2
        shift
        ;;
    *)
        echo "Invalid argument: $1"
        exit 1
        ;;
    esac
    shift
done

答案 2 :(得分:0)

我真的认为值得学习getopts:从长远来看,你将节省大量时间。

如果您使用getopts,那么它需要短版本的交换机为单个字母,并以单个“ - ”为前缀;长版本可以是任何长度,并以“ - ”为前缀。因此,只要您对

感到满意,就可以使用getopts获得您想要的内容
myscript.sh --key keyValue

这是getopts坚持的有用行为,因为这意味着您可以将许多交换机连接在一起。如果“ - ”表示短单字母开关,则“-key”表示与“-k -e -y”相同,这是一种有用的简写。