2017-11-07 1 views
0

ftp 연결이 실패하거나 egrep을 사용하여 성공한 경우 나를 반환하는 bash 스크립트를 실행하고 있습니다. 문제는 egrep로 단어를 가져 오려고 할 때 0을 반환하지만 명령을 수동으로 실행하면 2.egrep은 bash 스크립트에서 0을 리턴하지만 올바른 값을 리턴하는 명령을 수동으로 실행 중입니다. 유닉스 bash

를 반환하면이 내 코드입니다 :

ftp_results_id은 egrep을 -c 명령에 0을 반환,하지만 난 그것을 실행 후 수동으로 실행하고 파일 "FTP_RESULTS"를 작성하고 노력하고 있어요
#Create the FTP Connection. 
for ip_address in ${IP_ADDRESS[@]}; do 
    ftp ${ip_address} <<ftp_commands > ${FTP_RESULTS} 
    user "${USER_ID}" "${USER_PASSWORD}" 
    pwd 
    bye 
ftp_commands 

ftp_result_id=`egrep -c "Login failed|Connection refused|Not connected|Connection timed out" ${FTP_RESULTS}` 

if [ ${ftp_result_id} -gt 0 ]; then 
    echo "$(date +%m/%d/%y_%H:%M:%S) - ${ip_address} - Not connected" >> ${CONNECTION_RESULTS_FILE} 
else 
    echo "$(date +%m/%d/%y_%H:%M:%S) - ${ip_address} - Connected" >> ${CONNECTION_RESULTS_FILE} 
fi 

done 

, 그것은 "연결되지 않았습니다"와 일치하는 2 건을 찾았다 고 가정합니다.

어떤 제안이 있습니까?

+0

grep -Eq'를 사용하고 종료 코드 – anubhava

+0

@anubhava grep -Eq가 아무 것도 반환하지 않습니다 ... –

+0

모든 명령과 마찬가지로 유용한 종료 코드가 반환됩니다. grep -Eq "your terms"yourfile; then echo "그것은 일치했다"; fi' –

답변

1

egrep -c 명령은 일치를 계산합니다. 그런 다음 일치 항목이 0 개 이상인 경우 조건을 사용하여 작업을 수행합니다.

더 간단하고 나은 해결책은 egrep의 종료 코드를 사용하는 것입니다. egrep은 일치 항목을 찾으면 이고 0이 아니면 0 (성공)으로 종료됩니다. 당신은이 같은 if 문을 작성할 수 있습니다

if egrep -q "Login failed|Connection refused|Not connected|Connection timed out" "${FTP_RESULTS}"; then 

이것은 당신의 게시 된 코드의 논리에 해당합니다. ftp_result_id 변수가 필요하지 않습니다. egrep의 출력을 저장할 필요가 없습니다. egrep이 출력을 생성하지 않도록 -q 플래그를 추가했습니다. 필요 없음.

관련 문제