Тема: Не виконується цикл 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