Seu primeiro problema é:
let TESTCASE="UNSET_INTEGER_VARIABLE_NAME"
let lida com matemática. As atribuições feitas em uma instrução let atribuirão valores inteiros. Em um contexto aritmético de shell, os valores FIRST , SECOND , THIRD que você está atribuindo a $TESTCASE all são avaliados como zero porque são considerados nomes de variáveis não definidos - não valores literais.
unset FIRST
let TESTCASE=FIRST
echo "$TESTCASE"
0
... ou ...
FIRST=10
let TESTCASE=FIRST
echo "$TESTCASE"
10
Assim, todas as atribuições atribuídas ao mesmo valor são $TESTCASE , a menos que qualquer variável chamada FIRST , SECOND , THIRD ou INITIAL esteja export ed em seu ambiente antes de ser executada. / p>
Para atribuir a string FIRST à variável do shell $TESTCASE , você deve fazer:
TESTCASE=FIRST
echo "$TESTCASE"
FIRST
Você também pode considerar case :
logonerror(){
case $TESTCASE in
(1) : logging commands relevant to 1st test case
;;
(2) : logging commands relevant to 2nd test case
;;
(3) : logging commands relevant to 3rd test case
;;
esac; : logging commands relevant to all test cases
}
testing()
case $TESTCASE in
(1) : do some testing
;;
(2) : do some testing
;;
(3) : do some testing
;;
esac
trap cleanup EXIT
{ trap 'logonerror >&2; exit' PIPE
for TESTCASE in 1 2 3; do testing; done >&2;:
}|{ read -t 7200; kill -PIPE -0; }