Bash 스크립트 $variable 콘텐츠가 비어 있음을 나타냅니다.

Bash 스크립트 $variable 콘텐츠가 비어 있음을 나타냅니다.

$RESPONSE 변수는 if 블록에 나타나지 않습니다. 내 코드에서 나는 정확하게 주석을 달았습니다.

#!/bin/bash

TIME=`date +%d-%m-%Y:%H:%M:%S`
cat sites.txt | while read site
do
    URL="http://$site"
    RESPONSE=`curl -I $URL | head -n1`
    echo $RESPONSE #echo works
    if echo $RESPONSE | grep -E '200 OK|302 Moved|302 Found' > /dev/null;then
        echo "$URL is up"
    else
        #$RESPONSE variable empty. Returns [TIME] [URL] is DOWN. Status:
        echo "[$TIME] $URL is DOWN. Status:$RESPONSE" | bash slackpost.sh
    fi  
done

$RESPONSE 텍스트를 파이프하는 방법에 대한 아이디어가 있습니까? $RESPONSE는 컬과 같은 문자열을 보유합니다: (6) 호스트를 확인할 수 없습니다.....또는 HTTP.1.1 200 OK

답변1

스크립트가 작동합니다. 당신 말이 sites.txt맞다고 확신하시나요? 예를 들어 다음과 같이 시도했습니다.

$ cat sites.txt 
google.com
unix.stackexchange.com
yahoo.com

스크립트를 로 저장 foo.sh하고 위 파일에서 실행하면 다음과 같습니다.

$ foo.sh 2>/dev/null
HTTP/1.1 302 Found
http://google.com is up
HTTP/1.1 200 OK
http://unix.stackexchange.com is up
HTTP/1.1 301 Redirect
[10-03-2017:20:49:29] http://yahoo.com is DOWN. Status:HTTP/1.1 301 Redirect

그런데 위에서 볼 수 있듯이 리디렉션되는 yahoo.com에서는 실패합니다. 아마도 더 좋은 방법은 ping을 사용하여 확인하는 것입니다. 다음과 같은 것(다른 일반적인 개선 사항 포함):

while read site
do
    if ping -c1 -q "$site" &>/dev/null; then
        echo "$site is up"
    else
        echo "[$(date +%d-%m-%Y:%H:%M:%S)] $site is not reachable."
    fi  
done < sites.txt

상태가 정말로 필요한 경우 다음을 사용하십시오.

#!/bin/bash

## No need for cat, while can take a file as input
while read site
do
    ## Try not to use UPPER CASE variables to avoid conflicts
    ## with the default environmental variable names. 
    site="http://$site";
    response=$(curl -I "$site" 2>/dev/null | head -n1)
    ## grep -q is silent
    if grep -qE '200 OK|302 Moved|302 Found|301 Redirect' <<<"$response"; then
        echo "$site is up"
    else
        ## better to run 'date' on the fly, if you do it once
        ## at the beginning, the time shown might be very different.
        echo "[$(date +%d-%m-%Y:%H:%M:%S)] $site is DOWN. Status:$response" 
    fi  
done < sites.txt

관련 정보