O shell Bourne é um pouco antigo. A versão do Solaris não tem o operador -e
para o test
(a.k.a. [
) embutido que foi introduzido um pouco tarde na vida do shell Bourne® e consagrado pelo POSIX.
Como solução alternativa, você pode usar -f
para testar a existência de um arquivo normal ou -r
se não estiver interessado em arquivos ilegíveis.
Melhor, altere #!/bin/sh
para #!/usr/xpg4/bin/sh
ou #!/bin/ksh
para obter um shell POSIX.
Tenha em atenção que [ $option -eq 9 ]
provavelmente não está certo: -eq
é um operador de comparação numérica, mas $option
não é realmente numérico - é uma data. Em uma máquina de 32 bits, quando 201301271355
é interpretado como um número, é obtido o módulo 2 32 . Acontece que nenhuma data no século 21 está muito próxima de 0 módulo 2 32 , mas confiar nisso é muito frágil. Faça este [ "$option" = 9 ]
em vez disso.
Como um princípio geral de programação de shell, sempre coloca aspas duplas em torno das substituições de variáveis e comandos : "$foo"
, "$(foo)"
. Se você não fizer isso, o shell dividirá o resultado em cada caractere de espaço em branco e tratará cada palavra resultante como um padrão de caractere curinga de nome de arquivo. Portanto, um $foo
desprotegido só será seguro se o valor de foo
não contiver nenhum espaço em branco ou \[?*
. Jogue com segurança e sempre use aspas duplas (a menos que você pretenda que a divisão e a correspondência de padrões ocorram).
¹ Ou foi uma adição de ksh que nunca foi portada para Bourne? Não tenho certeza.