Primeiro: linguagens de programação são seletivas sobre a sintaxe. Em sh / bash, o [
funciona como um comando autônomo (diferente de parens na maioria das outras linguagens), então ele precisa ser separado por espaços, assim como todos os seus argumentos. Portanto:
if [ "$command" = y ]; then
…
elif [ "$command" = n ]; then
…
fi
Segundo: muitos dos seus blocos de condições estão sem o fechamento fi
. É sempre if…then…fi
.
Terceiro: alguns de seus prompts verificam se há% min_y/n
, outros verificam maiúscula Y/N
. Você deve sempre aceitar as mesmas entradas em todos os lugares. Por exemplo:
# option 1 – make the variable lower-case
if [ "${command,,}" = y ]; then
…
# option 2 (bash-only) – use extended match
if [[ $command == @(y|Y) ]]; then
…
# option 3 (sh/bash) – use 'case' alternatives
case $command in
y|Y)
… ;;
n|N)
… ;;
esac
Quarto: <<EOF
redireciona entrada . O comando echo
não recebe nenhuma entrada (apenas linha de comando). Se preferir, use cat <<EOF
e não se esqueça de terminar o texto com uma linha EOF
.
Por fim, certifique-se de colocar o cabeçalho #!/bin/sh
ou #!/usr/bin/env bash
no topo de todos os seus scripts.