Практические работы / Задания / ПЗ-2. Разработка интерактивного сценария bash
.pdfПрактическаяработа№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 |
|
|