다음 코드가 있습니다.
debug=$?
function a {
su - javi -c "uptime"
return $debug
}
function b {
su - javi -c "cat /etc/redhat-release"
return $debug
}
function c {
su - javi -c "cat /etc/redhat-release"
return $debug
}
case $debug in
0)
a
if [ $debug == 0 ]; then
b
echo "se ejcuta la funcion"
elif [ $debug == 0 ]
c
elif[].... <-----this
fi
;;
1)
echo "se ha producido un error"
;;
esac
if를 제거하여 디버깅하는 방법이 있습니까? 나는 그들이 함수를 실행하기를 원하고 그것이 잘 끝나면 다른 함수로 점프하고 나쁘게 끝나면 escript를 남겨 둡니다. 즉, 5개의 함수가 있습니다
답변1
각 기능을 실행하고 오류를 방지하는 것이 목표라면 다음과 같이 작동할 수 있습니다.
function bail {
echo "se ha producido un error ($1)"
exit 1
}
function a {
uptime
}
function b {
cat /etc/redhat-release
}
function c {
cat /etc/redhat-release
}
for f in 'a' 'b' 'c'; do
$f || bail "$f: $?"
done
이는 각 함수를 실행하고 오류가 발생하면 함수 이름과 종료 코드가 함수로 전송되어 한 bail
줄을 인쇄하고 다른 명령을 종료합니다.
su
테스트하기가 더 쉽기 때문에 사용을 제거했습니다 . 이를 자동화하려면 sudo 프로필을 만들어 높은 권한으로 이러한 명령을 실행하는 것이 좋습니다. 그러면 비밀번호를 한 번만 입력하거나 전혀 입력할 필요가 없습니다.
답변2
debug=$?
모든 명령에서 평가되지는 않습니다. 따라서 값은debug
스크립트 전체에서 동일합니다.- 함수의 반환 코드는 마지막 명령의 반환 코드입니다. 따라서 return 문은 의미가 없습니다.
요약하면 이와 같은 작업은 a && b && c
성공하면 실행되고, 성공하면 실행됩니다. 이 복합 명령의 반환 코드는 각 함수의 0이 아닌 첫 번째 반환 코드입니다.b
a
c
b