Para loop para um conjunto de variáveis

1

Eu gostaria de executar um loop for para um conjunto de variáveis que eu indiquei incorretamente como {A,B} . Depois disso, meu script parece:

#!/bin/sh
for {A,B} in {1,2}  {3,4} {5,6} {7,8}
do
echo A=$A B=$B
C=$(($A+$B))
echo Sum,C = $C
done

Como posso corrigi-lo?

    
por hbaromega 02.07.2015 / 09:04

3 respostas

4

eu usaria

while read A B
do echo A=$A B=$B
    C=$(( $A + $B ))
    echo Sum,C = $C
done<<EOF
1 2
3 4
5 6
7 8
EOF

Para operações mais complexas, dc é seu amigo (notação reversa polonesa!)

C=$(echo "$A $B +pq"|dc)
    
por 02.07.2015 / 09:42
2
set   1 2 3 4 5 6 7 8
while [ "$#" -gt 0 ]
do    C="$(($1+$2))"
      shift 2
done

for não permite duas atribuições simultâneas dessa maneira. Portanto, coloque uma matriz e shift no intervalo desejado. Se você usar a matriz $@ do shell padrão como eu faço acima, você sempre estará trabalhando com suas duas primeiras posições $1 e $2 . Se você usar algum tipo de matriz de extensões, estará trabalhando com ${array[0]} e ${array[1]} ou ${array[1]} e ${array[2]} dependendo do seu shell.

Senão, com um loop for você pode codificar algum tipo de delimitador em cada argumento:

for x in 1+2 3+4 5+6 7+8
do  C="$(($x))"
done

... o que funciona perfeitamente aqui, mas geralmente não é feito de forma tão clara.

    
por 02.07.2015 / 10:40
0

Eu poderia fazer um possível contorno (Obrigado @mikeserv por me fornecer a idéia de matriz):

array=('1 2' '3 4' '5 6' '7 8')

for x in "${array[@]}"
do

A='echo $x | awk '{print $1}''
B='echo $x | awk '{print $2}''
echo A=$A B=$B

C=$(($A+$B))
echo Sum,C = $C

done

Sugira se uma simplificação adicional é possível.

    
por 02.07.2015 / 12:49