我正在处理一个 bash 脚本,我需要实现“选项”。我怎么能用 bash 做到这一点?
我的目标是按以下方式运行脚本:
/myscript.sh -d "/var/log/" -c "test"
我试过的:
while shift; do
case $1 in
-d)
shift&&DIR="$1"||die
;;
-c)
shift&&COMMAND="$1"||die
;;
esac
done
echo "$DIR"
echo "$COMMAND"
Run Code Online (Sandbox Code Playgroud)
Nic*_*ton 10
你的错误是你在循环的顶部移动,在你检查它之前抛出第一个参数。这就是我认为你可能的意思:
#!/bin/bash
while (( "$#" )); do
case $1 in
-d)
shift&&DIR="$1"||die
;;
-c)
shift&&COMMAND="$1"||die
;;
esac
shift
done
echo "$DIR"
echo "$COMMAND"
Run Code Online (Sandbox Code Playgroud)
要扩展@choroba 的答案,以下是如何使用的示例getopts
:
# parse the flag options (and their arguments)
while getopts c:d: OPT; do
case "$OPT" in
d)
DIR="$OPTARG" ;;
c)
COMMAND="$OPTARG" ;;
[?])
# got invalid option
echo "Usage: $0 [-d directory] [-c command]" >&2
exit 1 ;;
esac
done
# get rid of the just-finished flag arguments
shift $(($OPTIND-1))
Run Code Online (Sandbox Code Playgroud)
请注意,在移出标志参数后,任何“常规”参数都将保留。所以那时你可以处理它们(例如... for arg in "$@"; do ...
),或者如果你的脚本不接受它们,如果你得到任何(if [ $# -gt 0 ]; then echo "Usage ...
)。
归档时间: |
|
查看次数: |
24601 次 |
最近记录: |