105.1 Урок 3
Сетрифікат: |
LPIC-1 |
---|---|
Версія: |
5.0 |
Розділ: |
105 Оболонки та сценарії оболонки |
Тема: |
105.1 Налаштування та використання середовища оболонки |
Урок: |
3 з 3 |
Вступ
Після ознайомлення з оболонками, сценаріями запуску та змінними в попередніх уроках ми завершимо всю тему налаштування оболонки, поглянувши на два дуже цікаві елементи оболонки: псевдоніми і функції. Насправді вся група змінних, псевдонімів і функцій, і їхній вплив однн на одного, це те, що складає середовище оболонки.
Основна перевага цих двох гнучких засобів оболонки, економія часу, пов’язана з концепцією інкапсуляції: вони пропонують можливість об’єднати, в одній команді, серію повторюваних або рекурентних команд.
Створення псевдонимів
Псевдонім – це ім’я, яке замінює іншу команду(и). Він може працювати як звичайна команда, але натомість виконує іншу команду відповідно до визначення псевдоніма.
Синтаксис для оголошення псевдонімів досить простий. Псевдоніми оголошуються записом ключового слова alias
, за яким слідує призначення псевдоніма. У свою чергу, призначення псевдоніма складається з псевдоніма, знаку рівності та однієї або кількох команд:
alias alias_name=command(s)
Наприклад:
$ alias oldshell=sh
Цей незгарбний псевдонім запускає екземпляр оригінальної оболонки sh
, коли користувач вводить oldshell
у терміналі:
$ oldshell $
Сила псевдонімів полягає в тому, що вони дозволяють нам писати короткі версії довгих команд:
$ alias ls='ls --color=auto'
Note
|
Щоб отримати інформацію про команду ls та його кольори, введіть |
Подібним чином ми можемо створювати псевдоніми для серії об’єднаних команд – крапка з комою (;
) використовується як роздільник. Ми можемо, наприклад, мати псевдонім, який дає нам інформацію про розташування виконуваного файлу git
та його версію:
$ alias git_info='which git;git --version'
Щоб викликати псевдонім, ми вводимо його назву в терміналі:
$ git_info /usr/bin/git git version 2.7.4
Команда alias
виведе список усіх доступних псевдонімів у системі:
$ alias alias git-info='which git;git --version' alias ls='ls --color=auto' alias oldshell='sh'
Команда unalias
видаляє псевдоніми. Ми можемо, наприклад, виконати unalias git-info
і подивитися, як він зникає зі списку:
$ unalias git-info $ alias alias ls='ls --color=auto' alias oldshell='sh'
Як ми бачили з alias hi='echo We salute you.'
у попередньому уроці, ми повинні брати команди в лапки (одинарні або подвійні), якщо вони містять пробіли через наявність аргументів або параметрів. :
$ alias greet='echo Hello world!' $ greet Hello world!
Команди з пробілами включають також команди з параметрами:
$ alias ll='ls -al'
Тепер ll
покаже список усіх файлів, включно з прихованими (a
), у довгому форматі (l
).
Ми можемо посилатися на змінні в псевдонімах:
$ reptile=uromastyx $ alias greet='echo Hello $reptile!' $ greet Hello uromastyx!
Змінній також можна призначити значення в псевдонімі:
$ alias greet='reptile=tortoise; echo Hello $reptile!' $ greet Hello tortoise!
Ми можемо екранувати псевдонім за допомогою \
:
$ alias where?='echo $PWD' $ where? /home/user2 $ \where? -bash: where?: command not found
Екранування псевдоніма корисно, якщо псевдонім має таке ж ім’я, як і звичайна команда. У цьому випадку псевдонім має перевагу над оригінальною командою, яка, однак, все одно доступна, якщо екранувати псевдонім.
Так само ми можемо розмістити псевдонім всередині іншого псевдоніма:
$ where? /home/user2 $ alias my_home=where? $ my_home /home/user2
Крім того, ми також можемо розмістити функцію в псевдонімі, як буде показано нижче.
Розширення та оцінювання лапок у псевдонімах
При використанні лапок зі змінними середовища одинарні лапки роблять розширення динамічним:
$ alias where?='echo $PWD' $ where? /home/user2 $ cd Music $ where? /home/user2/Music
Однак у подвійних лапках розширення виконується статично:
$ alias where?="echo $PWD" $ where? /home/user2 $ cd Music $ where? /home/user2
Постійність псевдонімів: сценарії запуску
Так само, як і зі змінними, щоб наші псевдоніми стали постійними, ми повинні помістити їх у сценарії ініціалізації, які отримуються під час запуску. Як ми вже знаємо, зручним файлом для користувачів, щоб додати свої особисті псевдоніми є ~/.bashrc
. Ймовірно, ви вже знайдете деякі псевдоніми (більшість із них закоментовано та готові до використання, якщо видалити #
на початку):
$ grep alias .bashrc # enable color support of ls and also add handy aliases alias ls='ls --color=auto' #alias dir='dir --color= #alias vdir='vdir --color= #alias grep='grep --color= #alias fgrep='fgrep --color' #alias egrep='egrep --color= # some more ls aliases #ll='ls -al' #alias la='ls -A' #alias l='ls -CF' # ~/.bash_aliases, instead of adding them here directly. if [ -f ~/.bash_aliases ]; then . ~/.bash_aliases
Як ви можете прочитати в останніх трьох рядках, нам пропонується можливість мати власний файл, призначений для псевдонімів, ~/.bash_aliases
, і мати його вихідний код .bashrc
під час кожного запуску системи. Отже, ми можемо вибрати цей варіант і створити та заповнити такий файл:
########### # .bash_aliases: # a file to be populated by the user's personal aliases (and sourced by ~/.bashrc). ########### alias git_info='which git;git --version' alias greet='echo Hello world!' alias ll='ls -al' alias where?='echo $PWD'
Створення функцій
Порівняно з псевдонімами, функції є більш програмними та гнучкими, особливо коли йдеться про використання повного потенціалу спеціальних вбудованих змінних і позиційних параметрів Bash. Вони також чудово підходять для роботи зі структурами керування потоком, такими як цикли чи умови. Ми можемо думати про функцію як про команду, яка включає логіку через блоки або колекції інших команд.
Два синтаксиси для створення функцій
Існує два дійсні синтаксиси для визначення функцій.
- Використання ключового слова
function
-
З одного боку, ми можемо використати ключове слово
function
, за яким йде назва функції та команди у фігурних дужках:function function_name { command #1 command #2 command #3 . . . command #n }
- Використання
()
-
З іншого боку, ми можемо виключити ключове слово
function
і використовувати замість нього дві дужки відразу після назви функції:function_name() { command #1 command #2 command #3 . . . command #n }
Звичайним явищем є розміщення функцій у файлах або скриптах. Однак їх також можна записати безпосередньо в підказку оболонки з кожною командою в окремому рядку - зверніть увагу на PS2
(>
), що вказує на новий рядок після розриву рядка:
$ greet() { > greeting="Hello world!" > echo $greeting > }
У будь-якому випадку, і незалежно від вибраного нами синтаксису, якщо ми вирішимо пропустити розриви рядків і написати функцію лише в одному рядку, команди мають бути розділені крапкою з комою (також зверніть увагу на крапку з комою після останньої команди):
$ greet() { greeting="Hello world!"; echo $greeting; }
bash
не повідомляв про помилку, коли ми натискали Enter, тому наша функція готова до виклику. Щоб викликати функцію, ми повинні ввести її назву в термінал:
$ greet Hello world!
Як і у випадку зі змінними та псевдонімами, якщо ми хочемо, щоб функції залишалися постійними під час перезавантаження системи, ми маємо помістити їх у сценарії ініціалізації оболонки, такі як /etc/bash.bashrc
(глобальний) або ~/.bashrc
(локальний).
Warning
|
Після додавання псевдонімів або функцій до будь-якого файлу сценарію запуску ви повинні вказати такі файли як |
Спеціальні вбудовані змінні Bash
Bourne Again Shell поставляється з набором спеціальних змінних, які особливо корисні для функцій і сценаріїв. Вони особливі, оскільки на них можна лише посилатися, а не призначати. Ось список найбільш актуальних з них:
$?
-
Посилання на цю змінну розширюється до результату виконання останньої команди. Значення
0
означає успішне виконання:$ ps aux | grep bash user2 420 0.0 0.4 21156 5012 pts/0 Ss 17:10 0:00 -bash user2 640 0.0 0.0 12784 936 pts/0 S+ 18:04 0:00 grep bash $ echo $? 0
Значення, відмінне від
0
, означає помилку:user1@debian:~$ ps aux |rep bash -bash: rep: command not found user1@debian:~$ echo $? 127
$$
-
Розширюється до PID оболонки (ID процесу):
$ ps aux | grep bash user2 420 0.0 0.4 21156 5012 pts/0 Ss 17:10 0:00 -bash user2 640 0.0 0.0 12784 936 pts/0 S+ 18:04 0:00 grep bash $ echo $$ 420
$!
-
Розширюється до PID останнього фонового завдання:
$ ps aux | grep bash & [1] 663 $ user2 420 0.0 0.4 21156 5012 pts/0 Ss+ 17:10 0:00 -bash user2 663 0.0 0.0 12784 972 pts/0 S 18:08 0:00 grep bash ^C [1]+ Done ps aux | grep bash $ echo $! 663
NoteПам’ятайте, що амперсанд (
&
) використовується для запуску процесів у фоновому режимі. - Позиційні параметри від
$0
до$9
-
Розширюються до параметрів або аргументів, які передаються функції (псевдоніму чи сценарію) —
$0
розширюється до назви сценарію або оболонки.Давайте створимо функцію для демонстрації позиційних параметрів. Зверніть увагу на
PS2
(>
), що вказує на нові рядки після розривів рядків:$ special_vars() { > echo $0 > echo $1 > echo $2 > echo $3 }
Тепер ми викличемо функцію (
special_vars
), передавши їй три параметри (debian
,ubuntu
,zorin
):$ special_vars debian ubuntu zorin -bash debian ubuntu zorin
Все спрацювало, як і очікувалося.
WarningХоча передача позиційних параметрів до псевдонімів технічно можлива, це зовсім не функціонально, оскільки, з псевдонімами, позиційні параметри завжди передаються в кінці:
$ alias great_editor='echo $1 is a great text editor' $ great_editor emacs is a great text editor emacs
Інші спеціальні вбудовані змінні Bash включають:
$#
-
Розширюється до кількості аргументів, переданих команді.
$@
,$*
-
Розширюються до аргументів, переданих команді.
$_
-
Розширюється до останнього параметра або назви сценарію (серед іншого; див.
man bash
, щоб дізнатися більше!):
Змінні у функціях
Звичайно, змінні можна використовувати у функціях.
Щоб підтвердити це, цього разу ми створимо новий порожній файл під назвою funed
і додамо до нього таку функцію:
editors() { editor=emacs echo "My editor is: $editor. $editor is a fun text editor." }
Як ви вже могли здогадатися, ми повинні спочатку отримати файл, щоб мати можливість викликати функцію:
$ . funed
І тепер ми можемо це перевірити:
$ editors My editor is emacs. emacs is a fun text editor.
Як ви розумієте, щоб функція editors
працювала належним чином, спочатку потрібно встановити змінну editor
. Область цієї змінної є локальною для поточної оболонки, і ми можемо посилатися на неї поки триває сеанс:
$ echo $editor emacs
Разом із локальними змінними ми також можемо включити змінні середовища в нашу функцію:
editors() { editor=emacs echo "The text editor of $USER is: $editor." } editors
Зверніть увагу, що цього разу ми вирішили викликати функцію з самого файлу (editors
в останньому рядку). Таким чином, коли ми будемо створювати файл, функція також буде викликана - все одночасно:
$ . funed The text editor of user2 is: emacs.
Позиційні параметри у функціях
Щось подібне відбувається з позиційними параметрами.
Ми можемо передати їх у функції з файлу чи сценарію (зверніть увагу на останній рядок: editors tortoise
):
editors() { editor=emacs echo "The text editor of $USER is: $editor." echo "Bash is not a $1 shell." } editors tortoise
Ми отримуємо файл і бачимо, що він працює:
$ . funed The text editor of user2 is: emacs. Bash is not a tortoise shell.
І ми також можемо передавати позиційні параметри функціям у командному рядку. Щоб підтвердити це, ми позбавляємося від останнього рядка файлу:
editors() { editor=emacs echo "The text editor of $USER is: $editor." echo "Bash is not a $1 shell." }
Потім ми повинні створити джерело файлу:
$ . funed
Нарешті, ми викликаємо функцію з tortoise
як позиційний параметр $1
у командному рядку:
$ editors tortoise The text editor of user2 is: emacs. Bash is not a tortoise shell.
Функції в сценаріях
Функції здебільшого містяться в сценаріях Bash.
Перетворення нашого файлу funed
на сценарій (ми назвемо його funed.sh
) — це справді надзвичайно:
#!/bin/bash editors() { editor=emacs echo "The text editor of $USER is: $editor." echo "Bash is not a $1 shell." } editors tortoise
Це все! Ми додали лише два рядки:
-
Перший рядок — це shebang, він визначає, яка програма збирається інтерпретувати сценарій:
#!/bin/bash
. Цікаво, що ця програма сама по собі є bash. -
Останній рядок є просто викликом функції.
Тепер залишається тільки одне — ми повинні зробити скрипт виконуваним:
$ chmod +x funed.sh
І тепер він готовий до виконання:
$ ./funed.sh The text editor of user2 is: emacs. Bash is not a tortoise shell.
Note
|
Ви дізнаєтеся все про сценарії оболонки у наступних кількох уроках. |
Функція в псевдонімі
Як було сказано вище, ми можемо розмістити функцію в псевдонімі:
$ alias great_editor='gr8_ed() { echo $1 is a great text editor; unset -f gr8_ed; }; gr8_ed'
Цей довгий псевдонім заслуговує на пояснення. Давайте розберемо його:
-
Спочатку сама функція:
gr8_ed() { echo $1 is a great text editor; unset -f gr8_ed; }
-
Остання команда у функції,
unset -f gr8_ed
, скасовує функцію, щоб вона не залишалася в поточному сеансіbash
після виклику псевдоніма. -
І останнє, але не менш важливе: щоб мати успішний виклик псевдоніма, ми також повинні спочатку викликати функцію:
gr8_ed
.
Давайте викличемо псевдонім і перевіримо, що він працює:
$ great_editor emacs emacs is a great text editor
Як показано в unset -f gr8_ed
вище, команда unset
використовується не лише для скасування змінних, але й для функцій. Насправді існують певні перемикачі або опції:
unset -v
-
для змінних
unset -f
-
для функцій
Якщо не використовувати перемикачі, unset
спочатку спробує скасувати змінну, а якщо це не вдасться, спробує скасувати функцію.
Функція у функції
Тепер, наприклад, ми хочемо повідомляти user2
про дві речі щоразу, коли він входить до системи:
-
Привітатися та порекомендувати/похвалити текстовий редактор.
-
Якщо він починає розміщувати багато відеофайлів
Matroska
у своїй папці$HOME/Video
, ми також хочемо його про це попередити.
Щоб досягти цієї мети, ми розмістили такі дві функції в /home/user2/.bashrc
:
Перша функція (check_vids
) виконує перевірку файлів .mkv
і надсилає попередження:
check_vids() { ls -1 ~/Video/*.mkv > /dev/null 2>&1 if [ "$?" = "0" ];then echo -e "Remember, you must not keep more than 5 video files in your Video folder.\nThanks." else echo -e "You do not have any videos in the Video folder. You can keep up to 5.\nThanks." fi }
check_vids
робить три речі:
-
Вона виводить список файлів
mkv
у~/Video
, надсилаючи вихідні дані і будь-які помилки до так званого bit-bucket (/dev/null
). -
Вона перевіряє результат попередньої команди на успішність.
-
Залежно від результату тесту, вона виводить одне з двох повідомлень.
Друга функція є модифікованою версією нашої функції editors
:
editors() { editor=emacs echo "Hi, $USER!" echo "$editor is more than a text editor!" check_vids } editors
Важливо звернути увагу на дві речі:
-
Остання команда
editors
викликаєcheck_vids
, тому обидві функції стають ланцюжком: привітання, рекомендація, перевірка та попередження виконуються послідовно. -
Сама функція
editors
є точкою входу до послідовності функцій, тому вона викликається в останньому рядку (editors
).
Тепер давайте увійдемо як user2
і перевіримо, що це працює:
# su - user2 Hi, user2! emacs is more than a text editor! Remember, you must not keep more than 5 video files in your Video folder. Thanks.
Вправи до посібника
-
Заповніть таблицю “Так” або “Ні” з урахуванням можливостей псевдонімів і функцій:
Властивість Псевдонім? Функція? Можна використовувати локальні змінні
Можна використовувати змінні середовища
Можна екранувати за допомогою
\
Може бути рекурсивним
Висока ефективність при використанні з позиційними параметрами
-
Введіть команду, яка виведе список усіх псевдонімів у вашій системі:
-
Напишіть псевдонім з назвою
logg
, який містить список усіхogg
файлів у~/Music
- по одному на рядок: -
Викличте псевдонім, щоб довести, що він працює:
-
Тепер змініть псевдонім так, щоб він виводив (за допомогою echo) користувача сеансу та двокрапку перед списком:
-
Викличте його знову, щоб підтвердити, що ця нова версія також працює:
-
Знову виведіть всі псевдоніми та переконайтеся, що ваш псевдонім
logg
відображається в списку: -
Видаліть псевдонім:
-
Розгляньте стовпці “Назва псевдоніма” і “Команда(и) псевдоніма” і правильно призначте псевдонімам їх значення:
Псевдонім Команда(и) псевдоніма Присвоєння псевдонімів b
bash
bash_info
which bash
+echo "$BASH_VERSION"
kernel_info
uname -r
greet
echo Hi, $USER!
computer
pc=slimbook
+echo My computer is a $pc
-
Як
root
, напишіть функцію під назвоюmy_fun
в/etc/bash.bashrc
. Функція повинна передати користувачам привіт і повідомити їм, який їхній шлях. Викличте їх так, щоб користувач отримував обидва повідомлення кожного разу при вході: -
Увійдіть як
user2
, щоб перевірити, чи функція працює: -
Напишіть ту саму функцію в одному рядку:
-
Викличте функцію:
-
Видаліть функцію:
-
Це модифікована версія функції
special_vars
:$ special_vars2() { > echo $# > echo $_ > echo $1 > echo $4 > echo $6 > echo $7 > echo $_ > echo $@ > echo $? > }
Це команда, яку ми використовуємо для її виклику:
$ special_vars2 crying cockles and mussels alive alive oh
- Вгадайте яким буде результат
-
Посилання Значення echo $#
echo $_
echo $1
echo $4
echo $6
echo $7
echo $_
echo $@
echo $?
-
На основі зразка функції (
check_vids
) у розділі “Функція у функції”, напишіть функцію під назвоюcheck_music
, щоб включити її до сценарію запускуbash
, який приймає позиційні параметри, щоб ми могли легко змінювати:-
тип файлу, який перевіряється:
ogg
-
каталог, у якому зберігаються файли:
~/Music
-
тип файлу, який зберігається:
music
-
кількість файлів, що зберігаються:
7
-
Дослідницькі вправи
-
Функції лише для читання – це ті, вміст яких ми не можемо змінити. Проведіть дослідження щодо функцій лише для читання та заповніть наступну таблицю:
Назва функції Зробити лише для читання Вивести всі функції лише для читання my_fun
-
Знайдіть в Інтернеті, як змінити
PS1
та будь-що інше, що вам може знадобитися, щоб написати функцію під назвоюfyi
(для розміщення в сценарії запуску), яка надає користувачеві таку інформацію:-
ім’я користувача
-
домашній каталог
-
ім’я власника
-
тип операційної системи
-
шлях пошуку виконуваних файлів
-
поштовий каталог
-
як часто перевіряється пошта
-
глибина поточного сеансу оболонки
-
підказка (ви повинні змінити її так, щоб вона відображала
<user>@<host-date>
)
-
Підсумки
В цьому уроці ми вивчили:
-
Псевдоніми і функції є важливими функціями оболонки, які дозволяють нам інкапсулювати блоки коду, що повторюються.
-
Псевдоніми корисні для створення коротших версій довгих та/або складних команд.
-
Функції — це процедури, які реалізують логіку та дозволяють нам автоматизувати завдання, особливо коли вони використовуються в сценаріях.
-
Синтаксис запису псевдонімів і функцій.
-
Як об’єднати різні команди за допомогою крапки з комою (
;
). -
Як правильно використовувати лапки з псевдонімами.
-
Як зробити псевдоніми та функції постійними.
-
Спеціальні вбудовані змінні Bash:
$?
,$$
,$!
, позиційні параметри ($0
-$9
),$#
,$@
,$*
і "$_". -
Як використовувати змінні та позиційні параметри з функціями.
-
Як використовувати функції в сценаріях.
-
Як викликати функцію з псевдоніма.
-
Як викликати функцію з іншої функції.
-
Основи створення сценарію
bash
.
Команди та ключові слова, які використовуються в цьому уроці:
alias
-
Створює псевдоніми.
unalias
-
Видаляє псевдоніми.
cd
-
Змінює каталог.
grep
-
Виводить рядки, що відповідають шаблону.
function
-
Ключове слово оболонки для створення функцій.
.
-
Джерело файлу.
source
-
Джерело файлу.
ps
-
Виводить перелік поточних процесів.
echo
-
Виводить рядок тексту.
chmod
-
Змінює біти властивості файлу, наприклад робить його виконуваним.
unset
-
Видаляє змінні і функції.
su
-
Змінює ідентифікатор користувача або встановлює суперкористувача.
Відповіді до вправ посібника
-
Заповніть таблицю “Так” або “Ні” з урахуванням можливостей псевдонімів і функцій:
Властивість Псевдонім? Функція? Можна використовувати локальні змінні
Так
Так
Можна використовувати змінні середовища
Так
Так
Можна екранувати за допомогою
\
Так
Ні
Може бути рекурсивним
Так
Так
Висока ефективність при використанні з позиційними параметрами
Ні
Так
-
Введіть команду, яка виведе список усіх псевдонімів у вашій системі:
alias
-
Напишіть псевдонім з назвою
logg
, який містить список усіхogg
файлів у~/Music
- по одному на рядок:alias logg='ls -1 ~/Music/*ogg'
-
Викличте псевдонім, щоб довести, що він працює:
logg
-
Тепер змініть псевдонім так, щоб він виводив (за допомогою echo) користувача сеансу та двокрапку перед списком:
alias logg='echo $USER:; ls -1 ~/Music/*ogg'
-
Викличте його знову, щоб підтвердити, що ця нова версія також працює:
logg
-
Знову виведіть всі псевдоніми та переконайтеся, що ваш псевдонім
logg
відображається в списку:alias
-
Видаліть псевдонім:
unalias logg
-
Розгляньте стовпці “Назва псевдоніма” і “Команда(и) псевдоніма” і правильно призначте псевдонімам їх значення:
Псевдонім Команда(и) псевдоніма Присвоєння псевдонімів b
bash
alias b=bash
bash_info
which bash
+echo "$BASH_VERSION"
alias bash_info='which bash; echo "$BASH_VERSION"'
kernel_info
uname -r
alias kernel_info='uname -r'
greet
echo Hi, $USER!
alias greet='echo Hi, $USER'
computer
pc=slimbook
+echo My computer is a $pc
alias computer='pc=slimbook; echo My computer is a $pc'
NoteОдинарні лапки також можна замінити подвійними.
-
Як
root
, напишіть функцію під назвоюmy_fun
в/etc/bash.bashrc
. Функція повинна передати користувачам привіт і повідомити їм, який їхній шлях. Викличте її так, щоб користувач отримував обидва повідомлення кожного разу при вході:Варіант A:
my_fun() { echo Hello, $USER! echo Your path is: $PATH } my_fun
Варіант B:
function my_fun { echo Hello, $USER! echo Your path is: $PATH } my_fun
-
Увійдіть як
user2
, щоб перевірити, чи функція працює:su - user2
-
Напишіть ту саму функцію в одному рядку:
Варіант A:
my_fun() { echo "Hello, $USER!"; echo "Your path is: $PATH"; }
Варіант B:
function my_fun { echo "Hello, $USER!"; echo "Your path is: $PATH"; }
-
Викличте функцію:
my_fun
-
Видаліть функцію:
unset -f my_fun
-
Це модифікована версія функції
special_vars
:$ special_vars2() { > echo $# > echo $_ > echo $1 > echo $4 > echo $6 > echo $7 > echo $_ > echo $@ > echo $? > }
Це команда, яку ми використовуємо для її виклику:
$ special_vars2 crying cockles and mussels alive alive oh
Вгадайте яким буде результат:
Посилання Значення echo $#
7
echo $_
7
echo $1
crying
echo $4
mussels
echo $6
alive
echo $7
oh
echo $_
oh
echo $@
crying cockles and mussels alive alive oh
echo $?
0
-
На основі зразка функції (
check_vids
) у розділі “Функція у функції”, напишіть функцію під назвоюcheck_music
, щоб включити її до сценарію запускуbash
, який приймає позиційні параметри, щоб ми могли легко змінювати:-
тип файлу, який перевіряється:
ogg
-
каталог, у якому зберігаються файли:
~/Music
-
тип файлу, який зберігається:
music
-
кількість файлів, що зберігаються:
7
check_music() { ls -1 ~/$1/*.$2 > ~/.mkv.log 2>&1 if [ "$?" = "0" ];then echo -e "Remember, you must not keep more than $3 $4 files in your $1 folder.\nThanks." else echo -e "You do not have any $4 files in the $1 folder. You can keep up to $3.\nThanks." fi } check_music Music ogg 7 music
-
Відповіді до дослідницьких вправ
-
Функції лише для читання – це ті, вміст яких ми не можемо змінити. Проведіть дослідження щодо функцій лише для читання та заповніть наступну таблицю:
Назва функції
Зробити лише для читання
Вивести всі функції лише для читання
my_fun
readonly -f my_fun
readonly -f
-
Знайдіть в Інтернеті, як змінити
PS1
та будь-що інше, що вам може знадобитися, щоб написати функцію під назвоюfyi
(для розміщення в сценарії запуску), яка надає користувачеві таку інформацію:-
ім’я користувача
-
домашній каталог
-
ім’я власника
-
тип операційної системи
-
шлях пошуку виконуваних файлів
-
поштовий каталог
-
як часто перевіряється пошта
-
глибина поточного сеансу оболонки
-
підказка (ви повинні змінити її так, щоб вона відображала
<user>@<host-date>
)fyi() { echo -e "For your Information:\n Username: $USER Home directory: $HOME Host: $HOSTNAME Operating System: $OSTYPE Path for executable files: $PATH Your mail directory is $MAIL and is searched every $MAILCHECK seconds. The current level of your shell is: $SHLVL" PS1="\u@\h-\d " } fyi
-