私は4つの単語を必要とするスクリプトを書く必要がある小さな課題を実行しています。
私の問題は、私の出力で答えとして誤った説明を提供しないことです。 ifに入力した内容はすべてtrueで、最初に承認されたエコーステートメントを提供します。変数の設定に問題があるか、かっこに問題がありますか?私は完全なifセクションのさまざまなバリエーションを試しましたが、エラー出力を削除できないようです。また、構文チェックソースとしてシェルチェックを使用しましたが、スクリプトが正しく実行されていることを示しています。どんな助けでも大変感謝します。これが私が書いたものです。
#!/bin/bash
varname1=even
varname2=odd
varname3=zero
varname4=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" -eq $varname1 ) || ("$varword" -eq $varname2 ) || ("$varword" -eq $varname3 ) || ("$varword" -eq $varname4 ) ]]
then
echo "The approved word you have selected is $varword ."
else
echo "The unapproved word you have selected is $varword . Please try again."
fi
答え1
=
代わりに文字列比較に使用されます-eq
。
if [[ ("$varword" = "$varname1" ) || ("$varword" = "$varname2" ) || ("$varword" = "$varname3" ) || ("$varword" = "$varname4" ) ]]
または正規表現を使用してください。
if [[ $varword =~ ^(even|odd|zero|negative)$ ]] ; then
答え2
select
Bash 組み込み機能の使用
# Ask the user for one of four select words
PS3="Select one of the words: "
select choice in even odd zero negative; do
[[ -n $choice ]] && break
done
echo "The approved word you have selected is $choice ."