Falha com o shell script

0

Estou tentando executar o script a seguir no Ubuntu 10.04, mas com problemas diferentes para a declaração do intget i. Alguém poderia me ajudar o mais rápido possível

integer i

i=1

while true
    do
    read response

    if [ -z == $response ] 
    then
     continue 
    fi

    if [ $response == "q" ]
    then
     break
    fi


    if [ -f /var/tmp/UE1_${i}.txt ]
    then
      cat /var/tmp/UE1_${i}.txt
      i=$i+1
    fi


    if [ $i -eq  100 ] 
    then
     break
    fi

done
    
por udaya 23.04.2013 / 02:34

2 respostas

1

integer i
i=1

Simples i=1 sem espaços é suficiente.

if [ -z == $response ] 
    then
        continue 
fi

continue significa ignorar tudo no loop que vem após continue e ir para a próxima iteração do loop. Eu não acho que é isso que você pretendia fazer.

if [ $response == "q" ]

É uma prática recomendada incluir nomes de variáveis entre aspas duplas ( "$response" ) ao fazer referência.

i=$i+1

Isso atribuirá 1+1 como uma string a $i em vez de 2 . Você pode usar expr :

i=$(expr $i + 1)

ou simplesmente use:

(( i++ ))

Seu roteiro final ficará parecido com isto:

#!/bin/bash

i=1

while true
do
    read response

    if [ "$response" == "q" ]
    then
        break
    fi

    if [ -f /var/tmp/UE1_${i}.txt ]
    then
        cat /var/tmp/UE1_${i}.txt
        i=$(expr $i + 1)
    fi

    if [ $i -eq  100 ] 
    then
        break
    fi

done

Para obter mais informações sobre a verificação de scripts do bash, este excelente tutorial: Guia avançado de script de script .

    
por Basharat Sialvi 23.04.2013 / 14:14
0

No bash você não precisa declarar os tipos como em outros idiomas, como na família C.

Portanto, a primeira linha integer i causa erros em sua forma. Você pode simplesmente removê-lo.

Existe um caso em que você pode dizer que a variável declarada deve ser tratada como algum tipo , isso pode ser feito se você editar a primeira linha para: declare (option) variable=value no seu caso: A declare -r i=1 da opção -r diz ao bash que a variável deve ser tratada como um inteiro.

Você pode verificar as opções disponíveis para declarações de variáveis aqui .

    
por Stef K 23.04.2013 / 10:55