localizando o número da matriz da entrada do usuário

0
echo -n "Which station or stations you want to download?"
read station
ELEMENTS=${#station[@]}
for (( i=0;i<$ELEMENTS;i++)); do
    echo you chose ${station[${i}]} stations to download data
done 

a estação deve ter 4 caracteres, se o usuário gravar mais de uma estação, eu preciso verificar o número de entradas da estação. Por exemplo, se o usuário gravar brmu ankr ista. Como posso definir o número de entradas da variável station e controlar seu número de caracteres?

    
por deepblue_86 10.06.2015 / 18:25

1 resposta

0

Você pode usar um for -loop que passa por cada item e verifica a contagem de caracteres com o comando wc -m .

Aqui está o seu script, editado. Peço desculpas se eu usar uma sintaxe diferente para looping, mas é exatamente isso que eu estou acostumado.

serg@ubuntu[/home/xieerqi] 
$ cat stations.sh                                                                                                                      
#!/bin/bash
echo -n "Which station or stations you want to download?"
read station

for item in $station; do
   NUM=$(printf $item | wc -m)
     if [ $NUM -gt 4 ]; then
    echo "Error: number of chars in $item greater than 4"
    exit 1
     fi
done

ELEMENTS=${#station[@]}
for (( i=0;i<$ELEMENTS;i++)); do
    echo you chose ${station[${i}]} stations to download data
done 


serg@ubuntu[/home/xieerqi] 
$ ./stations.sh                                                                                                                        

Por exemplo Se os nomes da sua estação forem asdf , yolo e swag , você escolheu o parâmetro asdf yolo swag para fazer o download de dados:

serg@ubuntu[/home/xieerqi] 
$ ./stations.sh                                                                                                                        
Which station or stations you want to download? asdf qwerty swag
Error: number of chars in qwerty greater than 4

Observe que uso printf, não echo. O echo produz uma linha adicional adicional, o que atrapalha a contagem de caracteres. Se você preferir usar o eco, use echo -n para evitar a impressão dessa nova linha

    
por Sergiy Kolodyazhnyy 18.06.2015 / 16:56