modifica as variáveis de sistema definidas pelo usuário (ou seja, um número) da máquina do servidor remoto usando ssh?

1

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.

    
por orange 18.12.2013 / 13:20

2 respostas

2

operador aritmético é $ (()):

tstaerk@euve31070:~$ export orange=$((1+$orange))
tstaerk@euve31070:~$ echo $orange
2 
    
por 18.12.2013 / 13:30
1

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
    
por 19.12.2013 / 01:07