Como posso escrever um script de shell HUSH que testa o resultado de cada comando?

1

Como posso fazer esse script revisar esse status dos comandos e sair se algum dos itens falhar:

#!/bin/sh
echo JFFS2 Preparation

cd /root

/root/config 1 > /root/formatted

if grep "PAR_JFFS2_FORMATTED = -1" /root/formatted; then
  echo Need to Format MTD2
  rm -f /root/formatted

  flash_eraseall -j /dev/mtd2

  echo Marking file system as formatted
  /root/config 1 1355270400

  mount -t jffs2 -o noatime /dev/mtdblock2 /mnt

  echo "Formmatted" > /mnt/formatted.txt

else
  mount -t jffs2 -o noatime /dev/mtdblock2 /mnt
fi
    
por Wayne Taylor 13.02.2017 / 22:56

2 respostas

1

Adicione set -e no início do script ou altere a linha #! para #!/bin/sh -e , o que terá o mesmo efeito.

Isso define a opção errexit shell, o que significa que o script sairá assim que um comando estiver retornando um status de saída diferente de zero, com as seguintes exceções (retiradas de a descrição POSIX de set ):

  1. A falha de qualquer comando individual em um multi-comando              a tubulação não fará com que o shell saia. Apenas o fracasso              do próprio gasoduto deve ser considerado.

  2. A configuração -e deve ser ignorada ao executar o composto              lista após a palavra reservada while , until , if ou elif , uma              pipeline começando com a palavra ! reservada ou qualquer comando              de uma lista AND-OR diferente da última.

  3. Se o status de saída de um comando composto diferente de um              O comando subshell foi o resultado de uma falha enquanto -e era              sendo ignorado, então -e não se aplicará a este comando.

Uma alternativa é adicionar || exit após cada comando que você deseja sair depois, se eles falharem. Por exemplo

flash_eraseall -j /dev/mtd2 || exit
    
por 13.02.2017 / 23:06
0

Após cada comando no bash, o código de retorno é armazenado na variável $? . Se o comando for bem sucedido, seu valor deve ser

successfulcommand    
echo $?
0

No caso de erro, o resultado é diferente de zero e varia dependendo do erro.

unsuccessfulcommand
echo $?
2
    
por 13.02.2017 / 23:05