Como escrever a declaração condicional se no script de shell bash?

0

Eu tenho um script de shell abaixo que irá obter a pasta mais recente do meu diretório atual em machineB e machineC. Então eu vim com o comando abaixo, que vai me encontrar a pasta mais recente dentro -

/bat/data/snapshot

E essa última pasta será na forma de AAAAMMDD. Abaixo está o meu script de shell -

#!/bin/bash

readonly FILERS_LOCATION=(machineB machineC)
readonly MAPPED_LOCATION=/bat/data/snapshot

dir1=$(ssh -o "StrictHostKeyChecking no" david@${FILERS_LOCATION[0]} ls -dt1 "$MAPPED_LOCATION"/[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9] | head -n1)
dir2=$(ssh -o "StrictHostKeyChecking no" david@${FILERS_LOCATION[1]} ls -dt1 "$MAPPED_LOCATION"/[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9] | head -n1)

echo $dir1
echo $dir2

length1=$(ssh -o "StrictHostKeyChecking no" david@${FILERS_LOCATION[0]} "ls '$dir1' | wc -l")
length2=$(ssh -o "StrictHostKeyChecking no" david@${FILERS_LOCATION[1]} "ls '$dir2' | wc -l")

echo $length1
echo $length2

if [ $dir1 eq $dir2 ] && [length1 > 0] && [length2 > 0]
then
    echo "Hello World"

Agora preciso escrever a declaração condicional. Preciso verificar se dir1 é igual a dir2 e length1 é maior que 0 e length2 também é maior que 0 , então só imprime Hello World

Mas de alguma forma, minha declaração if acima não funciona. Alguma ideia do que estou fazendo errado aqui? Estou um pouco enferrujado no script bash ..

    
por arsenal 24.12.2013 / 09:25

1 resposta

5

Deve ser

if [ "$dir1" = "$dir2" ] && [ "$length1" -gt 0 ] && [ "$length2" -gt 0 ]

Lembre-se de que os nomes das variáveis devem ser precedidos por $ s. Comparações de igualdade de strings devem ser feitas usando = , e comparações numéricas devem ser feitas usando operadores aritméticos nomeados como -gt . Veja help test .

Observe que (via de regra) os operadores -o e -a test devem ser evitados, pois [ não pode analisar seus argumentos de forma confiável quando estão envolvidos e operandos parecem operadores. Use os operadores && e || shell .

    
por 24.12.2013 / 09:30