para loop para obter mais de um argumento

1

Em python e em algumas outras linguagens de programação, é fácil obter um vetor em vez de uma variável em todos os lugares e em loops. como python:

for variable in [[user1,pass1],[user2,pass2],[user3,pass3],...]
    print variable[0]
    print variable[1]

Mas como posso obter dois argumentos em um ciclo, no shell?

    
por Mohammad Etemaddar 14.06.2013 / 10:59

3 respostas

4

Você também pode usar um loop aritmético para isso:

a=(user1 pass1 user2 pass2)
for ((i=0; i<${#a[@]}; i+=2)); do
  echo "${a[i]}: ${a[i+1]}"
done
    
por 15.06.2013 / 17:49
3

No bash, você pode criar uma matriz, mas as estruturas de dados aninhadas não são suportadas. Portanto, você tem que hackear alguma coisa. Por exemplo, você pode usar um separador:

#! /bin/bash
for tuple in user1#pass1 user2#ls\;ls user3#pass#3 ; do
    user=${tuple%%#*}
    password=${tuple#*#}
    echo User $user
    echo Password $password
done

Apenas certifique-se de que o primeiro valor nunca contenha o separador.

Ou use set com uma lista simples e shift o número correto de membros em cada iteração:

#! /bin/bash
set -- user1 pass1 user2 ls\;ls user3 pass#3
while (( $# )) ; do
    user=$1
    password=$2
    shift 2
    echo User $user
    echo Password $password
done
    
por 14.06.2013 / 11:34
0

Eu gosto de perl para essas coisas, você pode chamar isso de dentro de um script bash:

perl -e 'my %users= ("user1" => "pass1","user2" => "pass2");
         for ( sort keys %users)
         {
             print "$_\t$users{$_}\n";
         }'
    
por 24.09.2015 / 23:25