Главная страницаОбратная связьКарта сайта

Linux -Системные сценарии

Системные сценарии.
Простой системный сценарий.
Основные сведения по переменным и массивам.
Считывание данных в переменные.
Специальные символы и кавычки.
Управление потоком данных.
Проверка условий.
Оператор if.
Оператор case.
Циклы while и until.


Системные сценарии

Системные сценарии являются текстовыми файлами, содержащими команды. Использование команд в интерфейсе командной строки объяснено в Главе 17, включая синтаксис и возможности. Такие же команды, использующие тот же синтаксис, можно поместить в системный сценарий. Когда вы запускаете сценарий, команды выполняются одна за другой с начала, точно так же, как если бы вы набирали команды непосредственно в среде вручную одну за другой. Вы можете значительно сэкономить на ручном наборе, поместив часто вводимые команды в системные сценарии.

Системные сценарии часто используются для выполнения стандартных системных задач обслуживания. Например, вы могли бы написать системный сценарии, который резервирует определенные файлы на другом компьютере сети. Или вы можете захотеть переименовать все файлы в вашем каталоге. Иди вы можете захотеть отредактировать все файлы на сайте вашей компании, изменяя адрес вашей компании со старого на новый.

Эта глава разъясняет, как писать системные сценарии. Эта глава является введением в системные сценарии, которое не показывает расширенных возможностей, предоставляемых системными сценариями. Вы можете изучить, как создавать несложные системные сценарии для ежедневных задач; однако, если вы хотите делать продвинутые системные сценарии, вам нужно прочесть более полное освещение темы. Целые книги написаны о системных сценариях.

Команды не объясняются в этой главе. Глава 7 разъясняет синтаксис использования команд. Приложение В предоставляет подробное руководство по наиболее употребительным командам.

Простой системный сценарий

Системный сценарий представляет собой текстовый файл с рядом команд, которые выполняются последовательно при выполнении сценария. Системные сценарии позволяют вам выполнять несколько команд сразу. Создайте следующий простой системный сценарий в текстовом редакторе, используя текстовые редакторы, обсуждённые в Главе 18, и сохраните сценарий с именем dir2file:

#! /bin/bash

# Script Name: dir2file - A simple shell script that saves a directory listing in a file

Is -1 > dirlist

echo Directory is  saved

Первые две строки не являются командами, поэтому они не выполнятся. Строки начинаются со знака #, также называемого диез, что означает, что они не выполняются. Первая строка указывает системе Linux, какую программу использовать для запуска этого сценария. В этом случае строка, часто называемая домашней, вызывает оболочку Bash, Первая строка сценария на языке Perl вызовет язык Pert, а не оболочку. В этом случае вы можете запускать программу без домашней строки, но сценарий понятней с этой строкой.

Вторая строка является комментарием. Это примечание для себя. Сценарий игнорирует комментарии.

Последние две строки — это команды, которые выполняет системный сценарий. Строки являются такими же командами, которые вы могли бы ввести в командной строке. Глава 7 объясняет, как использовать интерфейс командной строки. Приложение В является руководством по командам. В этом сценарии используются команды Is и echo. Команда Is сохраняет длинную распечатку каталога в файле, названном dirl 1st. Когда команда Is закончит работу, команда echo отобразит на экране надпись Directory is saved (Каталог сохранён).

Сценарий должен иметь право на выполнение для запуска. Права обсуждаются в Главе 9. Следующие команды устанавливают и изменяют права доступа к файлу, предоставляя право на выполнение владельцу файла:

1я  -1  dir2file

-rw-r—r-- 1 janet     janet 79 2005-01-09 15:57 dir2file

chmod u+x dir2file

Is -1 dir2file

-rwxr-r—   1   janet                   janet  79   2005-01-09   15:59   dir2file

Теперь вы можете выполнить программу следующим образом и увидеть результат.

./dir2file Directory is saved

Если выдать список вашего каталога сейчас, то вы увидите файл dirlist в вашем каталоге. Если вы отобразите файл dirlist на экране, командой cat dirlist, вы увидите, что файл содержит результат выполнения команды  Is  -1.

Основные сведения по переменным и массивам

Переменные являются контейнерами, которые имеют имена и содержат информацию, числа или текст. Имена переменных могут состоять из букв, цифр и символов подчеркивания _. Имя может начинаться с буквы или с символа подчеркивания, но не с цифры. Для создания переменной сохраните в переменной информацию. Следующие строки -допустимые команды, которые сохраняют информацию:

varl=3

_var2=Hello

full_name=john Smith

He допускаются пробелы перед или после знака +. Заметьте, что первые две команды не используют кавычек. Третья команда требует кавычек, потому что включает пробел. Без пробелов среда сохранила бы значение John и восприняла бы слово Smith как новую команду.

Когда вы используете значение переменной, то предваряете имя переменной символом $,например:

echo  $_var2

Hello

Вы можете установить одну переменную равной другой следующим образом: nev_name=$£ull_name echo   $new_name John  Smith

Простой сценарий из предыдущего раздела изменён ниже для использования переменкой:

#!/bin/bash

# Script Name: dir2file - A simple shell script that saves a directory listing in a file

status=Directory is saved

Is -1 > dirlist

echo $status

Когда вы запустите этот сценарий, результат будет идентичен результату предыдущего раздела.

Вы можете сохранить группы значений под одним именем переменной, что полезно при связанных значениях. Составные переменные, которые сохраняют группы значений, называются массивами. Например, вы могли бы создать следующий массив:

£ull_name[1]=John full_name[2]=Smith

Когда вы используете значение элемента массива, заключайте имя в фигурные скобки следующим образом:

echo  ${full_name[2]}

Считывание данных в переменные

Вы можете поместить данные в переменную из одного из следующих источников:

•       Задание значения в сценарии с помощью знака равенства =. Этот метод рассматривался в предыдущем разделе.

•       Присвоение результата выполнения команды с помощью обратных кавычек \

•       Принятие информации из командной строки при запуске сценария.

^ Приглашение для пользователя ввести данные с помощью команды чтения.

Этот раздел описывает, как считывать данные в переменные, используя методы, описанные выше.

В предыдущем разделе обсуждалось присвоение простых значений с помощью знака =. Вы также можете сохранить результат арифметических вычислений в переменной, используя команду let следующим образом:

let  sum=3+4

let total=total+l

let sum=$nl+$n2-3

Вы можете прибавлять +, вычитать -, умножать * или делить А Можете использовать операцию %, которая возвращает остаток от деления, например 8%5=3.

Вы можете сохранить результат команды, используя обратные кавычки, следующим образом:

today=date4

Среда выполнит команду выдачи даты, сохранив результат в переменной today, как показано ниже;

echo  $today

Sun Jan  9   15:37:45   PST  2005

Вы можете принять значения переменных из командном строки при запуске сценария следующим образом:

./dir2file 21 33 44

Значения сохранены во встроенных переменных системных сценариев, которые пронумерованы, начиная с $0. Команды, приведенные выше, приводят к следующим переменным:

echo $0 dir2file echo $1 21

echo $2 33

echo $3 44

Заметьте, что первый пункт информации, считанной из командной строки, является именем сценария, которое сохранено в переменной $0.

Простой сценарии из предыдущего раздела изменён ниже для использования ввода информации из командной строки:

#!/bin/bash

#Script Name:   dir2file - A simple shell script that  saves a directory listing in a file Is  -1  > dirlist echo  $1

Чтобы передать значение для переменной $1, выполните сценарий следующим образом: ./dir2file   Directory  is  saved

Directory  is  saved

Такой же сценарий модифицирован ниже для запроса информации от пользователя: #!/bin/bash

# Script Name: dir2file - A simple shell script that saves a directory listing in a file echo -n Enter text:

read status

Is -1 > dirlist

echo $status

Когда сценарий достигает третьей строки, echo -n, то выводится текст. Когда сценарий достигает следующей строки, read, то ждёт ввода с клавиатуры. Когда пользователь нажимает клавишу 11Еп|И. выполняются оставшиеся две строки. Сеанс выглядит следующим образом;

./dir2£ils

Enter text: Directory is saved

Directory is saved

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

Системные сценарии также обеспечивают встроенные переменные, которые вы можете использовать. Одна из полезных переменных - НОМЕ, которая содержит путь к домашнему каталогу учетной записи пользователя, выполняющего сценарий. Еще одна переменная - PWD, которая содержит путь к текущему каталогу. Чтобы увидеть описание всех встроенных переменных, смотрите man-страницу для встроенных переменных, mart bulltins. Вы можете использовать встроенные переменные тем же способом, которым вы используете ваши собственные созданные переменные:

echo $HOME

Специальные символы и кавычки

Системные сценарии могут воспользоваться преимуществами специальных значений, присвоенных определённым символам. Полезные специальные символы:

 Представляет любую строку символов в имени файла. При использовании отдельно символ * выводит список имён всех файлов в текущем каталоге, за исключением имён файлов, начинающихся с точки.

Представляет одиночный символ в имени файла. Использование имени file? Приведёт к выдаче списка имён файлов, содержащих fllel, flle3 и nle9, но не file 10, file20 и т.п.

[.... ] Список замены, который содержит набор подходящих символов для соответствия. Например, если вы используете имя file [xyz ], результирующий список будет содержать имена filex и ttley, но не filea или fileq.

•        [!...] Список замены, который содержит набор неподходящих символов для соответствия. Например, если вы используете имя file[ !xyz], результирующий список будет содержать имена fileb и filew, но не filex или filez.

•        $ Сообщает о начале имени переменной.

Вы можете отключить значения специальных символов, заключив символы в кавычки. Двойные кавычки и одиночные кавычки имеют различные действия. Двойные кавычки отключают некоторые специальные символы, но позволяют замену значений переменных. Одиночные кавычки отключают все специальные символы, не позволяя никаких замен значений переменных, как показано в следующих командах:

city=S&n Diego

echo $city n$city $city

San Diego San Diego $city

Как вы можете видеть, одиночные кавычки отключают действие символа $ и выводят буквально символы между кавычками. Вы можете указать системе обрабатывать специальный символ, как буквальный, перед специальным символом, поставив символ \ следующим образом:

echo \$city $city

Управление потоком данных

Выполнение команд в сценарии продолжается от первой строки до последней. Однако возможно изменить порядок выполнения операторов. Система предоставляет два типа команд, которые изменяют порядок выполнения операторов:

•   Условные операторы: Команды в условном операторе выполняются, только когда
условие считается истинным. Некоторые команды не выполняются при работе сце­
нария, потому что условие выполнения этих команд никогда не наступает. Путём
выполнения операторов только при соблюдении некоторых условий сценарий обес­
печивает большую гибкость, отвечающую изменяющимся условиям. Например сце­
нарий может удалить ненужные файлы, если сегодня пятница, но не может, если се­
годня понедельник.

Среда предоставляет два условных оператора:

•       Оператор if: Проверяет одно или более условий. Выполняет команды, если условие истинно. Вы можете определить наборы альтернативных команд для выполнения, если ни одно из условий не истинно.

•       Оператор case: Наборы альтернативных разделов в операторе выбора, каждый раздел содержит набор команд. Для каждого раздела установлен образец. Оператор выбора проверяет строку. Затем оператор выбора выполняет команды в разделе, где строка соответствует образцу раздела.

•   Циклы: Команды в цикле повторяются. Команды могут повторяться столько раз,
сколько потребуется. Например, сценарий может обработать каждый файл в катало­
ге, используя одни и те же команды. Команды повторяются один раз для каждого
файла. Или цикл может быть настроен для повторения некоторое число раз, напри­
мер 10 раз.

Система предоставляет три полезных оператора цикла:

•     Цикл   for: Команды п цикле for будут повторяться, пока условие истинно. Час­
то используется для установки цикла, который повторяется указанное число раз.

,•   Цикл while: Команды в цикле while продолжают повторяться, пока установленное условие истинно.

•     Цикл until: Команды в цикле until продолжают повторяться, пока не станет
истинным указанное условие.

Проверка условий

Система предоставляет тестовые команды для проверки условий. Тестовые команды проверяют выражения, чтобы увидеть, являются ли выражения истинными, следующим образом:

test $age -eq 21 [ $age -eq 21 ]

Два оператора эквивалентны. Эта глава использует второй формат. Пробел требуется перед и после каждой квадратной скобки. Проверка возвращает «истинно», если $аде равно 21.

Табл. 19.1. перечисляет параметры, которые вы можете использовать для проверки значений.

Табл. 19.1. Параметры для использования при тестировании выражений

Тестовая команда может быть использована для проверки свойств файла. Табл. 19.2. перечисляет наиболее полезные параметры для проверки файлов.

Табл. 19.2. Параметры для использования при тестировании файлов



 


Символ * использован в последнем варианте для обработки всех условий, не перечисленных отдельно в предыдущих разделах оператора сазе. Любая строка, не содержащая имена John или Sam, соответствует последнему варианту.

Цикл for

Цикл for повторяет команды один раз для каждого пункта в списке параметров. Общий формат цикла for:

for index in  list do

conmiands

done

Слово index является именем переменной. Оно присваивает значение из списка в каждом шаге цикла. Выражение list является списком параметров, которые цикл for перебирает. Простой пример цикла for:

for  name  in  John  Sam  Paul do

echo  $name done

Пункты списка могут быть разделены пробелами или символами конца строки.

Вы можете обеспечить цикл for списком параметров с помощью выполнения команды. Например, следующий сценарий обрабатывает вывод команды даты:

#!/bin/bash

#  Script name:   splitdate -  outputs  parts  of  the date  in a

column

for part  in  date* do

echo $part done

При выполнении сценария вы увидите: ./splitdate

МОП

Jan

10

15:02:34

PST

2005

Другим способом создания списка параметров является сохранение параметров в файле и чтение файла, например, так;

for item in  cat  filel do

echo $item done

Если вы пропустите слово in, сценарий будет искать список среди пронумерованных переменных, полагая, что вы введете список в командной строке. Таким образом, вы можете использовать следующий синтаксис для ввода вашего списка в командной строке:

for name do

echo  $name

done

Затем запустите сценарий с параметрами:

./listnames  John Sam Paul

John

Sam

Paul

Цикл for полезен для обработки каждого файла в каталоге. Следующий цикл for отображает на экране каждый файл в текущем каталоге:

for file in * do

if   [!-з  Sfile  ] then

echo Removing  $file rm $file

fi

done

Код проверяет, не является ли файл пустым. Если файл пустой, отображается имя файла, и файл стирается.

Символ * представляет все файлы в текущем каталоге. Вы можете назначить другой каталог с помощью строки, показанной ниже:

for file in /home/janet/*

Циклы while и until

Команды в цикле while продолжают выполняться, пока истинно условие. Общий

формат цикла while:

while   [  condition ] do

commands done

Цикл while сначала проверяет условие. Если условие верно, команды выполняются. Когда сценарий достигает слова done, то возвращается к строке while и проверяет условие опять. Если условие все ещё истинно, сценарий выполняет команды опять. Если условие не верно, сценарий обрабатывает команду, следующую за циклом while.

Простой системный сценарий, приведенный ниже, выполняет цикл while четыре раза:

#!/bin/bash

# Script name-, numbers - outputs a list of numbers

n=0

while [ $n -It 3 ]

do

echo $n

let n=n+l done echo After loop

Результат выполнения программы показан ниже:

./numbers

О

1

2

After loop

Цикл until очень похож, за исключением того, что останавливается, когда условие становится истинным. Для получения вышеприведенного результата вы могли бы использовать цикл until, поменяв-1 на -eq:

п=0

until   [  $n  -eq 3   ]

do

echo  $n

let  n=n+l done echo After  loop



Обсудить статью на форуме


Если прочитаная статья из нашей обширной энциклопедия компьютера - "Linux -Системные сценарии", оказалась полезной или интересной, Вы можете поставить закладку в социальной сети или в своём блоге на данную страницу:

Так же Вы можете задать вопрос по статье через форму обратной связи, в сообщение обязательно указывайте название или ссылку на статью!
   


Copyright © 2008 - 2018 Дискета.info