if 문에서 명령을 조건으로 사용하는 동안 bash 스크립트를 작성하는 방법은 무엇입니까?

if 문에서 명령을 조건으로 사용하는 동안 bash 스크립트를 작성하는 방법은 무엇입니까?

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

다른 문제가 있을지도 모르지만, 더 이상 이것을 보기에는 눈이 너무 아프다.

관련 정보