Você está perdendo alguns espaços.
-
if[ "$1" -eq "Server" ];
-
elif[ "$1" -eq "Default" ]; then
Estes devem ser um espaço após as palavras-chave if
e elif
.
-
for((i=1; i <= $2; ++i)); do
Isso (falta de espaço após for
) não é estritamente um erro, mas deve ser corrigido para consistência com o resto do código.
Você também está usando -eq
para comparações de strings. Para comparar strings, use =
( -eq
compara inteiros):
if [ $choice = "Yes" ]; then
Eu também não sei o que você gostaria que isso fizesse:
user_input routers[@] router_number R
Você pode querer
routers=( $(user_input "$router_number" R) )
ou algo similar (e modifique sua função user_input
para corresponder a isso).
Você também deve duplicar as expansões variáveis. Consulte " Implicações de segurança do esquecimento para citar uma variável em shells bash / POSIX "sobre o porquê.
Cole seu script no ShellCheck para obter uma lista mais completa de possíveis problemas: link
Como uma dica geral, você pode querer testar o seu script enquanto o desenvolve, apenas para ter certeza de que o que você acabou de escrever realmente funciona. Ao contrário de escrever um roteiro completo antes de testá-lo.
Outra dica para evitar if
- then
- elif
bits é usar case ... esac
:
case "$1" in
Router)
echo 'How many routers?'
read router_number
# etc.
;;
Switch)
# stuff for switches
;;
Host)
# stuff for hosts
;;
*)
echo 'Something is wrong' >&1
exit 1
;;
esac
Isso também permite uma fácil correspondência de padrões. R*)
em um "rótulo de caso" corresponderá a Router
e qualquer outra sequência que comece com R
. R*|H*)
corresponderia a qualquer string que começasse com R
ou H
, etc.