"if"를 제거하여 스크립트를 디버깅하려면 어떻게 해야 합니까?

"if"를 제거하여 스크립트를 디버깅하려면 어떻게 해야 합니까?

다음 코드가 있습니다.

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

  1. debug=$?모든 명령에서 평가되지는 않습니다. 따라서 값은 debug스크립트 전체에서 동일합니다.
  2. 함수의 반환 코드는 마지막 명령의 반환 코드입니다. 따라서 return 문은 의미가 없습니다.

요약하면 이와 같은 작업은 a && b && c성공하면 실행되고, 성공하면 실행됩니다. 이 복합 명령의 반환 코드는 각 함수의 0이 아닌 첫 번째 반환 코드입니다.bacb

관련 정보