Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
unix_shell_lab2.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
262.66 Кб
Скачать
      1. Написание скриптов Unix Shell

Создание собственного скрипта

Скрипт представляет собой файл-сценарий, содержащий текст программы на языке Unix Shell. Файл должен начинаться с последовательности:

#!<путь и имя файла интерпретатора>

Например: #!/bin/bash

Далее следует текст программы. Для исполнения файл должен иметь права как минимум на чтение и (не обязательно) на исполнение (см. ниже)

Способы исполнения скрипта

Существует несколько способов исполнения скрипта на Unix Shell. Пусть например скрипт расположен в текстовом файле с именем prog.sh,

(Показан текст скрипта, выводящего одну строчку “This is test script”, скрипт находится в файле prog.sh)

[mike@bublik ~]$ cat prog.sh

#!/bin/bash

echo "This is test script!"

[mike@bublik ~]$

тогда возможны варианты:

  1. Выполнить скрипт как обычную программу (необходимы права на чтение и исполнение файла, содержащего текст скрипта):

[mike@bublik ~]$ chmod +rx prog.sh

[mike@bublik ~]$ ./prog.sh

This is test script!

[mike@bublik ~]$ /home/mike/prog.sh

This is test script!

[mike@bublik ~]$

  1. Выполнить так: “. <программа>” (необходимы только права на чтение файла со скриптом):

[mike@bublik ~]$ chmod 444 prog.sh

[mike@bublik ~]$ ls -la prog.sh

-r--r--r-- 1 mike teach 41 3 мар 03:42 prog.sh

[mike@bublik ~]$ . ./prog.sh

This is test script!

[mike@bublik ~]$

  1. Передать текст скрипта на stdin интерпретатора, используя конвейер (необходимы только права на чтение файла со скриптом):

[mike@bublik ~]$ cat prog.sh | /bin/bash

This is test script!

[mike@bublik ~]$

  1. Передать имя файла в качестве параметра интерпретатору (необходимы только права на чтение файла со скриптом):

[mike@bublik ~]$ bash prog.sh

This is test script!

[mike@bublik ~]$

Некоторые замечания

  • Небольшие скрипты удобнее разрабатывать непосредственно в командной строке, чем в файле, используя буфер команд:

    • набрать в командной строке цепочку команд

    • выполнить цепочку

    • посмотреть результат

    • не вводя заново все вернуть последнюю введенную команду из буфера

    • исправить/дополнить

    • и т.д. до тех пор, пока не будет работать без ошибок

  • При переносе скрипта из командной строки в текстовый файл часто возникает проблема «очень длинных строк». Unix Shell позволяет разбить длинную строчку (например с длинным конвейером) на короткие строки, используя в качестве разделителя знак обратного слеша “\” в конце каждой строки, кроме последней.

Например: last | grep -v -E "(^$|wtmp begins)" | tr -s " " | cut -f 1 -d " " | sort | uniq -c | sort -rnk1

можно при переносе в файл разбить на несколько строк таким образом:

last |\

grep -v -E "(^$|wtmp begins)" |\

tr -s " " |\

cut -f 1 -d " " |\

sort |\

uniq -c |\

sort -rnk1

  • Если разные команды находятся в файле в разных строчках, то ставить разделитель “;” после каждой команды необязательно.

  • Однострочный комментарий в скрипте начинается со знака #

Основные команды UNIX-подобных ОС (в дополнение к списку из Лаб. №1)

Для просмотра более подробной справки по команде можно выполнить:

command -- help

command -h

man command

КОМАНДЫ:

    1. echo – вывод на экран строки, переданной в качестве параметра.

Параметры:

-e – включить режим интерпретации специальных последовательностей символов (“\n” – перенос строки, “\t ” – табуляция и т.д.)

-n – не переходить на след. строку

Пример: echo “test”; echo –e “test1\ntest2”

(вывести строки test, test1, test2 по одной на каждой новой строке)

    1. read – чтение значений со стандартного ввода в переменную или массив

Параметры:

-e – рассматривать весь ввод как один элемент

-a – рассматривать весь ввод как массив элементов (разделители - пробельные символы). Создает переменную-массив и заполняет элементы массива значениями.

Пример: while read –a a; do echo “${a[0]} ${a[1]}”; done

(Считывает с stdin строки. Каждая итерация цикла – обработка одной строки. Строка считывается, разбивается на несколько элементов, разделителем считаются пробельные символы, элементы заносятся в массив “a”. В теле цикла на экран выводится нулевой и первый элементы массива)

    1. test – многофункциональная программа для проверки на истинность различных условий (сравнение арифметических значений, сравнение строк, проверка существования файлов/папок, проверка типов файлов, проверка прав доступа, времени последнего изменения и т.д.). Используется в условном операторе, операторе выбора, в циклах, а также самостоятельно.

Синтаксис1: test <условие>

Синтаксис2: [ <условие> ]

Примечание: смотрите man test для получения информации о возможных параметрах

Пример: if [ “${STR}” == “YES” ]; then A=1; else A=2; fi

(Если значение переменной STR равно строке YES, то переменной А присвоить 1, иначе присвоить 2)

    1. tr – многофункциональный редактор потока. Позволяет удалять символы, заменять одни символы другими, удалять дубликаты и т.д. Подробнее см. man tr.

Пример: echotest string” | trs” “t– замена в строке всех s на t