bashでロングオプションとショートオプションの両方に対応する


getoptsを利用します。
getoptsの引数の後ろに:をつけるとOPTARG変数にその値が保持されるので、-の後ろにつけてロングオプションに対応します。

sample.sh
#!/bin/bash

help() {
    echo help
}

version() {
    echo version
}

while getopts ":vh-:" opt; do
    case "$opt" in
        -)
            case "${OPTARG}" in
                help)
                    help
                    ;;
                version)
                    version
                    ;;
            esac
            ;;
        h)
            help
            ;;
        v)
            version
            ;;
    esac
done

実行

$ ./sample --help
help
$ ./sample -h
help
$ ./sample --version
version
$ ./sample -v
version

以下の記事を参考にさせていただきました。

bash によるオプション解析 - Qiita