Eu tenho esse script de shell que não está funcionando.
Entrada:
Server_Name=1
if [ $Server_Name=1 ]; then
echo Server Name is 1
else
echo Server Name is not 1
fi
Resultado:
Server Name is 1
Mas, se eu mudar Server_Name=2
, a saída é:
Server Name is 1
Quando eu mudar Server_Name
para 2
, eu quero dizer: Server Name is 2
.
Eu sei que é a if [ $Server_Name=1 ];
parte.
Como faço para corrigir isso?
linux
bash
shell
shell-script
user2649805
fonte
fonte
if [ ! "x$var" = "x" ]; then\n if [ $var -eq 1 ]; then ...
Respostas:
Seu script indica que você está usando comparações de strings.
Suponha que o nome do servidor possa ser uma sequência em vez de apenas um número.
Para comparações de strings :
if [[ "$Server_Name" == 1 ]]; then
Notas:
Espaçar ao redor = é uma obrigação
if [ $Server_Name=1 ]; then
está ERRADO[[...]] reduz erros, pois não ocorre expansão de nome de caminho ou divisão de palavras entre [[e]]
Prefira citar cadeias de caracteres que são "palavras"
Para comparações de números inteiros :
if [[ "$Server_Name" -eq 1 ]]; then
Mais Informações:
fonte
[[
é a sintaxe bash e o OP foi perguntando sobre shell, onde ele não iria funcionarTente o seguinte:
fonte
não funciona conforme o esperado, porque a sintaxe dentro dos colchetes únicos não é especial para o Bash. Como sempre, a variável
$Server_Name
é substituída por 1, então todo o comando test ([
) vê um único argumento: a string1=1
. Como essa picada tem um comprimento diferente de zero, o teste retorna verdadeiro .Para shells compatíveis com POSIX, você pode usar os seguintes comandos de teste :
cheques é
$Server_Name
igual a sequência1
.cheques é
$Server_Name
igual ao número1
, ou seja, ele faz uma comparação numérica em vez de uma comparação de cadeias.O valor de retorno do comando dois será diferente, por exemplo, se você definir
Server_Name=01
. O primeiro retornará falso, o segundo retornará verdadeiro.Observe que, se existe a possibilidade de a variável não
$Server_Name
ser definida, ela deve ser citada ou o teste exibirá um erro quando invocado.fonte
Tentar,
resultado:
fonte
Resposta simples. Seu código está correto - quase. a única coisa que falta são espaços ... (e talvez um extra "=")
não irá calcular corretamente.
é o que você procura.
E agora a afirmação sobre string versus números. Sempre que você estiver procurando por comparação como é / não é, == sempre estará bem.
E eu presumo que você sempre tenha um nome de servidor como uma string, não um número - certo? ;-)
Boa sorte com seu aprendiz robusto de codificação.
tchau
fonte