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
他の問題があるかもしれませんが、これ以上見ると目が痛すぎます。