
HTML 형식의 입력을 처리하기 위해 bash 스크립트를 작성 중입니다.
첫 번째 문제는 명령을 조건으로 사용하는 동안 if 문이 작동하지 않는다는 것입니다. 중간 이니셜의 사용자 입력을 확인하고 $answer에 합칠 수 있도록 조정하려고 합니다.
다음은 처리 방법에 대한 예입니다.
사용자는 HTML 형식에서 세 가지 다른 필드를 입력합니다. 이름, 중간 이니셜, 성.
이름: George
중간 이니셜: W.
성: Bush
쉘 스크립트는 사용자 입력과 실제 답변을 처리하고 비교합니다. 실제 답변은 '조지 W. 부시'입니다.
사용자 입력:
George W. Bush = 올바른 에코 "당신이 맞습니다!"
George W Bush = "W" 뒤에 마침표를 자동으로 배치하여 수정합니다.
George Bush != 틀렸고 "중간 이니셜이 없습니다!"를 에코합니다.
Geor W. Bus != 틀림 및 에코 "이름과 성이 틀렸습니다!"
#! /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
if 문을 사용하는 while 루프의 두 번째 문제입니다.
사용자 입력 $답변을 실제 대답 $president와 비교하고 $답변의 문제점을 에코하려고 합니다. 이 섹션에서는 아무 것도 에코되지 않습니다.
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
다른 문제가 있을 수도 있겠지만, 이걸 더 이상 보기엔 눈이 너무 아프네요.