A resposta de Gilles é (IMHO) brilhante (como sempre), mas desde que você não escolheu ou até mesmo vota, talvez ache muito complicado. Então, aqui estão alguns pontos (simples) que podem ou não ser úteis, e podem ajudá-lo a evitar a manutenção de dois scripts separados, o que pode se transformar em loucura para um script grande que deve ser mantido por um longo período de tempo. p>
1) As máquinas AIX podem ter bash
instalado, embora não seja o shell padrão para uso interativo. (As máquinas AIX com as quais eu trabalho têm bash
instalado, mas não sei se veio dessa maneira dos administradores de sistemas. Acredito que veio, já que todos os nossos administradores de sistemas são ksh
junkies. ) E estou disposto a apostar que as máquinas RHEL têm ksh
instalado. Verifique isso, porque se você puder usar o mesmo shell em ambas as máquinas, você economizará um lote de problemas.
2) Se você não sabe onde o shell vai ser instalado, evite colocar seu caminho diretamente na linha shebang. Em vez disso, coloque o caminho para env
e o nome do executável do shell, assim:
#!/usr/bin/env bash
Isso deve funcionar nas duas máquinas, mas você terá que testá-lo para ter certeza. (O local para env
é supostamente mais padrão do que o local para bash
ou a maioria das outras coisas.)
Quando você estiver usando o mesmo shell em ambas as máquinas, o problema poderá ser resolvido ali mesmo. Mas se não ...
3) Você pode dividir o seu código específico da plataforma em funções que você fonte no script principal. Isso significa que, embora o script possa ter lotes de locais em que as coisas funcionem de maneira diferente, dependendo de estar sendo executado no AIX ou RHEL, não é necessário verificar repetidamente a plataforma. Basta fazer isso uma vez e criar as funções apropriadas:
case $OS in
"AIX")
source aix_functions;;
"Linux")
source redhat_functions;;
"*")
echo "Exiting. The OS type is not found.";;
esac
Agora, você pode usar as funções de origem, em todo o seu script, sem precisar ter outra instrução case
para diferenciar as plataformas:
do_something_platform_specific "$SOME_ARGUMENT" "$SOME_OTHER_ARGUMENT"