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.
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?
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
Tags bash shell arithmetic variable