複数の単語と単語のバリエーションの出力を提供するスクリプトを取得しようとしています。変数に-oを追加し、単語を引用して、一緒にリンクしてみました。 varnameの各単語は私に出力したい表示単語です。この問題を解決する方法はありますか?または、各変数を個別に設定する必要がありますか?例: varname1=even varname2=Even varname3=EVEN など。
#!/bin/bash
varname1=even -o Even -o EVEN
varrname2=odd -o Odd -o ODD
varname3=zero -o Zero -o ZERO
varname4=negative -o Negative -o NEGATIVE
# Ask the user for one of four select words
echo "Type one of the following words:"
echo "even, odd, zero, negative"
read varword
if [[ ("$varword" = $varname1 ) || ("$varword" = $varname2 ) || ("$varword" = $varname3 ) || ("$varword" = $varname4 ) ]]
then
echo "The approved word you have selected is $varword, great work! "
else
echo "The unapproved word you have selected is $varword, Please try again."
fi
答え1
echo "Type one of the following words:"
echo "even, odd, zero, negative"
while :; do
read varword
varword="${varword,,}" #downcase it
case "$varword" in
even|odd|zero|negative)
echo "The approved word you have selected is $varword, great work! "; break;;
*)
echo "The unapproved word you have selected is $varword, Please try again.";;
esac
done
答え2
変数に複数の値を格納する1つの方法は配列です。これはbashで配列変数を使用する方法のドキュメントです。
しかし、あなたが望むのは、大文字と小文字を区別しない一致のようです。これはによって達成することができますgrep -iq
。i
grepに、大文字と小文字を区別せずにq
trueまたはfalseのみを返す必要があることをgrepに指示します。また、\|
grep句でor演算子を使用して複数の単語を一致させることもできます。最後に、この文字列表記 <<< を使用して変数を grep に直接指定します。これにより、スクリプトが大幅に簡素化されます。
#!/bin/bash
# Ask the user for one of four select words
echo "Type one of the following words:"
echo "even, odd, zero, negative"
read varword
if grep -iq "even\|odd\|zero\|negative" <<< "$varword"
then
echo "The approved word you have selected is $varword, great work! "
else
echo "The unapproved word you have selected is $varword, Please try again."
fi