스크립트가 원치 않는 출력을 반환합니다.

스크립트가 원치 않는 출력을 반환합니다.

이것이 내가 현재 가지고 있는 것(상단 bash 창)과 구문이 반환하는 것(하단 bash 창)입니다.

"xyz"와 같이 이름이 존재하지 않는 경우 적절한 응답을 반환합니다.

"joel"과 같은 이름이 존재하는 경우 올바른 응답을 제공하기 전에 원치 않는 응답을 에코합니다.

내가 무엇을 놓치고 있나요?

name=$1
OUTPUT=$(grep -i $name ~uli101/2016c/phonebook)

if [ "$name" = "" ]

then echo -n "Enter a name to search for: "

        read name

fi



if [ $? -ne 1 ]

then echo "Name $name not in directory"

fi

grep -i $name ~uli101/2016c/phonebook
~
:~/scripts> phone4 xyz
Name xyz not in directory
:~/scripts> phone4 joel
Name joel not in directory
SHAPRIO JOEL                SH      4802   BUSINESS STUDIES DIVISION
:~/scripts> 

답변1

스크립트는 이름을 찾을 수 없다고 보고한 다음 이름이 존재한다고 보고합니다. 이는 귀하의 상태 때문입니다 if [ $? -ne 1 ]. "$?"는 스크립트의 마지막 표현식의 반환 코드를 나타냅니다. 이 경우 이전 "if" 블록의 반환 코드입니다.

원하는 결과를 얻으려면 첫 번째와 두 번째 "if" 블록 사이에서 "grep" 명령을 이동하십시오. 이런 식으로 두 번째 "if"는 grep의 결과를 평가합니다. grep이 결과를 찾으면 해당 결과를 인쇄하고 반환 코드는 0이 되며 블록을 건너뜁니다. grep이 결과를 찾지 못하면 아무 것도 인쇄하지 않고 반환 코드는 1이 되어 실행 조건이 발생합니다.

답변2

모든 버전이 아님grep~에 대해 알고 있다-큐 제가 사용하는 약간의 비결은 명령의 상태에만 관심이 있을 때 명령 앞에 "nohup"을 붙이는 것입니다. 왜냐하면 제가 게으르고 "리디렉션 방법"을 잊어버렸기 때문입니다.

노스햅웨이

nohup grep -i string_arg file_args >/dev/null
status=$?

리디렉션 방법

grep -i string_arg file_args  2>&1 >/dev/null
status=$?

관련 정보