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
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
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
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 .
Tags shell-script array