我有一个这样的shell脚本script.sh:
names=( jack john jerry)
我希望用户输入这三个名称中的任何一个作为它的第一个参数,就像:
./script.sh jack
如果用户输入错误,例如
./script.sh kate
它将触发 aexit并要求用户仅输入这 3 个中的一个。
我该怎么办?
names=(jack john jerry);
if [[ " "${names[@]}" " == *" "$1" "* ]] ;then
echo "$1: ok"
else
echo "$1: not recognized. Valid names are:"
echo "${names[@]/%/,}"
exit 1
fi
Run Code Online (Sandbox Code Playgroud)
上面的代码适用于不包含空格的名称。
下面的修改版本可以处理名称中的空格。
names=("flash jack" john jerry);
d=$'\1' # validation delimiter - value is \x01
valid="${names[@]/%/$d}"
valid="$d${valid//$d /$d}"
if [[ $valid == *$d$1$d* ]] ;then
echo "$1: ok"
else
echo "$1: not recognized. Valid names are:"
echo "${names[@]/%/,}"
exit 1
fi
Run Code Online (Sandbox Code Playgroud)
空白感知版本的输出:
flash jack: ok
Run Code Online (Sandbox Code Playgroud)
或者
kate: not recognized. Valid names are:
flash jack, john, jerry,
Run Code Online (Sandbox Code Playgroud)