Como criar quantas variáveis forem necessárias a partir do shell script (bash)?

0

Estou fazendo um script para monitorar alguns processos do usuário com o Upstart, mas, como é para a empresa em que trabalho, eles me pediram para fazer isso genérico ... como está? Bem, o número de processos sendo monitorados pode variar, como em número como em nome, então preciso criá-lo para que um usuário possa inserir "n" número de processos e dar o shell ao nome do caminho para que eu possa armazená-los em variáveis e passar Upstart um script com eles, então minha pergunta é: como posso criar quantas variáveis forem necessárias?

Aqui está o meu script até agora…

./script input

#!/bin/bash

FILENAME=$1
i=1

while read LINE
do
[rutaServ$i]=$LINE
echo "ruta -> [rutaServ$i]"
i='expr $i + 1'
done < $FILENAME

Como você pode ver, estou tomando o nome de caminho provisoriamente de um arquivo de texto simples com nada mais do que /home/user linhas nele, mas, quando executo esse script, recebo o seguinte erro [rutaServ1]=/home/user: The file or directory doesn't exists

Qual é a maneira correta de fazer isso?

    
por Edgar Sampere 13.05.2013 / 08:48

2 respostas

3

Parece que a sintaxe da sua matriz está um pouco atrasada. Além disso, não há necessidade da variável de índice; você pode usar o operador += para anexar a uma matriz.

#!/bin/bash

FILENAME=$1

rutaServ=()
while read LINE
do
rutaserv+=($LINE)
echo "ruta -> $LINE"
done < "$FILENAME"

bash v4 tem um novo comando, mapfile (ou readarray ) para ler o conteúdo de um arquivo em uma matriz de uma só vez:

mapfile rutaServ < "$FILENAME"

Para acessar valores da matriz:

for x in "${rutaserv[@]}"; do
    echo "$x"
done
    
por 13.05.2013 / 15:38
1

O script pode ser chamado como script.sh process1 process2 ? Então você poderia se referir aos argumentos com $@ :

# set process1 process2 # set arguments for testing

for x in "$@"; do 
    echo "ruta -> $x"
done

[rutaServ$i]=$LINE deve ser rutaServ[$i]=$LINE ou rutaServ+=("$LINE") .

    
por 13.05.2013 / 09:18