Usando arrays no shell script

0

Estou tentando armazenar o caminho para um site em uma matriz, mas estou tendo problemas.

Ele está trabalhando no loop for - quando faço eco do conteúdo do array, ele é impresso corretamente.

No If / Else, no entanto, estou tentando armazenar uma parte específica da matriz em outra variável, e isso não está funcionando. Quando faço eco da parte específica da matriz, não imprime nada.

Aqui está o código:

#! /bin/sh

SITES=()
i=0

for d in /var/www/sites/*/;
do (
    PATHWAY=$d
    SITES+=($PATHWAY)
    echo "$i: $PATHWAY"
);  let "i++"
done

read -p 'Enter the number of the website you want to restore. Enter "exit" to quit. ' url

if [ "$url" = "exit" ]
then
    exit 0

else
    RESTORE_URL=${SITES[url]}
fi
    
por Kimberlie Davis 21.10.2017 / 00:04

2 respostas

2

Isso soa como um bom lugar para usar uma declaração select :

select path in /var/www/sites/* EXIT; do
    if [[ "EXIT" = "$path" ]]; then
        exit 0
    else
        : do stuff here referencing $path
    fi
done
    
por 21.10.2017 / 00:22
0

Seu loop (com meu recuo):

for d in /var/www/sites/*/; do
    (   PATHWAY=$d
        SITES+=($PATHWAY)
        echo "$i: $PATHWAY"  )

    let "i++"
done

Observe como a maior parte do corpo do loop está em um subshell? Isso significa que as mudanças nessas variáveis não serão vistas fora dessa sub-camada, e que elas serão redefinidas para cada iteração no loop.

O éter altera o (...) para {...;} ou remove-os completamente.

Uma alternativa melhor para o script como um todo seria usar select como DopeGhoti explica .

    
por 10.02.2018 / 11:42