sh não é bash, então não execute um script bash com sh. Execute-o com ./filename
(requer que o script seja executável e use o shebang) ou bash ./filename
(requer apenas que o script seja legível e o shebang seja ignorado).
Também não é uma boa ideia usar extensões para scripts, especialmente não .sh
quando o script não é um script sh.
O próprio script usa a sintaxe compatível com POSIX sh, com exceção do comando [
que não tem nenhum operador ==
no POSIX. Para comparar duas strings por igualdade com o comando [
, o operador é =
. [ "$?" = 0 ]
.
Dito isto, testar se $?
é 0 ou não é um pouco inútil. É melhor apenas testar o comando diretamente, em vez de executar o comando, e executar outro comando para determinar se o comando anterior foi bem-sucedido.
if ifconfig "$interface" down > /dev/null; then
...
else
...
fi