테스트해야 하는 일부 매개변수에 대한 종료 코드를 찾기 위해 이 스크립트를 만들었습니다. 이제 종료 코드를 확인하기 위해 이 스크립트를 호출하는 두 번째 스크립트를 만들어야 합니다. 그러나 두 번째 스크립트는 이 스크립트의 종료 코드를 읽은 다음 텍스트를 할당해야 합니다.
예:
통과 /etc/resolve.conf
한 후 다음을 사용하여 echo $?
돌아옵니다 .0
이제 나는 found file
에코 같은 것을 원합니다.
종료 코드를 찾는 첫 번째 스크립트입니다.
#/bin/bash
shopt -s -o nounset
if [ $# != 1 ]; then
exit 2
fi
if [[ ${1:0:1} = /* ]]; then
:
else
exit 3
fi
if [ -f ${1} ]; then
exit 0
else
exit 1
fi
이것이 내 두 번째 스크립트가 있는 곳입니다. ./script1.sh를 호출한 후 종료 코드 0을 = text로 설정하는 방법을 이해할 수 없습니다.
#/bin/bash
shopt -s -o nounset
./script1.sh
이 예제처럼 script1에 echo를 포함하는 것이 더 쉬울 것이라는 것을 알고 있지만 이 경우 두 번째 파일에서 읽어야 합니다.
if [ -f ${1} ]; then
echo "file found"
exit 0
else
echo "file not found"
exit 1
fi
답변1
전화하신 전화번호 script1.sh
는 다음과 같습니다.
./script1.sh
호출된 후 스크립트의 종료 코드는 $?
.
그러나 인수 없이 스크립트를 호출하면 스크립트 헤더에서 인수 수를 테스트하고 정확히 1이 아닌 한 오류 코드 2로 종료됩니다. 이는 귀하의 의견에서 언급한 동작과 일치합니다.
if [ $# != 1 ]; then
exit 2
fi
전화를 걸어 script1.sh
몇 가지 주장을 제기할 수도 있습니다. 기본 스크립트에서 받은 매개변수를 전달하려면 다음을 사용하세요.
./script1.sh "$@" # pass all arguments
또는
./script1.sh "$1" # pass the first argument
(후자는 기본 스크립트에 인수가 제공되지 않더라도 빈 문자열을 전달하지만)
사소한 문제로 변수 확장을 인용해야 합니다(예: "$#"
대신 $#
또는 대신 "${1}"
) . 그렇지 않으면 파일 이름에 공백이 포함되어 있거나 스크립트가 시작될 때 이상한 값으로 설정되어 있어도 스크립트가 실패합니다 ."$1"
${1}
$#
IFS
또한 대신
if something; then
:
else
exit 3
fi
당신은 쓸 수 있습니다
if ! something; then
exit 3
fi
답변2
이것이 두 번째 스크립트라고 가정해 보겠습니다.
#/bin/bash
shopt -s -o nounset
./script1.sh
result=$?
echo $result
변수에 할당하는 이유는 향후 처리를 위해 저장하기 때문입니다. 호출하면 $?
다른 프로그램과 관련이 있을 것입니다.
$?
이전 스크립트가 반환한 내용은 다음과 같습니다 .