Bash에서 기존 응답에 대한 오류 검사를 수행하는 방법은 무엇입니까?

Bash에서 기존 응답에 대한 오류 검사를 수행하는 방법은 무엇입니까?

city-data.com에서 일부 데이터를 삭제하려고 합니다. 나는 도시와 주를 얻고 싶습니다. 이것이 제가 할 수 있는 일입니다. 하지만 우편번호가 없으면 if/else를 실행할 수 없는 것 같습니다.

baseURL="https://www.city-data.com/zips"
errorResponse=" <title>Page not found - City-Data.com</title>"

location=$( curl -s -dump "$baseURL/$1.html" | grep -i '<title>' | cut -d\( -f2 | cut -d\) -f1 )

if $location = $errorResponse;
then
  echo "That zipcode does not exist"
  exit 0
else
  echo "ZIP code $1 is in " $location
fi

스크립트를 실행하면 다음과 같은 결과가 나타납니다.bash getZipcode.sh 30001

getZipecode.sh: line 10: <title>Page: command not found
ZIP code 30001 is in  <title>Page not found - City-Data.com</title>

10번째 줄은 if $location = $errorResponse;간결성을 위해 대본에 넣었던 작가명과 She-Bang을 삭제한 곳입니다.

누구든지 이 문제를 해결하도록 도와줄 수 있나요?

답변1

귀하의 진술이 잘못되었습니다 if. 다음을 시도해보세요.

baseURL="https://www.city-data.com/zips"
errorResponse=" <title>Page not found - City-Data.com</title>"

location=$( curl -s -dump "$baseURL/$1.html" | grep -i '<title>' | cut -d\( -f2 | cut -d\) -f1 )

if [ "$location" = "$errorResponse" ];
then
  echo "That zipcode does not exist"
  exit 0
else
  echo "ZIP code $1 is in " $location
fi

문제는 if 문을 실행할 때 프로그램이 변수의 내용을 경로의 시스템 명령인 것처럼 실행하려고 한다는 것입니다.

Bash에서 문자열을 비교하는 방법에 대한 자세한 내용은 다음을 확인하세요.여기.

답변2

대부분의 웹사이트와 마찬가지로 이 사이트는 페이지를 찾을 수 없을 때 404 HTTP 응답 코드를 반환하므로 보다 안정적인 방법으로 이 방법을 사용할 수 있습니다.

export ZIP="$1"
curl -sw '%{http_code} %{errormsg}\n' "https://www.city-data.com/zips/$ZIP.html" |
   perl -ne '
     $location = $1 if m{<title>.*?\((.*?)\)};
     if (eof) {
       if (/^(\d+) (.*)/) {
         if ($1 eq "200") {
           if (defined($location)) {
             print "ZIP code $ENV{ZIP} is in $location\n"
           } else {
             die "Can'\''t find location in the HTML\n";
           }
         } elsif ($1 eq "404") {
           die "That ZIP code does not exist\n"
         } else {
           die "HTTP error: $2\n"
         }
       } else {
         die "curl did not return an HTTP code\n"
       }
     }'

의 해석은 HTTP POST 요청 데이터로 전달되는 -dumpor 와 동일합니다 . curlHTML 페이지의 텍스트 렌더링을 덤프하는 // 옵션에 대해 혼동하셔야 합니다. 웹 브라우저가 아니고 HTML 렌더링을 수행하지 않으며, 수행하더라도 출력에서 ​​찾을 수 없습니다.-d ump--data umpump-dumplynxelinksw3mcurl<title>

HTTP 요청을 수행하는 데 이미 을 사용하는 perl대신 을 사용하고 있으므로 모듈을 curl사용할 수도 있습니다 . 그러면 오류 상황을 훨씬 더 쉽고 깔끔하게 처리할 수 있습니다.perlLWP

관련 정보