Приложение I. Упражнения

I.1. Анализ сценариев

Просмотрите следующие сценарии. Попробуйте запустить их, затем объясните -- что они делают. Расставьте комментарии, затем попробуйте записать их в более компактном виде.

#!/bin/bash

MAX=10000


  for((nr=1; nr<$MAX; nr++))
  do

    let "t1 = nr % 5"
    if [ "$t1" -ne 3 ]
    then
      continue
    fi

    let "t2 = nr % 7"
    if [ "$t2" -ne 4 ]
    then
      continue
    fi

    let "t3 = nr % 9"
    if [ "$t3" -ne 5 ]
    then
      continue
    fi

  break   # Что произойдет, если закомментировать эту строку? Почему?

  done

  echo "Число = $nr"


exit 0

        

---

Читатель прислал следующий кусок кода.

while read LINE
do
  echo $LINE
done < `tail -f /var/log/messages`

        Он предполагал написать сценарий, который отслеживал бы
        изменения в системном журнале /var/log/messages. К сожалению, этот код
        "зависает" и не делает ничего полезного. Почему?
        Найдите ошибку и исправьте ее (подсказка: вместо операции перенаправления stdin в цикл, попробуйте
        использовать конвейерную обработку).

---

Просмотрите сценарий Пример A-11, попробуйте изменить его таким образом, чтобы он выглядел проще и логичнее. Удалите все "лишние" переменные и попытайтесь оптимизировать сценарий по скорости исполнения.

Измените сценарий таким образом, чтобы он мог принимать начальную установку "поколения 0" из любого текстового файла. Сценарий должен считать первые $ROW*$COL символов, и на место гласных вставлять "живые особи". Подсказка: не забудьте преобразовать пробелы в символы подчеркивания.