script.sh
次のシェルスクリプトがあります。
names=( jack john jerry)
ユーザーは、次のように最初の引数としてこれら3つの名前のいずれかを入力したいと思います。
./script.sh jack
たとえば、ユーザーが文字を誤って入力した場合
./script.sh kate
これはaを実行しexit
、ユーザーにこれら3つのうちの1つだけを入力するように要求します。
どうすればいいですか?
ベストアンサー1
names=(jack john jerry);
if [[ " "${names[@]}" " == *" "$1" "* ]] ;then
echo "$1: ok"
else
echo "$1: not recognized. Valid names are:"
echo "${names[@]/%/,}"
exit 1
fi
上記のコードはスペースを含まない名前で動作します。
以下の修正バージョンは名前のスペースを処理します。
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
空白認識バージョンの出力:
flash jack: ok
または
kate: not recognized. Valid names are:
flash jack, john, jerry,