답변:
당신의 명령,
check=grep -ci 'text' file.sh
같은 쉘에 의해 해석됩니다 "명령을 실행 -ci
인수로 text
하고 file.sh
, 변수를 설정 check
값으로 grep
환경에."
쉘은 가장 최근에 실행 된 명령의 종료 값을 변수에 저장 ?
합니다. 다음과 같이 자신의 변수 중 하나에 값을 할당 할 수 있습니다.
grep -i 'PATTERN' file
check=$?
이 값으로 작업하려면 check
변수 를 사용할 수 있습니다.
if [ "$check" -eq 0 ]; then
# do things for success
else
# do other things for failure
fi
또는 별도의 변수를 사용하지 않고 $?
모두 함께 검사 해야 할 수도 있습니다.
if grep -q -i 'pattern' file; then
# do things (pattern was found)
else
# do other things (pattern was not found)
fi
( -q
, 그것은 grep
무언가를 출력하지 않고 무언가가 일치하는 즉시 종료 하도록 지시 합니다. 우리는 여기서 일치하는 것에 관심이 없습니다)
또는 패턴을 찾을 수 없을 때 "일을"하려는 경우 :
if ! grep -q -i 'pattern' file; then
# do things (pattern was not found)
fi
$?
다른 변수에 저장 은 다음 $?
과 같이에서 값을 덮어 쓴 경우 나중에 사용해야 할 경우에만 필요합니다 .
mkdir "$dir"
err=$?
if [ "$err" -ne 0 ] && [ ! -d "$dir" ]; then
printf 'Error creating %s (error code %d)\n' "$dir" "$err" >&2
exit "$err"
fi
위의 코드 스 니펫 $?
에서 [ "$err" -ne 0 ] && [ ! -d "$dir" ]
테스트 결과로 덮어 씁니다 . 여기에 저장하면 실제로 표시하고와 함께 사용해야하는 경우에만 필요합니다 exit
.
귀하의 질문은 명확하지 않지만 제출 한 코드를 기반으로 변수 check
가 grep
명령 의 종료 상태를 저장하는 것처럼 보입니다 . 이 작업을 수행하는 방법은
grep -ci 'text' file.sh
check=$?
쉘에서 명령을 실행할 때 종료 상태는 특수 쉘 매개 변수를 통해 사용 가능합니다 $?
.
이것은 셸 에 대한 사양 에 POSIX (유닉스 계열 운영 체제의 표준)에 의해 문서화되어 있으며 Bash 구현은 특수 매개 변수에 문서화되어 있습니다.
새로운 학습자이므로 기본 사항을 익히려면 좋은 책 및 / 또는 온라인 자습서로 시작하는 것이 좋습니다. 외부 리소스에 대한 권장 사항은 Stack Exchange 사이트에서 권장하지 않지만 Lhunath 및 GreyCat의 Bash Guide를 제안 합니다.
bash에게 check=grep
명령에 전달되는 환경 에서 변수를 설정하도록 지시 했습니다.
-ci 'text' file.sh
하지만 ci
존재하지 않습니다.
나는 그 명령을 백 틱으로 묶거나 달러 기호 앞에 괄호로 묶어야한다고 생각합니다.이 중 하나는 파일에서 '텍스트'가 발견 된 줄 수를 대소 문자를 구분하지 않습니다.
check=`grep -ci 'text' file.sh`
check=$(grep -ci 'text' file.sh)
이제 $check
어떤 경기가 있었다 전혀 일치하는 경우, 또는 긍정적 인 경우 0이어야한다.
출력을 확인할 때 왜 -c를 사용합니까? 성공 여부에 관계없이 일치하는 횟수를 확인하는 데 사용됩니다.
-c, --count
Suppress normal output; instead print a count of matching lines
for each input file. With the -v, --invert-match option (see
below), count non-matching lines. (-c is specified by POSIX.)
하지만이 예에서는
check="$(grep --silent -i 'text' file.sh; echo $?)"
종료 코드를 제외하고는 출력되지 않으며 에코됩니다. 변수 검사에서 사용하는 출력입니다. 또한 한 줄이기 때문에 선호합니다.
--silent를 -q로 바꿀 수 있습니다. grep 출력에 관심이 없기 때문에 작동하는지 여부에 관계없이 사용합니다.
-q, --quiet, --silent
Quiet; do not write anything to standard output. Exit
immediately with zero status if any match is found, even if an
error was detected. Also see the -s or --no-messages option.
(-q is specified by POSIX.)
$ check=$(echo test | grep -qi test; echo $?) # check variable is now set
$ echo $check
0
$ check=$(echo null | grep -qi test; echo $?)
$ echo $check
1
$?
명령이 완료된 직후 검사 할 수 있습니다 .