Não consigo ler while loop no shell script

0

Então eu escrevi este programa para reverter os argumentos ... mas o problema era while e o comando expr não era lido pelo shell script. Aqui está o programa

#!/bin/sh

If test $# -eq 0

 then echo "not enough arguments "

else 
  echo " no. Of arguments is $#"

echo "the arguments are $*"

echo "the reverse of it is"

c=$#

while [ $c -ne 0 ]

do 

  eval echo \$$c

  c='expr $c - 1"

done
fi

Eu sabia que não estava lendo loop enquanto a cor do loop while não mudava.

    
por Pramod Bhat 02.11.2015 / 16:27

2 respostas

0

Você pode executar o script com bash -x para ver exatamente o que está fazendo. Eu notei que estava comparando "expr 2 - 1" para ver se era igual a 0, o que parecia errado. Eu acho que esta linha está errada:

c='expr $c - 1"

As aspas não correspondem, então eu originalmente sugeri o uso de aspas duplas, mas o que você quer é atribuir o resultado da execução do expr blah blah à variável c , então você precisa de backticks :

c='expr $c - 1'

Se você corrigir isso e o valor em maiúsculas If próximo ao início, o script parecerá executado corretamente.

    
por roadmr 02.11.2015 / 16:48
0

Eu usaria um loop for com expressões aritméticas do bash e indiretas expansão variável :

$ set -- a b c d e f
$ for (( c=$#; c>0; c--)); do echo ${!c}; done
f
e
d
c
b
a
    
por glenn jackman 02.11.2015 / 17:18