Сбой с помощью сценария оболочки

Я пытаюсь запустить следующий скрипт в Ubuntu 10.04, но сталкиваюсь с разными проблемами для объявления intget i. Может ли кто-нибудь помочь мне как можно скорее

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
0
задан 10 November 2017 в 19:14

2 ответа

integer i
i=1

Достаточно простого i=1 без пробелов.

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

continue означает пропустить все в цикле, которое идет после continue, и перейти к следующей итерации цикла. Я не думаю, что это то, что вы намеревались сделать.

if [ $response == "q" ]

Рекомендуется заключать имена переменных в двойные кавычки ("$response") при ссылках.

i=$i+1

Это назначит 1+1 в качестве строки для $i вместо 2. Вы можете использовать expr:

i=$(expr $i + 1)

или просто использовать:

(( i++ ))

Ваш окончательный сценарий будет выглядеть примерно так:

#!/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

Подробнее Информация о bash-скриптинге приведена в этом превосходном руководстве: Расширенное руководство по Bash-Scripting Guide .

0
ответ дан 10 November 2017 в 19:14

В bash вам не нужно объявлять типы, как в других языках, например в семействе C.

Таким образом, первая строка integer i вызывает ошибки в своей форме. Вы можете просто удалить его.

Есть случай, когда вы можете сказать bash, что объявленная переменная должна обрабатываться как некоторого типа , это можно сделать, если вы отредактируете первую строку на: declare (option) variable=value в вашем случае: [ 115]
declare -r i=1 опция -r сообщает bash, что переменная должна рассматриваться как целое число.

Вы можете проверить доступные опции для объявлений переменных здесь .

0
ответ дан 10 November 2017 в 19:14

Другие вопросы по тегам:

Похожие вопросы: