Isso:
test.sh: line 22: syntax error: unexpected "(" (expecting "fi")
não é uma mensagem de erro que bash reporta. É um que o shell Almquist e seus derivados como dash ou busybox sh reportam:
$ grep -z '(expecting' /bin/dash
%s unexpected (expecting %s)
As conchas baseadas em ash não suportam matrizes, esse script é destinado a bash (3.2 ou superior), como indica o #!/bin/bash she-bang, embora pareça mais uma mistura entre bash , zsh e ksh93 sintaxe se for para verificar se há endereços IPv4 com quatro casas decimais em que as partes estão limitadas a 3 dígitos decimais (em bash , isso daria alguns erros sobre 008.008.008.008 , por exemplo).
Com a sintaxe% POSI sh padrão, que dash e bash reconhecem, você pode fazer em vez disso:
valid_ip() (
IFS=.
set -o noglob
set -- $1''
[ "$#" -eq 4 ] || exit
for i do
case $i in
("" | *[!0-9]*) exit 1;;
esac
[ "$i" -le 255 ] || exit
done
)