HTML 양식의 입력을 처리하기 위해 bash 스크립트를 작성 중입니다.
첫 번째 문제는 명령을 조건으로 사용할 때 if 문이 작동하지 않는다는 것입니다. 중간 이니셜에 대한 사용자 입력을 확인하고 $answer에 병합될 수 있도록 조정하려고 합니다.
다음은 이를 어떻게 처리해야 하는지에 대한 예입니다.
사용자는 HTML 양식에서 이름, 중간 이니셜, 성의 세 가지 필드를 입력합니다.
이름: 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 문의 두 번째 문제입니다.
사용자 입력 $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
다른 문제가 있을지도 모르지만, 더 이상 이것을 보기에는 눈이 너무 아프다.