operador aritmético é $ (()):
tstaerk@euve31070:~$ export orange=$((1+$orange))
tstaerk@euve31070:~$ echo $orange
2
Eu quero modificar o valor de uma variável de sistema de um servidor remoto.
O IP do servidor é 172.16.22.53.
O servidor roda o sistema operacional Windows, e o Cygwin instalava nele. No arquivo /cygdrive/c/cygwind/home/sikaiwei/.bashrc (no Windows), eu criei uma nova variável de sistema e a defini. Eu quero a variável para ser um número, então eu posso mudar seu valor livremente usando ssh no meu script bash. Eu tento, mas a variável do sistema parece ser uma string em vez de um número.
[sikaiwei@login-1-2 ~]$ $ORANGE
-bash: 1: command not found
[sikaiwei@login-1-2 ~]$ export ORANGE=1+$ORANGE
[sikaiwei@login-1-2 ~]$ $ORANGE
-bash: 1+1: command not found
[sikaiwei@login-1-2 ~]$
Assim, eu defini uma variável de sistema $ ORANGE para 1.Então 1 mais para obter 2 , mas eu tenho '1 + 1' ao invés de '2'!
@skwllsp @Thorsten Staerk, obrigado! Seus caminhos funcionam bem ambos. Mas se eu for sshpass assim:
[sikaiwei@login-1-2 v1.4]$ sshpass -p 'CHUN~19900405' ssh 172.16.22.53 -l sikaiwei "getId=$ORANGE;echo $ORANGE;let ORANGE=$ORANGE+1;echo $ORANGE;echo 'getId is'$getId;"
1
1
getId is
Mas o resultado deveria ser assim:
1
2
getId is 1
O que aconteceu?
Eu tento isso:
[sikaiwei@login-1-2 v1.4]$ sshpass -p 'CHUN~19900405' ssh 172.16.22.53 -l sikaiwei "getId=$ORANGE;echo $ORANGE;ORANGE=$((ORANGE+1));echo $ORANGE;echo 'getId is '+$getId;"
1
1
getId is +
e
[sikaiwei@login-1-2 v1.4]$ sshpass -p 'CHUN~19900405' ssh 172.16.22.53 -l sikaiwei "getId=$ORANGE;echo $ORANGE;((ORANGE=ORANGE+1));echo $ORANGE;echo 'getId is '+$getId;"
1
1
getId is +
Eu acho um grande erro. O valor de $ ORANGE em
sshpass -p 'CHUN~19900405' ssh 172.16.22.53 -l sikaiwei "getId=$ORANGE;echo $ORANGE; ((ORANGE=ORANGE+1));echo $ORANGE;echo 'getId is '+$getId;"
não é o valor da variável do sistema do host do servidor.
É o valor da variável do sistema do host do meu cliente.
O valor de uma variável é uma string. Mesmo se fosse um número, 1+$ORANGE
não é um número e nem 1+1
: ambos são strings que, quando avaliadas como expressões aritméticas, produzem um número.
Você pode usar a sintaxe de expressão aritmética para informar ao shell que você quer realizar aritmética.
ORANGE=$((1+ORANGE))
O Bash tem uma sintaxe alternativa para realizar operações aritméticas:
((ORANGE=ORANGE+1))
((ORANGE+=1))
No bash, você também pode declarar uma variável como valores inteiros . Se você fizer isso, as atribuições a essa variável executarão expansão aritmética no valor que você atribuir e sinalizarão um erro se o valor não for uma expressão aritmética bem formada.
declare -i ORANGE
ORANGE=1
ORANGE=1+ORANGE