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; }