Як користуватися функціями в Bash за допомогою цієї оболонки Unix, сумісної з POSIX, комп'ютерною мовою. Як мова, його функція складається з інтерпретації команд Linux, що дозволяє нам автоматизувати наші повторювані процеси, а також створювати команди з команд операційної системи. У цій статті ми розглянемо як використовувати функції в bash - -. Рекомендую прочитати статтю як створювати власні сценарії за допомогою bash.
У запропонованому нами сценарії ми використовуємо мову Bash для пошуку файлу, знаючи його назву. Для цього ми будемо використовувати знайти команду але за допомогою функцій, визначених раніше у вказаному сценарії. Ви повинні взяти до уваги особливість або обмеження Bash, яке є не у всіх мовах: для виклику функції вона повинна бути визначена раніше.
Визначте функції
Існує два способи визначення функцій: із або без оголошення функції:
function nombre_funcion () { # codigo }
або цей інший, який я використовую, як ви побачите пізніше.
nombre_funcion () { # codigo }
Також Bash також надає метод передачі параметрів і повернення результатів. що ми побачимо у майбутніх статтях.
#!/usr/bin/env bash # ~/.bin/encontrar # encuentra archivos a partir de la descripción de su nombre en un directorio específico # # Por Pedro Ruiz Hidalgo # version 1.0.0 # Copyright © enero 2017 # # EXIT_OK=0 EXIT_BAD=66 PATRON=$1 DIRECTORIO=$2 autor () { echo -e "\nPedro Ruiz Hidalgo @petrorum. Copyright © 2017\n" } ayuda () { echo -e "\nencontrar [PATRON] [DIRECTORIO]\n" } noparams () { echo -e "\nSon necesarios dos parámetros\nencontrar -h para ayuda\n" read -p "¿Quieres ver la ayuda? (S|s)" -n 1 -r if [[ $REPLY =~ ^[Ss]$ ]]; then echo "" ayuda fi } nodir () { echo -e "\nDirectorio no Existe\n" } if [[ $PATRON == "-h" ]]; then ayuda exit $EXIT_OK fi if [[ $PATRON == "-a" ]]; then autor exit $EXIT_OK fi if [ $# -lt 2 ]; then noparams else if [ -d $DIRECTORIO ]; then echo "" find $DIRECTORIO -name $PATRON* echo "" exit $? else nodir exit EXIT_BAD fi fi
Аналіз сценарію
Визначення
За баш кожен успішно завершений процес повинен мати в якості сигналу код "0". Рядки 12 і 13 визначають оброблені коди помилок EXIT_OK для успіху y EXIT_BAD для виходу при відмові.
У рядках 15 і 16 змінним PATTERN і DIRECTORY присвоюються перший ($ 1) і другий ($ 2) параметри, які з'являються в командному рядку після імені сценарію, як ми побачимо пізніше, коли ми його виконаємо.
В рядок 18 ми створюємо свою першу функцію. Функція під назвою «автор» відображає авторство сценарію коли ми називаємо це аргументом "-a", як ви можете бачити в if на рядках 50 ~ 54. Аргумент "-і" з рядка 23 дозволяє показати послідовність «наступного рядка» шляхом кодування «\ n».
Виклик noparams (рядки 28 ~ 37) відповідає за управління подіями, які повинні відбутися, коли скрипт викликається без будь-яких параметрів. Ми показуємо, правильно укладене між новими кодами рядків, повідомлення про те, що скрипт повинен виконуватися з двома параметрами, тоді показано варіант (рядок 31) для використання зчитування Вам буде запропоновано натиснути "S" або "s", якщо ви хочете показати допомогу. У рядку 32 ми буквально говоримо: "якщо відповідь (яка приходить до нас у змінну $ ВІДПОВІДЬ) містить будь-який із символів, що використовуються у верхньому чи нижньому регістрі ', потім (рядок 33) показує порожній рядок (рядок 34) і виконує функцію довідки (рядки 23 ~ 26).
Функція nodir (рядки 39 ~ 42) буде виконана, коли ми виявимо, що каталог, де здійснюється спроба пошуку, не існує.
Функціональність
З цим ми вже маємо визначено всі необхідні функції для запуску нашої програми, яка фактично починається з рядка 44, перевіряючи, чи першим із параметрів, які отримує скрипт, є "-h", якщо це так, виконайте функцію довідки виходи, що вказує на нормальне закінчення.
Якщо PATTERN (перший параметр, як описано в рядку 15), має значення "-a", автор відображається за тим самим механізмом, що описаний у попередньому абзаці для параметра "-h".
На лінії 56 контролюється, що ми не отримали менше двох параметрівУ цьому випадку виконується функція noparams, тоді в if рядка 60 ми це з’ясовуємо якщо каталог, в якому ми хочемо здійснити пошук, існує, якщо він існує, відображається порожній рядок, знайти команду з адресою каталогу, в якому ми хочемо здійснити пошук, за яким слід шаблон (початок імені файлу, який ми шукаємо), новий порожній рядок і за допомогою вихід $? ми довіряємо результат нашого сценарію результату, отриманому find. У випадку, якщо стан існування каталогу невірно (рядок 67) ми робимо виклик функції nodir і ми виходимо, вказуючи на ненормальне закінчення.
Виконання та тестування
$ encontrar $ encontrar -a $ encontrar -h $ encontrar index aljflaskjf #directorio no existe $ encontrar index public_html $
En наступні статті про Баша ми побачимо механізми для використання параметрів у функціяхМи також побачимо, як це зробити сформулювати дані про повернення з них.
Сподіваюсь і сподіваюся, що ця публікація була для вас корисною.
Привіт
дуже цікаво і дуже зрозуміло.
Просто примітка; у рядку 68 перед змінною EXIT_BAD відсутній символ $.
Я продовжуватиму напевно вивчати ваші статті.