Я пытаюсь запустить следующий скрипт в 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
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 .
В bash вам не нужно объявлять типы, как в других языках, например в семействе C.
Таким образом, первая строка integer i
вызывает ошибки в своей форме. Вы можете просто удалить его.
Есть случай, когда вы можете сказать bash, что объявленная переменная должна обрабатываться как некоторого типа , это можно сделать, если вы отредактируете первую строку на: declare (option) variable=value
в вашем случае: [ 115]
declare -r i=1
опция -r
сообщает bash, что переменная должна рассматриваться как целое число.
Вы можете проверить доступные опции для объявлений переменных здесь .