Aliasing usando for ou while loop em .bashrc

1

Posso usar um loop for ou while quando tenho um padrão semelhante nos aliases que coloco no meu arquivo .bashrc? Por exemplo, eu tenho:

alias c0='ssh computer-1-0'
alias c1='ssh computer-1-1'
alias c2='ssh computer-1-2'
alias c3='ssh computer-1-3'
alias c4='ssh computer-1-4'

Mas eu quero fazer algo parecido com

i=0
while [ i -le 4 ]
do
alias "c$i"="ssh computer-1-$i"
i='expr $i + 1'
done 

que não funciona infelizmente. Recebo uma mensagem de erro: -bash: [: i: integer expression expected .

Existe uma maneira de alcançar o que eu desejo?

    
por hbaromega 13.05.2015 / 13:20

2 respostas

2

Você estava muito perto:

i=0
while [ $i -le 4 ]; do
  alias "c$i"="ssh computer-1-$i"
  i='expr $i + 1'
done

Basta adicionar um caractere $ antes de i dentro do loop while.

    
por 13.05.2015 / 13:24
1

Seu problema imediato é que i é apenas uma string de um caractere. Para acessar o valor da variável i , você precisa usar a sintaxe para acessar o valor de uma variável: "$i" .

while [ "$i" -le 4 ]

(Você pode omitir as aspas duplas aqui, mas usá-las é um bom hábito para entrar.)

Os shells possuem aritmética básica embutida. O utilitário expr é um remanescente dos velhos tempos quando não o era. Você pode escrever

i=0
while [ "$i" -le 4 ]
do
  alias "c$i=ssh computer-1-$i"
  i=$((i + 1))
done

Note que você não precisa (e não deve usar) um dólar dentro dos parênteses duplos. Dentro de uma expressão aritmética, um nome de variável se expande para o valor da variável.

O Bash tem um C-like para a sintaxe do loop. Como esse é o arquivo de inicialização do bash, não há motivo para não usar a sintaxe específica do bash.

for ((i = 0; i <= 4; i++)); do
  alias "c$i=ssh computer-1-$i"
done
    
por 14.05.2015 / 02:16