Искусство программирования на языке сценариев командной оболочки


Программирование на языке сценариев командной оболочки - стр. 213


for name in `seq $line_count` # "seq" выводит последовательность чисел. # while [ "$name" != Smith ] -- более запутанно, чем в случае с циклом "while" -- do read name # Чтение из файла $Filename, не со stdin. echo $name if [ "$name" = Smith ] then break fi done <"$Filename" # Перенаправление на ввод из файла $Filename. # ^^^^^^^^^^^^

exit 0

Предыдущий пример можно модифицировать так, чтобы перенаправить вывод из цикла.

Пример 16-8. Перенаправление устройств (stdin и stdout) в цикле for

#!/bin/bash

if [ -z "$1" ] then Filename=names.data # По-умолчанию, если файл не задан. else Filename=$1 fi

Savefile=$Filename.new # Имя файла, в котором сохраняются результаты. FinalName=Jonah # Имя, на котором завершается чтение.

line_count=`wc $Filename | awk '{ print $1 }'` # Число строк в заданном файле.

for name in `seq $line_count` do read name echo "$name" if [ "$name" = "$FinalName" ] then break fi done < "$Filename" > "$Savefile" # Перенаправление на ввод из файла $Filename, # ^^^^^^^^^^^^^^^^^^^^^^^^^^^ и сохранение результатов в файле.

exit 0

Пример 16-9. Перенаправление в конструкции if/then

#!/bin/bash

if [ -z "$1" ] then Filename=names.data # По-умолчанию, если файл не задан. else Filename=$1 fi

TRUE=1

if [ "$TRUE" ] # конструкции "if true" и "if :" тоже вполне допустимы. then read name echo $name fi <"$Filename" # ^^^^^^^^^^^^

# Читает только первую строку из файла.

exit 0

Пример 16-10. Файл с именами "names.data", для примеров выше

Aristotle Belisarius Capablanca Euler Goethe Hamurabi Jonah Laplace Maroczy Purcell Schmidt Semmelweiss Smith Turing Venn Wilson Znosko-Borowski

# Это файл с именами для примеров #+ "redir2.sh", "redir3.sh", "redir4.sh", "redir4a.sh", "redir5.sh".

Перенаправление stdout для блока кода, может использоваться для сохранения результатов работы этого блока в файл.


- Начало -  - Назад -  - Вперед -