Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Практические работы / Задания / ПЗ-2. Разработка интерактивного сценария bash

.pdf
Скачиваний:
15
Добавлен:
15.02.2021
Размер:
225.78 Кб
Скачать

Практическаяработа№3 Разработкаинтерактивногосценарияbash

Цельработы :

изучениеосновныхправилпрогрнаязыкеммированияbash;

приобретенавыкараб тынсольномтекстовомиередакторе;

 

продолжениезнаскомстваандамиshell;

приобретение навыковразработкиинтерактивногосценария.

 

Сценарийкоманднойстроки(

 

shell-скрипт)

 

– этообычны

й текстовый файл,вкоторы

й

последовательнозаписаныкоманды,кот рыельзовавводитжеткомандноель

 

 

 

 

 

 

й строке.Фа

йл

выпкоманднымлняетсяинтерпретатором

 

– шеллом(

 

shell). В Linux- и Unix-сисдлятого,емахчтобы

 

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

 

.

 

 

й запускает

файл,должныбытьустансоотввлпренатствующиенывап

 

 

олнение.Этом сджнос лать

 

помкомандыщью

 

chmod

u+x имяскрипта

Вперво й строкескриптауказываетсяпуть

 

 

интерпретатору #!/bin/bash.

 

 

 

 

 

 

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

 

 

 

 

nano или vi, набравимя

 

редакторавкомандно

 

й строке.

 

 

 

 

.

 

 

 

Нижеприведеныосновныеправилапрогрнязыкеаммированияbash

 

 

 

 

 

 

1.

Комментарии

 

 

 

 

 

 

 

 

 

Строки,начинающиесясимвола#заисключением( комбинации#!),являютсяментариями.

 

 

 

 

 

Комменмогутакжерасполагатьсяариивконцестрокиисполняемымкодом.

 

 

 

 

 

 

 

 

2. Особеннрабстрокамитысо сти

 

 

 

 

 

 

 

 

 

 

 

Одиночныекавычки('ограничивающие'), строкиобесторон,служатхдляпредотвращения

 

 

 

 

 

 

 

интерпретацииспец ,мволовкотальнарыеыхгутвстрокеодиться.Дво

 

 

 

 

 

 

йныекавычки("")

 

предотвращаютинтерпретациюспец мвальных

 

 

олов,заисключением

$, ` (обрка)вычкатнаяи

 

\

(escape

обратный

слэш)Желате. использдвоьновать

 

 

 

йныекавычобращенииприк

 

перем.Принеобходимостиннвыспецвестиальны

 

 

 

 

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

 

 

экранирование:символ

 

\ предотвращаетин

терпрслезадующеготациюнимсимвола.

 

 

 

3. Пробелыиперевстрокды

 

 

 

 

 

 

 

 

 

 

 

Интерпретаторы sh и bash чувствкпробиперевтелстр.ьныамОтодкамельныеоанды

 

 

 

должначинатьсяыово

 

й строки.Еслестьнеобходимостьнаписаещеоднукомандувто

 

 

 

 

й же

строке,чтоипредыдущая,

– можнопоставитьзапяточку

 

 

 

й вконцепредыдуще

й команды.Пробел,

 

какправило,разделяетназваниекомп ндыраметры,которые

 

 

 

 

 

 

й передаются,такжепараметры

 

междусобо

й.

 

 

 

 

 

 

 

 

 

 

4. Переменные

 

 

 

 

 

 

 

 

 

 

 

Имяпеременно

й аналогичнотрадиционномупредставлениюобидентификаторе,..именем

 

 

 

 

 

 

можетбытьпоследовательностьбукв,циподчеркиванифр

 

 

 

 

 

й,начинающаясябуквыили

 

подчерки.Когдаинтерптекстеторвстаниявресценач имяетпе ияеменно

 

 

 

 

 

 

й,тоонвместонего

 

подставляетзначениеэто

 

й переменной.Поэтомуссылкинапеременныеназываютсяподстановко

 

 

й

переменных.Если

variable1 – этоимяпеременно

й,то $variable1 – этоссылканаеезначение.

 

Импеременныхнабезпрефикса

 

 

$ могутиспользоватьсятолькоприобъявлениипеременно

 

й илипри

 

присваиваперемениино

 

й некотзначен.Вортличиеобольшинстгоядругихязыкова

 

 

 

 

 

 

программирования, Bashнепроираздводителпоетипамменныхния.Посути,переменныеBash

 

 

 

 

 

 

 

являютсястрок

овымипеременнызависимости,но,в отконтекста, Bashдопускаетцелочисленную

 

 

 

 

 

 

арифметикуспеременными.Определяющдержимоефакторздеслужсоь мпеременныхит .

 

 

 

 

 

 

 

5. Оперисваиванияатор

 

"="

 

 

 

 

 

 

 

 

Прииспользованиипеприсваиаторанельзястапробеванияить

 

 

 

 

лыслеваисправаотзнака

 

равенства.Еслипроцепритрссеваиваниявыполнитьбуетсяарифмоп,етопертичрацииедские

 

 

 

 

 

 

 

записьюарифметичвыражиспользуютопернияскогоlet,апример:тор

 

 

 

 

 

 

 

 

Let a=2\*2

(операторумноженявлясп тсциямволоиальнымд

 

 

олженбытьэкранирован).

 

6. Арифметическиеоператоры:

 

 

 

 

 

"+"сложение

 

 

 

 

 

 

 

"–"вычитание

 

 

 

 

 

 

"*"умножение

 

 

 

 

 

 

 

"/"делц(ениелочисленное)

 

 

 

 

 

 

"**"возведениестепень

 

 

 

 

 

 

 

"%"остатокотделения

 

 

 

 

 

 

 

7. Специальныепеременные

 

 

 

 

 

 

 

 

Для Вash существуетрядзарезервиримп ремен,которыехранятваопрныхделенные

 

 

 

значения.

 

 

 

 

 

 

 

 

 

 

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

 

 

й строки,хранятсяв

зарезервированныхпеременных$0, где$1,$0$2, $3...,

 

 

– этоназваниефа

йла сценария, $1

– этопервы й

аргумент, $2

 

– второй, $3 – третий итакдалее.Аргументы,следующиеза$должны9,заключатьсяв

 

 

фигурныескобки,например: ${10},Передпар${11},скриптуаметровчапроисходит$виде{12}.

 

 

 

 

перечэтпараметровихсленияпосле

 

 

именискрчерезпробелптавмоментегозапуска.

 

 

 

 

Другиезарезервированныепеременные:

 

 

 

 

$DIRSTACK– содержимоевершиныстекакаталогов

 

 

 

 

$EUID– эффективный UID.

 

 

 

 

$

 

... содрержитальны

й идентификатор,которы

й устанавливаетсятолькоприлогине.

 

$UID

 

 

 

GROUPS – массивгрупп,ккоторымринадлежиттекущи

 

й пользователь

 

$HOME– домашний катапологьзователя

 

 

 

 

$HOSTNAME– hostnameкомпьютера

 

 

 

 

$HOSTTYPE– архитектурамашины

 

 

 

 

$PWD– рабочий каталог

 

 

 

 

 

$OSTYPE– типОС

 

 

 

 

 

 

$PATH– путьпоискапрограмм

 

 

 

 

 

$PPID– идентификаторродительскогопроцесса

 

 

 

 

$SECONDS – времяработыскриптав(секундах)

 

 

 

 

$# – общееколичествопарамет,переданныхск овипту

 

 

 

 

 

$* – всеаргументы,переданныескриптув( встрокуодятся)

 

 

 

 

 

$@ – тожесампредыдущи,чтои

 

й,нопараметрывыводят

сявстолбик

 

 

$! – PIDпоследнегозапущенноговфонепр цесса

 

 

 

 

 

$$ – PIDсамогоскрипта

 

 

 

 

 

 

8. Кодзавершения

 

 

 

 

 

 

 

 

Команда exit можетисподлзавершьзоватьсярабосц,еночноытакияарже, иаквя

 

 

 

программахнаязыкеCКр.тона, гоожетвозвращатьнекоторзначение, мобытьроежет

 

exit можявноуказатькодвозврата,

 

проанализирвызывающимпроцессом.Команде

 

 

 

виде

exitnnn где nnn– этоквозвратадчисло( диапазоне0

–255).

 

 

9. Операторвывода,

 

 

 

 

 

 

 

Echoпеременныеилистроки

 

 

 

 

 

 

10. Операторввода

 

й

 

 

 

 

Read_ имяпеременно

 

 

 

 

 

 

Однакоманда

read можетпрочитатьприсвоить( )значениясразудлянескольких

 

 

read,

перем.Еслиеременныхв

 

read больше,чемихвведеночерез( пр), белыставшимся

 

толишигн.иеорируются

 

 

 

й больше,чемпервкомаменныхде

присваиваетсяпустаястрока.Еслипередзнаваемыхчени

 

 

 

11. Условный оператор

Ifкоманда1

thenкоманда2 [else

команда3] fi.

после

Если команда1

вернупосвыполнзначеис" ",енитвыполняетсяоинае

команда2

then

Еслиестьнеобходимоссравниватьзначенияпереме/илико,нпослестантных

if

.

 

 

[[выражение]].

Обязательноставитьпробелымежду

используетсяспециальнкомандая

 

 

выражениемскобками,например:

if [[ "$a" –eq "$b" ]] then echo "a = b"

fi

12. Операциисравнения:

Операциисравненияцелыхчисел:

 

 

 

 

-eq

 

 

 

равно

 

 

 

-ne

 

 

#неравно

 

 

 

-lt

 

#

меньше

 

 

 

-le

 

#

меньшеилиравно

 

 

-gt

 

#

больше

 

 

 

-ge

 

#

большеилиравно

 

 

Операциисравнениястрок:

 

 

 

 

-z

 

 

#

 

 

 

 

 

 

#

строкапуста

 

 

 

 

-n

 

строканепуста

 

 

 

=

 

или

==

 

стравныоки

 

 

 

 

#

 

 

 

 

 

 

!=

 

 

 

строкинеравны

 

 

 

 

 

 

 

 

 

#

 

 

 

 

<

 

 

 

меньшесравн( кодыиваются)мволов

 

 

 

#

 

 

 

 

 

 

 

 

<=#

 

меньшеилиравносравн( кодыиваются)мволов

 

 

>

 

#большесравниваются( коды

символов)

 

>=

#

 

большеилиравносравн( кодыиваются)мволов

 

 

!

 

 

 

отрицаниелогическоговыражения

 

 

 

 

#

 

 

 

 

 

 

 

 

-

a,(&&) логическоеИ«»

 

 

#

 

 

 

 

 

 

 

 

 

-o,(||) # логическоеИЛИ«»

 

 

13. Множественный выбор

 

 

 

 

 

 

 

 

 

 

#

 

 

 

case:

 

 

 

 

 

 

Длямножественноговыбоможетприменяаоператьсяор

 

 

 

 

case переменнаяin

 

 

 

 

 

значение1 )

 

 

 

 

 

 

команда1

 

 

 

 

 

 

 

;;

 

 

 

 

 

 

 

 

значение2 )

 

 

 

 

 

 

команда2

 

 

 

;; esac

Выбиразначобознениямыепрачаютсяво

й скобкой вкознце.аченРазделительс туация

й – ;;

14. Цикл for

 

for.

 

 

Существуетдваспособазаданияцикла

й; do; команды;

done.

1Стандартны.

й – for переменная in списокзначени

Например:

 

 

 

 

for i in 0 1 2 3 do

echo $i done

2. С-подобный

for ((i=0; c <=3; i++)) do

echo $i done

15. Цикл while: while

условие; do;

команда; done

Синтакусловиязапитакоси

й же,какивусловномоператоре,например

:

i=0

 

 

while [ i –le 3 ]

 

 

do

 

 

 

echo $i

 

 

 

let i+=1

 

 

 

done

 

 

 

16. Управцикламиение

 

 

continue Ониточно

 

Дляупраходомвыполненияленцикласлужаткоманды

 

соотсвоиманалогаметствдругихязыкахпрограммированияют.Команда

 

break иbreak прерывает.

исполнениецикла,втовремякак

continue передупрвначалоетвлениецикла,минуявс

 

последующиекомандывтелецикла.

Задание

апрактическуюработу

 

 

 

 

Разработать скрипт,осуществляющи

й выводменю,состоящегоизследпунктовющих

:

текущий пользователь,

 

 

объемиспользуемо

й памяти,

 

 

объемдисковогопространства,

запущенныепроцессы,

процессы,запущенныетекущимпользователем,

системнаядатаврем,

времяза пускасистемы

выход

ивывсоодтветствующе

й информациивзависимостиотвыбранпунктаме.Процессюого

 

 

повдотехпорорять,поканебудетвыбранпунктмевыход«»ю

 

.

 

 

 

 

Порядвыпработылненияк

 

 

Входевыполненияработы

следуетучитывать

следующие моменты:

1) дляназвани

й пунктовменюлучшеиспользоватьлатински

й алфавит,в названияхобязательно

обращайте вниманнаспециимволеальнправилаихиспользованияыестроках;

 

 

2)необходобращвнирегиматьвводимыханиестримволовкомандах( их

 

опциях,в

специальныхсловахязыкаshell),знакипробела

]

,н апример,воператоре

[ ]:

[ ̺

expression ̺

select, case, if.

3)Дляработысменюудобноисп ператорыльзовать

 

 

При выполнении рабмпонадобитьсягуттыследующиекоманды

 

.

Имятекущего

пользователя(whoami)

 

 

Cинтаксискоманды

:

 

 

 

 

whoami

 

 

 

 

Выводитде

йствительный идентификаторпользователя

Системнаядатавремя(date) date

время.

ПоказываеттекущеевремязаданномФОРМАТЕ,илиустанавливаетсистемнуюдату

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Cинтаксискоманды

:

 

 

 

]

 

 

 

date [ПАРАМЕТР]...ФОРМАТ[+

 

 

 

 

]

 

date [-u|--utc|--universal]ММДДччмм[[[ВВ]ГГ][сс.

 

 

-d, --date=СТРОКА - показываетвремя,описанноеСТРОКОЙ

- нетекущее' 'врем

я;

-f, --file=ФАЙЛДА

Т

- каки

--date,толькодлякаждстрвойки

ФАЙЛЕДА

Т;

-I, --iso-8601[=TIMESPEC] - вывод вформстрокид/атврыеISOмени

-8601;

TIMESPEC=`date' (илипропущено)

 

- показываеттоль

кодату; `hours',или`seconds'`minutes',

-

датуивремясзаданточнойстью

 

 

;

 

 

 

ФАЙЛА;

 

-r, --reference=ФАЙ Л

- показывавремяпослизмененияднегот

 

 

-R, --rfc-822

- выводстрокидатыформатеRFC

 

-822;

 

 

-s, --set=СТРОК А - устанавливаетвремя,заданное

СТРОКОЙ;

 

 

-u, --utc, --universal

- выдаетилиустанавлвремяпоГринвичвает

 

у;

--help выдаетэтуинформзаканчцботиювает

 

 

 

у;

 

 

--version выдаетинформациюверсиизаканчиваетработ

 

 

у;

 

 

 

ПараметрФОРМАТуправляетисходящейинформацией.Па абметрслькотает

 

 

 

 

 

временемпо

Гринвичу.Существуют

 

следующие интерпретируемыезначения

:

 

%%

- символпроцента

%

 

 

 

 

 

 

%a

- сокрнащедзваниееделиялокалиноеВск(..Суб

 

 

 

)

 

 

%A

- полноеназваниед еделиялокали,снепостояннойдлинойназвания

 

 

 

 

 

(Воскресенье..Суббота

)

 

 

 

 

 

 

 

%b

- сокрнащмзваниесяцаное

 

 

 

влокалиЯнв(..Дек

)

 

 

%B

- полноеназваниемесяцалок, липостояннойдлинойназванияЯнварь( ..Декабрь

 

 

 

 

)

%c

- датаивремялокалиСуб(Ноя04 12:02:33 EST 1989

 

)

 

 

%d

- деньмесяца(01..31

)

 

 

 

 

 

 

%D

- датамм(/дд/гг

 

)

 

 

 

 

 

 

%e

- деньмесяца,безнуле( йва1..31

 

 

 

)

 

 

 

%h

- аналогично%

b

 

 

 

 

 

 

%H

-

час(00..23

)

 

 

 

 

 

 

 

%I

- час(01..12

)

 

 

 

 

 

 

 

%j

- деньгода(001..366

)

 

 

 

 

 

 

%k

- час( 0..23

)

 

 

 

 

 

 

 

%l

- час( 1..12

)

 

 

 

 

 

 

 

%m

- месяц(01..12

)

 

 

 

 

 

 

 

%M

- минуты(00..59

)

 

 

 

 

 

 

 

%n

- новаястрок

а

 

 

 

 

 

 

 

%p

- взависимостиотлокаAMилиPMдополудня(

 

 

 

- послеполудня

)

 

%r

- время, 12

-часовомформатечч(:

 

 

мм:сс[AP]M

)

 

 

%s

- секунды`00:00:00 1970

-01-01расширениеUTC'GNU)(

 

 

 

%S

- секунды(00..60)

 

 

 

 

 

 

 

 

%t

-горизонтальнаятабуляция

 

 

 

 

 

 

 

%T

- время, 24

-часовомформатечч(::сс)

 

 

 

 

 

 

%U

- номернеделивгодусВос,кпакредрвымсеньне(00делим..53)

 

 

 

 

 

 

%V

- номернеделивгодусП

 

 

онедель,какпервымнеиком(01дели..53)

 

 

 

%w

- номдв еделеяр(0принимает..6);заВоскре0 сяенье

 

 

%W

- номернеделивгодусПонед,какпедрвымльникомне(00дели..53)

 

 

%x

- предсавлокалитавлениеымм(/дд/гг)

 

 

 

%X

- представлениевременилокали(%Ч:М:%С)

 

 

 

%y

-последниедвар годазряда(00..99)

 

 

 

%Y

- год(1970...)

 

 

 

 

%z

- фовременнойматзоныRFC

 

-822 (-0500)нестандартноерасширение( )

 

%Z

- временнаязонанаприм( , EDT),илиесличегозонанеропределена

 

 

 

Поумолчанию

, date заполняет пустыецифровыеполянулями.ВGNU

date распознает

следующиемодификаторымежду

 

 

`%' и цифровойкомандой:

 

`-'дефис()незаполнятьполе

 

 

 

 

 

`подчеркивание' ( )заполнитьполепробелами

 

 

.

 

Вработыемя

системы(

uptime)

 

 

Cинтаксискоманды

 

:

 

 

 

uptime uptime [-V]

 

 

Показываетвремяработысистемы

 

 

от последнегозапуска.

 

Отчётобиспользованиидисковогопространства(

df)

 

Cинтаксискоманды

 

:

 

 

 

df [опции] [устройство...]

 

Опции:

[-ahHiklmPv] [-t тип-файловой-системы] [-x тип-файловой- системы]

[--

block-size=размер] [--

print-type] [--

no-sync] [--

sync] [--help]

[--

version] [

--]

 

 

 

 

Побразцаисквфа

йле(

grep)

 

 

 

Cинтаксискоманды

:

 

 

 

 

 

grep pattern [file...]

pattern, где pattern

 

Поискучастковтекстафа

 

йле(ах),соответствующихшаблону

можетбытькакобычно

й строкой,такирегулярнымвыражением.

Еслифа йл(ы)дляпоисканезад, н

токоманда grep работаеткакфидлусьятро

йства stdout, напримерв

pipes:

bash$ ps ax | grep clock

 

 

 

765 tty1

S

0:00 xclock

 

 

901 pts/1

S

0:00 grep clock