Домашня » як » Посібник для початківців для Shell Scripting The Basics

    Посібник для початківців для Shell Scripting The Basics

    Термін "сценарії оболонки" часто згадується в форумах Linux, але багато користувачів не знайомі з ним. Вивчення цього простого і потужного методу програмування допоможе вам заощадити час, краще вивчити командний рядок і вигнати складні завдання керування файлами.

    Що таке сценарії оболонки?

    Бути користувачем Linux означає, що ви граєте з командним рядком. Подобається це чи ні, є лише деякі речі, які робляться набагато легше за допомогою цього інтерфейсу, аніж вказівкою та натисканням. Чим більше ви використовуєте та вивчаєте командний рядок, тим більше ви бачите його потенціал. Ну і сам командний рядок є програмою: shell. Більшість дистрибутивів Linux сьогодні використовують Bash, і це саме те, на що ви дійсно вводите команди.

    Тепер деякі з вас, які використовували Windows, перш ніж використовувати Linux, можуть запам'ятовувати пакетні файли. Це були маленькі текстові файли, які ви могли заповнити командами для виконання, і Windows їх запускав би по черзі. Це був розумний і акуратний спосіб зробити деякі речі, як запустити ігри у вашій комп'ютерній лабораторії середньої школи, коли ви не могли відкрити системні папки або створити ярлики. Пакетні файли в Windows, хоча і корисні, є дешевою імітацією скриптів оболонки.

    Сценарії оболонки дозволяють нам програмувати команди в ланцюгах, а система має виконувати їх як сценарій, подібно до пакетних файлів. Вони також дозволяють набагато корисніші функції, такі як заміщення команд. Ви можете викликати команду, наприклад дату, і використовувати її як частину схеми імен файлів. Можна автоматизувати резервне копіювання, і кожен скопійований файл може містити поточну дату до кінця її назви. Скрипти також не є викликами команд. Вони є власними програмами. Сценарії дозволяють використовувати функції програмування - наприклад, "для" циклів, if / then / else, і так далі - безпосередньо в інтерфейсі операційної системи. Крім того, вам не потрібно вивчати іншу мову, тому що ви використовуєте те, що ви вже знаєте: командний рядок.

    Це дійсно сила сценаріїв, я думаю. Ви отримуєте програму з командами, які ви вже знаєте, в той час як вивчаєте скоби більшості основних мов програмування. Потрібно робити щось повторюване і нудно? Сценарій! Потрібен ярлик для дійсно заплутаної команди? Сценарій! Хочете створити дійсно простий у використанні інтерфейс командного рядка для чогось? Сценарій його!

    Перед тим як ти почнеш

    Перш ніж розпочати серію сценаріїв, давайте розглянемо деякі основні відомості. Ми будемо використовувати оболонку bash, яку використовують більшість дистрибутивів Linux. Bash доступний також для користувачів Mac OS і Cygwin у Windows. Оскільки вона настільки універсальна, ви маєте можливість створювати сценарії незалежно від вашої платформи. Крім того, до тих пір, поки існують всі команди, на які посилаються, скрипти можуть працювати на декількох платформах, для яких потрібна незначна зміна.

    Сценарії можуть легко використовувати привілеї «адміністратора» або «суперкористувача», тому краще перевіряти сценарії, перш ніж їх покласти на роботу. Також використовуйте здоровий глузд, наприклад переконайтеся, що у вас є резервні копії файлів, на яких ви збираєтеся запустити сценарій. Також дуже важливо використовувати правильні параметри, наприклад -i для команди rm, щоб ваша взаємодія була потрібна. Це може запобігти неприємним помилкам. Таким чином, читайте скрипти, які ви завантажуєте, і будьте обережні з даними, які у вас є, на всякий випадок, якщо все станеться неправильно.

    За своєю суттю, скрипти - це просто текстові файли. Ви можете використовувати будь-який текстовий редактор, щоб написати їх: gedit, emacs, vim, nano… Цей список продовжується. Просто збережіть його як звичайний текст, а не як насичений текст або документ Word. Оскільки я люблю простоту використання, яку надає nano, я буду використовувати його.

    Дозволи та імена сценарію

    Скрипти виконуються як програми, і для того, щоб це сталося, вони повинні мати відповідні дозволи. Ви можете зробити виконуваний скрипт, виконавши на ньому наступну команду:

    chmod + x ~ / somecrazyfolder / script1

    Це дозволить кожному запустити цей конкретний сценарій. Якщо ви бажаєте обмежити його використання лише для вашого користувача, ви можете використовувати його замість цього.

    chmod u + x ~ / somecrazyfolder / script1

    Щоб запустити цей сценарій, вам доведеться перейти до відповідного каталогу, а потім запустити такий сценарій:

    cd ~ / somecrazyfolder

    ./ script1

    Щоб зробити речі зручнішими, можна помістити скрипти у папку “bin” у вашому домашньому каталозі:

    ~ / bin

    У багатьох сучасних дистрибутивах ця папка більше не створюється за умовчанням, але її можна створити. Зазвичай, де зберігаються виконувані файли, які належать користувачеві, а не іншим користувачам. Розміщуючи тут сценарії, ви можете просто запустити їх, ввівши їхню назву, як і інші команди, замість того, щоб перегортати і використовувати префікс "./"..

    Перед тим, як називати сценарій, слід перевірити, чи встановлено програму, яка використовує це ім'я:

    які [командують]

    Багато людей називають свої ранні скрипти «тестом», і коли вони намагаються запустити його в командному рядку, нічого не відбувається. Це пояснюється тим, що він конфліктує з командою test, яка нічого не робить без аргументів. Завжди переконайтеся, що ваші назви сценаріїв не конфліктують з командами, інакше ви можете виявити, що ви робите речі, які ви не збираєтеся робити!

    Рекомендації щодо сценаріїв

    Як я вже згадував раніше, кожен файл сценарію є, по суті, звичайним текстом. Це не означає, що ви можете написати що хочете все волею-неволею. Коли текстовий файл намагається виконати, оболонки будуть проаналізувати їх, щоб дізнатися, чи є вони скриптами чи ні, і як правильно обробляти все. Через це є декілька рекомендацій, які потрібно знати.

    1. Кожен сценарій повинен бути з "#! / Bin / bash"
    2. Кожна нова лінія є новою командою
    3. Рядки коментарів починаються з #
    4. Команди оточені ()

    Hash-Bang Hack

    Коли оболонка аналізує текстовий файл, найбільш прямим способом ідентифікації файлу як сценарію є створення першого рядка:

    #! / bin / bash

    Якщо ви використовуєте іншу оболонку, замістьте її шлях тут. Рядки коментарів починаються з хешей (#), але додавання bang (!) І шляху до оболонки після свого роду зламати, що обходитиме це правило коментарів і змусить скрипт виконати з оболонкою, на яку вказує ця лінія.

    Нова лінія = Нова команда

    Кожну нову лінію слід розглядати як нову команду або компонент більшої системи. Наприклад, якщо / / / /, оператори займуть кілька рядків, але кожен компонент цієї системи знаходиться в новому рядку. Не дозволяйте команді пропускати в наступний рядок, оскільки це може обрізати попередню команду і дати вам помилку в наступному рядку. Якщо ваш текстовий редактор робить це, вам слід вимкнути перенесення тексту, щоб бути безпечним. Ви можете вимкнути перенесення тексту в нано-бітовому натисканні ALT + L.

    Коментар Часто з #s

    Якщо ви починаєте рядок з #, рядок ігнорується. Це перетворює його на рядок коментарів, де ви можете нагадати собі, що було виходом попередньої команди, або те, що буде робити наступна команда. Знову вимкніть перенесення тексту або розбийте коментар на кілька рядків, які починаються з хешу. Використання великої кількості коментарів - це хороша практика, оскільки вона дозволяє вам та іншим людям легше налаштувати сценарії. Єдиним винятком є ​​вищезгаданий хак Hash-Bang, тому не слідкуйте за #s з! S. ;-)

    Команди оточені дужками

    У старіші дні заміни команд виконувалися за допомогою однієї позначки (', розділяє ключ ~). Ми ще не будемо торкатися цього, але, оскільки більшість людей йдуть і вивчають після вивчення основ, це, мабуть, гарна ідея згадати, що замість цього слід використовувати дужки. Це відбувається головним чином тому, що при вставці команд всередині інших команд - дужки працюють краще.

    Ваш перший сценарій

    Почнемо з простого скрипта, який дозволяє копіювати файли і додавати дати до кінця імені файлу. Назвемо це "datecp". По-перше, давайте перевіримо, чи конфліктує це ім'я з чимось:

    Ви можете бачити, що жодного виводу команди немає, тому всі ми налаштовані використовувати це ім'я.

    Давайте створимо порожній файл у папці ~ / bin:

    натисніть ~ / bin / datecp

    А зараз змінюємо дозвіл, перш ніж забути:

    Давайте тоді почнемо будувати наш сценарій. Відкрийте цей файл у вашому текстовому редакторі. Як я вже сказав, мені подобається простота нано.

    nano ~ / bin / datecp

    І, давайте підемо вперед і покладемо в першу чергу передумова, і коментар про те, що робить цей сценарій.

    Далі, оголосимо змінну. Якщо ви коли-небудь брали алгебру, ви, напевно, знаєте, що таке. Змінна дозволяє зберігати інформацію і робити з нею речі. Змінні можуть "розширюватися", якщо вони посилаються на інші місця. Тобто, замість того, щоб відображати своє ім'я, вони будуть показувати їх збережений вміст. Пізніше ви можете сказати тій самій змінній, щоб зберігати різну інформацію, і будь-яку інструкцію, яка відбувається після цього, буде використовувати нову інформацію. Це дійсно фантастичний заповнювач.

    Що ми будемо ставити до змінної? Ну, зберемо дату і час! Для цього ми викликатимемо дату.

    Погляньте на скріншот нижче про те, як побудувати вихід команди дати:

    Ви можете бачити, що, додаючи різні змінні, які починаються з%, ви можете змінити вивід команди на потрібне. Для отримання додаткової інформації, ви можете подивитися на сторінці керівництва для дати дату.

    Використовуємо цю останню ітерацію команди date, "date +% m_% d_% y-% H.% M.% S", і використовуємо її в нашому сценарії.

    Щоб зберегти цей сценарій зараз, ми можемо запустити його, і це дасть нам вивід команди дати, як ми очікуємо:

    Але, давайте зробимо щось інше. Дамо назву змінної, наприклад date_formatted цій команді. Правильний синтаксис для цього полягає в наступному:

    variable = $ (аргументи параметрів команди)

    А для нас ми побудуємо його так:

    date_formatted = $ (дата +% m_% d_% y-% H.% M.% S)

    Це ми називаємо заміною команди. Ми, по суті, розповідаємо bash, що всякий раз, коли з'являється змінна “date_formatted”, запустіть команду в дужках. Потім, незалежно від того, який вивід дає команда, повинна відображатися замість назви змінної "date_formatted".

    Ось приклад сценарію та його вихід:

    Зауважте, що на виході є два пробіли. Простір у лапках команди echo та простір перед змінною відображаються. Не використовуйте пробіли, якщо ви не хочете, щоб вони з'являлися. Також зверніть увагу, що без додавання рядка "echo" скрипт не дає абсолютно ніякого виходу.

    Давайте повернемося до нашого сценарію. Далі додамо в копіювальну частину команди.

    cp -iv $ 1 $ 2. $ date_formatted

    Це призведе до виклику команди копіювання з параметрами -i та -v. Перший запитає вас про перевірку, перш ніж перезаписувати файл, а другий буде показувати те, що знаходиться в командному рядку.

    Далі можна побачити, що я додав опцію "$ 1". Коли скрипт, знак долара ($), за яким слідує число, позначатиме цей нумерований аргумент сценарію, коли він був викликаний. Наприклад, у такій команді:

    cp -iv Trogdor2.mp3 ringtone.mp3

    Перший аргумент - "Trogdor2.mp3", а другий - "ringtone.mp3".

    Озираючись на наш сценарій, ми бачимо, що ми посилаємося на два аргументи:

    Це означає, що коли ми запускаємо сценарій, нам потрібно буде надати два аргументи для правильного запуску скрипта. Перший аргумент, $ 1, є файлом, який буде скопійовано, і буде замінено першим аргументом команди "cp -iv".

    Другий аргумент, $ 2, буде діяти як вихідний файл для тієї ж команди. Але, ви також можете побачити, що це інше. Ми додали період, і ми посилалися на змінну "date_formatted" зверху. Цікаво, що це робить?

    Ось що відбувається після запуску сценарію:

    Ви можете бачити, що вихідний файл вказано як все, що я ввів для $ 2, за яким слідує період, потім вивід команди date! Має сенс, правильно?

    Тепер, коли я запускаю команду datecp, вона запускатиме цей скрипт і дозволяти мені копіювати будь-який файл на нове місце, і автоматично додавати дату і час до кінця імені файлу. Корисно для архівування матеріалів!


    Сценарії Shell лежать в основі створення вашої ОС для вас. Ви також не повинні вивчати нову мову програмування. Спробуйте виконати сценарії з деякими основними командами вдома і почати думати про те, для чого ви можете скористатися цим.

    У вас сценарій? Чи є якісь поради для новачків? Поділіться своїми думками в коментарях! У цій серії є ще багато!