ifステートメントでコマンドを条件として使用している間にbashスクリプトを作成する方法は?

ifステートメントでコマンドを条件として使用している間にbashスクリプトを作成する方法は?

HTMLフォームの入力を処理するためのbashスクリプトを作成しています。

最初の問題は、コマンドを条件として使用するとif文が機能しないことです。中間イニシャルへのユーザー入力を確認し、$answerにマージできるように調整しようとしています。

以下は、これをどのように処理するかについての例です。

ユーザーは、HTMLフォームに名前、中間イニシャル、姓の3つのフィールドを入力します。

名前: George
中間イニシャル: W.
城: Bush

シェルスクリプトはユーザー入力を処理し、実際の答えと比較します。実際の答えは「ジョージW.ブッシュ」だ。

ユーザー入力:
George W. Bush =正しいエコ「あなたは正しいです!」
George W. Bush = "W"の後にピリオドを自動的に追加して、正しい
George W. Bush! =「中間イニシャルなし!」
バス!=エラーとエコ「姓と名前が間違っています!」

#! /bin/bash
echo Content-type: "text/html"
echo ""

read input #name variable $first, $middle, $last name

first=`user input`
middle=`user input`
last=`user input`

president=`actual answer, full name of president`
answer=`user answer, combination of $first, $middle, $last`

correctF=`actual first name from $president`
correctM=`actual middle initial from $president`
correctL=`actual last name from $president`
#cut by column from $president

最初の質問はここから始まります。

if [[ $(echo $middle | wc -l) = 1 ]] ; then
    middle=`echo "$middle""."` 
    #check if middle initial variable was entered with just the letter and place a period after
elif [[ $(echo $middle | grep '.') = 'true' ]] ; then
    middle=`echo "$middle"`
    #check if middle initial variable was entered with the period and leave it as is
else
    middle=`'false'`
    #no middle initial variable was entered and is null
fi

whileループとif文の2番目の問題です。

ユーザー入力$answerを実際の回答$presidentと比較し、$answerの問題を再度反転したいと思います。このセクションの内容はエコーされません。

while [ "$president" -ne "$answer" ] #not working
    do
            if [ "$first" -ne "$correctF" ]
                    then
                            echo "Wrong first name!"
            elif [ "$middle" -ne "$correctM" ]
                    then
                            echo "Wrong middle initial!"
            elif [ "$last" -ne "$correctL" ]
                    then
                            echo "Wrong last name!"
            elif [ -z "$middle" -ne "$correctM" ]
                    then
                            echo "No middle initial!"
            elif [ "$first" -ne "$correctF" ] && [ "$last" -ne "$correctL" ]
                    then
                            echo "Wrong first and last name!"
            elif [ "$first" -ne "$correctF" ] && [ "$middle" -ne "$correctM" ]
                    then
                            echo "Wrong first name and middle initial!"
            elif [ "$middle" -ne "$correctM" ] && [ "$last" -ne "$correctL" ]
                    then
                            echo "Wrong middle initial and last name!"
            elif [ "$first" -ne "$correctF" ] && [ "$middle" -ne "$correctM"] && [ "$last" -ne "$correctL" ]
                    then
                            echo "You got it all wrong!"
                    else
                            echo "You are correct!"
            fi

if文条件にコマンドを正しく実装し、複数の条件を含むif文を作成する必要があります。

ベストアンサー1

Casは、「このスクリプトには誤りが多すぎて、どこから始めるべきかさえわかりません...」と言いました。いいですね。どこから始めるべきかいくつかのアイデアがあります。

  • スクリプトをデバッグしてから疑似コードを公開するように依頼しないでください。最初のコードブロックには機能しないバックティック( `)が含まれています。
  • もっと明確に説明してください。 「ifステートメントを操作できません」は私たちにとってあまり役に立ちません。どうしたの?
  • "$middle"妥当な理由がなく、実行している操作がわからない限り、常にシェル変数参照(例:)を引用する必要があります。
  • $(echo "$middle" | grep '.')'true'"$middle"等しい場合にのみ同じですtrue。の出力は  grep次のとおりです。コンテンツ引数として指定されたパターンに一致する入力の行数。
  • .「すべての文字」を意味するパターンなので、空白ではgrep '.'なくすべての入力行に一致します。実際の期間を確認してください(.)、使用grep '\.'。これは、等にのみW.一致するものではありません。.W...3.14159
  • なぜ一つ作りたいですかwhile?このコードを何度も実行しますか?同じデータを繰り返すと、他の結果が出ると思いますか?サイクルはどこで終わりますか?
  • -eqそして-ne整数の使用を比較するときにのみ使用してください。=そして!=文字列の場合。
  • どういう意味ですか?-z STRING1 -ne STRING2

他の問題があるかもしれませんが、これ以上見ると目が痛すぎます。

おすすめ記事