Тема: Не виконується цикл while у shell

Звучить дивно, але так воно є.
Власне код циклу:

while [ $num_string_todo_file -eq -1 ]
do
echo $num_string_todo_file
num_string_todo_file=`expr $num_string_todo_file - 1`
done

$num_string_todo_file - до початку циклу має значення 27.
Що то за біда?
Повний код скрипта:

#!/bin/sh 

cd /home/$LOGNAME/
if [ ! -d todo -a ! -f todo.conf ]
then
echo "=== Перший запуск скрипта todo ===";
echo "Оскільки це перший запуск програми, Вам потрібно ввести конфігураційні дані.";
echo "Скільки завдань буде відображатися на сторінці?";
read tmp_number_todo
echo "number=$tmp_number_todo" > todo.conf
if [ $? -eq 0 ]
then
echo "Конфігураційний файл успішно створений."
mkdir /home/$LOGNAME/todo
if [ $? -ne 0 ]
then
echo  "Помилка #6. Неможливо створити папку для завдань."
exit 1
else
echo "Директорія для завдань створена."
fi
echo "Бажаєте продовжити роботу скрипта?"
echo "[1-так|0-ні]"
read tmp_goto
if [ $tmp_goto -ne 1 ]
then 
exit 1
fi
else
echo "Помилка #1. Конфігураційний файл не може бути створений!"
exit 1
fi
fi
#Основна частина

check_conf_file()
{
if [ -f /home/$LOGNAME/todo.conf ]
then
if [ -r /home/$LOGNAME/todo.conf ]
then
. /home/$LOGNAME/todo.conf
else
echo "Помилка #3. Немає достатньо прав для читання файлу!"
exit 1
fi
else
echo "Помилка #2. Конфігураційний файл не знайдено!"
exit 1
fi
}
#Список завдань
list_todo()
{
if [ -d /home/$LOGNAME/todo ]
then
if [ -f /home/$LOGNAME/todo/list_todo.txt ]
then
if [ -r /home/$LOGNAME/todo/list_todo.txt ]
then
todo_file="/home/$LOGNAME/todo/list_todo.txt"
index_array_todo=0
while read line_todo 
do
    todo[$index_array_todo]="$line_todo"
    index_array_todo=`expr $index_array_todo + 1`
done < $todo_file
num_string_todo_file=${#todo[@]}
echo $num_string_todo_file
while [ $num_string_todo_file -eq -1 ]
do
echo $num_string_todo_file
num_string_todo_file=`expr $num_string_todo_file - 1`
done

else
echo "Помилка #5. Відсутній файл з завданнями"
exit 1
fi
fi
else
echo "Помилка #4. Відсутня директорія todo"
exit 1
fi
}
list_todo

2 Востаннє редагувалося Voron (22.08.2012 17:46:59)

Re: Не виконується цикл while у shell

while [ $num_string_todo_file -eq -1 ]

27 не рівне -1 - цикл не виконується


мабуть має бути якось так:

while [ $num_string_todo_file -gt -1 ]

Re: Не виконується цикл while у shell

Voron написав:
while [ $num_string_todo_file -eq -1 ]

27 не рівне -1 - цикл не виконується
мабуть має бути якось так:

while [ $num_string_todo_file -gt -1 ]

Тю, ото я прогледів...
Дякую.

Re: Не виконується цикл while у shell

Так, але щось не можу зрозуміти, чому останній рядок у файлі не заноситься у елемент масиву...