Bash에서 어떻게 이런 일을 할 수 있나요?
if "`command` returns any error";
then
echo "Returned an error"
else
echo "Proceed..."
fi
답변1
명령이 성공하거나 실패할 경우 조건부로 작업을 수행하는 방법
이것이 바로 bash if
문이 하는 일입니다:
if command ; then
echo "Command succeeded"
else
echo "Command failed"
fi
댓글에서 정보 추가: 귀하아니요이 경우 ... 구문을 사용해야 합니다 [
. 는 그 자체로 와 거의 동일한 명령입니다. 아마도 에서 가장 일반적으로 사용되는 명령이므로 쉘 구문의 일부라고 가정할 수 있습니다. 그러나 명령이 성공했는지 테스트하려면 위와 같이 명령 자체를 와 함께 직접 사용하십시오.]
[
test
if
if
답변2
쉘 명령이 작동할 때 발생하고 싶은 작은 일의 경우 다음 &&
구성을 사용할 수 있습니다.
rm -rf somedir && trace_output "Removed the directory"
마찬가지로, 쉘 명령이 실패할 때 발생하고 싶은 작은 일을 위해 다음을 사용할 수 있습니다 ||
.
rm -rf somedir || exit_on_error "Failed to remove the directory"
아니면 둘다
rm -rf somedir && trace_output "Removed the directory" || exit_on_error "Failed to remove the directory"
이러한 구조로 너무 많은 작업을 수행하는 것은 현명하지 못할 수도 있지만 때로는 제어 흐름을 더 명확하게 만들 수 있습니다.
답변3
$?
가장 최근 명령/함수 실행 결과를 포함하는 selected 값 :
#!/bin/bash
echo "this will work"
RESULT=$?
if [ $RESULT -eq 0 ]; then
echo success
else
echo failed
fi
if [ $RESULT == 0 ]; then
echo success 2
else
echo failed 2
fi
답변4
if...then...fi
및 &&
/ 메소드 유형 은 ||
테스트하려는 명령이 반환한 종료 상태(성공 시 0)를 처리하지만 일부 명령은 명령이 실패하거나 입력을 처리할 수 없는 경우 0이 아닌 종료 상태를 반환하지 않습니다. 이는 일반적인 if
및 &&
/ ||
메소드가 이러한 특정 명령에서 작동하지 않음을 의미합니다.
예를 들어, Linux에서 file
GNU는 존재하지 않는 파일을 인수로 받고 find
사용자가 지정한 파일을 찾을 수 없는 경우에도 여전히 0으로 종료됩니다.
$ find . -name "not_existing_file"
$ echo $?
0
$ file ./not_existing_file
./not_existing_file: cannot open `./not_existing_file' (No such file or directory)
$ echo $?
0
이 경우 이 상황을 처리할 수 있는 가능한 방법 중 하나는 명령에서 반환된 메시지와 같은 메시지를 stderr
읽 거나 명령의 출력을 구문 분석하는 것 입니다 . 이 목적을 위해 명령문을 사용할 수 있습니다.stdin
file
find
case
$ file ./doesntexist | while IFS= read -r output; do
> case "$output" in
> *"No such file or directory"*) printf "%s\n" "This will show up if failed";;
> *) printf "%s\n" "This will show up if succeeded" ;;
> esac
> done
This will show up if failed
$ find . -name "doesn'texist" | if ! read IFS= out; then echo "File not found"; fi
File not found