解析 Bash 中的参数

解析 Bash 中的参数

我有一个基本上解析文件的脚本。在执行这个脚本时,我想设置两个标志。

这是我的两种情况:我想设置--hello-you为一个标志,然后在其后采用两个强制参数: ./script.sh --hello-you <FILE> <PATH>

我想-h or --help提供帮助手册。 ./script.sh --help或者./script.sh -h 我知道 -h 或 --help 通过大小写 $1 很容易,但问题是当用户按下时--hello-you程序会识别为-h

答案1

最好忘记长选项并简单地使用getopts它来执行此操作,但否则您可以循环遍历位置参数,类似于:

#!/bin/bash

usage () {
    cat <<EOF >&2
    Usage: $(basename "$0") [-h] --hello-you FILE PATH
EOF
    exit 1
}

while (($#)); do 
    case $1 in
        --hello-you)
            file=$2
            path=$3
            shift 2
            [[ -z "$file" || -z "$path" ]] && usage
        ;;
        -h|--help)  usage;;
        *)          usage;;
    esac
    shift
done

echo "File is $file"
echo "Path is $path"

我不确定您之前尝试过什么,但大小写不会解释--hello-you-h.也许你的案例有类似的情况--h*)

此外,这只是检查filepath是否已设置,而不是检查它们是否是文件,但您可能需要根据您是否希望它们在脚本运行之前存在来执行此操作。它也根本不需要--hello-you设置,因为不清楚这是否是您的意图。

相关内容