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




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


REM VIEWDATA

REM INSPIRED BY AN EXAMPLE IN "DOS POWERTOOLS" REM BY PAUL SOMERSON

@ECHO OFF

IF !%1==! GOTO VIEWDATA REM IF NO COMMAND-LINE ARG... FIND "%1" C:\BOZO\BOOKLIST.TXT GOTO EXIT0 REM PRINT LINE WITH STRING MATCH, THEN EXIT.

:VIEWDATA TYPE C:\BOZO\BOOKLIST.TXT | MORE REM SHOW ENTIRE FILE, 1 PAGE AT A TIME.

:EXIT0

Результат преобразования в сценарий командной оболочки, немного улучшенный.

Пример H-2. viewdata.sh: Результат преобразования VIEWDATA.BAT в сценарий командной оболочки

#!/bin/bash # Результат преобразования пакетного файла VIEWDATA.BAT в сценарий командной оболочки.

DATAFILE=/home/bozo/datafiles/book-collection.data ARGNO=1

# @ECHO OFF Эта команда здесь не нужна.

if [ $# -lt "$ARGNO" ] # IF !%1==! GOTO VIEWDATA then less $DATAFILE # TYPE C:\MYDIR\BOOKLIST.TXT | MORE else grep "$1" $DATAFILE # FIND "%1" C:\MYDIR\BOOKLIST.TXT fi

exit 0 # :EXIT0

# операторы перехода GOTO, метки и прочий "мусор" больше не нужны. # Результат преобразования стал короче, чище и понятнее,

На сайте Тэда Дэвиса (Ted Davis) Shell Scripts on the PC, вы найдете большое число руководств по созданию пакетных файлов в DOS. Определенно, его изобретательность будет вам полезна, при создании ваших сценариев.

Приложение 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`




Содержание  Назад  Вперед