Ръководството на начинаещия за Shell Scripting: Основите

Съдържание:

Ръководството на начинаещия за Shell Scripting: Основите
Ръководството на начинаещия за Shell Scripting: Основите

Видео: Ръководството на начинаещия за Shell Scripting: Основите

Видео: Ръководството на начинаещия за Shell Scripting: Основите
Видео: 5 Новых Приложений на Андроид, Которые Сведут Тебя с Ума - YouTube 2024, Април
Anonim
Терминът "shell scripting" се споменава често във форуми на Linux, но много потребители не са запознати с него. Изучаването на този лесен и мощен програмен метод може да ви помогне да спестите време, да научите команден ред по-добре и да забраните досадни задачи за управление на файлове.
Терминът "shell scripting" се споменава често във форуми на Linux, но много потребители не са запознати с него. Изучаването на този лесен и мощен програмен метод може да ви помогне да спестите време, да научите команден ред по-добре и да забраните досадни задачи за управление на файлове.

Какво е Shell Scripting?

Да бъдеш потребител на Linux означава да играеш с командния ред. Харесва или не, има само някои неща, които се извършват много по-лесно чрез този интерфейс, отколкото чрез посочване и кликване. Колкото повече използвате и научите командния ред, толкова повече виждате неговия потенциал. Е, самата командна линия е програма: черупката. Повечето дистрибуции на Linux днес използват баш, и в това наистина влизате в командите.

Сега някои от вас, които са използвали Windows преди да използват Linux, могат да запомнят партидните файлове. Това са малки текстови файлове, които можете да изпълнявате с команди, които да изпълните, а Windows ще ги изпълни на свой ред. Това беше един умен и чист начин да се направят някои неща, като да се пускат игри в компютърната лаборатория в гимназията, когато не можете да отваряте системни папки или да създавате преки пътища. Файловите файлове в Windows, макар и полезни, представляват евтина имитация на скриптове на Shell.

Shell скриптовете ни позволяват да програмираме командите във вериги и да ги изпълняваме като сценарист, точно като партидни файлове. Те също така позволяват много по-полезни функции, като замяна на команди. Можете да извикате команда, като дата, и да я използвате като част от схема за именуване на файлове. Можете да автоматизирате резервните копия и всеки копиран файл да има текущата дата, добавена към края на името му. Скриптовете не са просто призиви на команди. Те са програми сами по себе си. Скриптирането ви позволява да използвате функциите за програмиране - като например "за" цикли, if / then / else и т.н. - директно в интерфейса на операционната ви система. И не е нужно да изучавате друг език, защото използвате това, което вече знаете: командния ред.
Shell скриптовете ни позволяват да програмираме командите във вериги и да ги изпълняваме като сценарист, точно като партидни файлове. Те също така позволяват много по-полезни функции, като замяна на команди. Можете да извикате команда, като дата, и да я използвате като част от схема за именуване на файлове. Можете да автоматизирате резервните копия и всеки копиран файл да има текущата дата, добавена към края на името му. Скриптовете не са просто призиви на команди. Те са програми сами по себе си. Скриптирането ви позволява да използвате функциите за програмиране - като например "за" цикли, if / then / else и т.н. - директно в интерфейса на операционната ви система. И не е нужно да изучавате друг език, защото използвате това, което вече знаете: командния ред.

Това наистина е силата на скриптографията. Можете да програмирате с командите, които вече знаете, докато учите стапли от най-големите програмни езици. Трябва да се направи нещо повтарящо се и досадно? Сценарий! Нуждаете ли се от пряк път за наистина заплетена команда? Сценарий! Искате ли да създадете наистина лесен за използване интерфейс за команден ред за нещо? Сценарий!

Преди да започнеш

Преди да започнем скриптовата ни серия, нека да разгледаме основна информация. Ще използваме черупката, която повечето Linux дистрибуции използва на родния си език. Bash е налице и за потребителите на Mac OS и Cygwin за Windows. Тъй като е толкова универсален, трябва да можете да сканирате независимо от платформата си. Освен това, докато съществуват всички команди, за които има позоваване, скриптовете могат да работят на множество платформи с малко или никакво ощипване.

Скриптирането може лесно да използва привилегиите "администратор" или "суперпотребител", така че най-добре е да тествате скриптове, преди да ги поставите на работа. Също така използвайте здравия разум, като например да се уверите, че имате резервни копия на файловете, на които сте на път да изпълните скрипт. Също така е много важно да използвате правилните опции, като -i за командата rm, така че да е необходимо вашето взаимодействие. Това може да предотврати някои лоши грешки. Като такива, прочетете скриптове, които изтегляте и внимавайте с данните, които имате, само в случай, че нещата се объркат.

В основата си, скриптовете са само обикновени текстови файлове. Можете да използвате всеки текстов редактор, за да ги напишете: gedit, emacs, vim, nano … Този списък продължава. Просто не забравяйте да го запазите като обикновен текст, а не като богат текст или документ на Word. Тъй като обичам лекотата на използване, която нано предлага, ще използвам това.

Скрипни разрешения и имена

Скриптовете се изпълняват като програми и за да се случи това, те трябва да имат съответните разрешения. Можете да направите скриптовете изпълним, като изпълните следната команда:

chmod +x ~/somecrazyfolder/script1

Това ще позволи на всеки да изпълни този конкретен скрипт. Ако искате да го ограничите само до вашия потребител, можете да го използвате вместо това:

chmod u+x ~/somecrazyfolder/script1

За да стартирате този скрипт, трябва да направите cd в правилната директория и след това да изпълните този сценарий:

cd ~/somecrazyfolder

./script1

За да направите нещата по-удобни, можете да поставите скриптове в папка "bin" в домашната си директория:

~/bin

В много съвременни дистрибуции тази папка вече не се създава по подразбиране, но можете да я създадете. Това обикновено е мястото, където се съхраняват изпълними файлове, които принадлежат на вашия потребител, а не на други потребители. С пускането на скриптове тук можете просто да ги изпълните, като напишете името им, точно както другите команди, вместо да се налага да ги намирате и да използвате префикса './'.

Преди да зададете име на скрипт, трябва да изпълните следната команда, за да проверите дали имате инсталирана програма, която използва това име:

which [command]

Много хора назовават своите "тестове" за първите си скриптове и когато се опитат да ги изпълнят в командния ред, нищо не се случва. Това е така, защото е в конфликт с тестовата команда, която не прави нищо без аргументи. Винаги се уверете, че скриптовите ви имена не са в конфликт с командите, в противен случай може да откриете, че правите неща, които не възнамерявате да правите!

Указания за скриптове

Както споменах по-рано, всеки файл на скрипта е по същество обикновен текст.Това не означава, че можете да напишете това, което искате, макар и безумно. Когато се прави опит за изпълнение на текстов файл, черупките ще анализират чрез тях доказателства за това дали са скриптове или не и как да се справят с всичко правилно. Поради това има няколко насоки, които трябва да знаете.
Както споменах по-рано, всеки файл на скрипта е по същество обикновен текст.Това не означава, че можете да напишете това, което искате, макар и безумно. Когато се прави опит за изпълнение на текстов файл, черупките ще анализират чрез тях доказателства за това дали са скриптове или не и как да се справят с всичко правилно. Поради това има няколко насоки, които трябва да знаете.
  1. Всеки скрипт трябва да бъде с "#! / Bin / bash"
  2. Всяка нова линия е нова команда
  3. Линиите за коментар започват с #
  4. Командите са заобиколени от ()

Хаус-взривът

Когато една черупка се пресмята чрез текстов файл, най-прекият начин за идентифициране на файла като скрипт е като направите първия си ред:

#!/bin/bash

Ако използвате друга обвивка, заменете нейния път тук. Линиите за коментар започват с хешове (#), но добавят буквата (!) И пътя за shell, след като това е нещо като хак, което ще заобиколи това коментарно правило и ще принуди скрипта да се изпълни с черупката, която тази линия сочи.

Нова линия = Ново командване

Всяка нова линия трябва да се счита за нова команда или за компонент на по-голяма система. Ако / / else / else изявленията, например, ще поемат няколко реда, но всеки компонент на тази система е в нов ред. Не позволявайте на командата да изтече в следващия ред, тъй като това може да съкрати предишната команда и да ви даде грешка на следващия ред. Ако текстовият ви редактор прави това, трябва да изключите текстовото обвиване, за да сте на сигурно място. Можете да изключите обвиването на текст в нано бит, като натиснете ALT + L.

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

Ако започнете линия с #, линията се игнорира. Това го превръща в коментар, където можете да си припомните какви са резултатите от предишната команда или какво ще направи следващата команда. Отново изключете обвиването на текста или прекъснете коментара си в няколко реда, които започват с хеш. Използването на много коментари е добра практика, за да се запази, тъй като ви позволява и други хора да ощипвам скриптове по-лесно. Единственото изключение е гореспоменатото Hash-Bang hack, така че не следвайте #s с! S.;-)

Командите са заобиколени от скоби

В по-старите дни подмяната на командите е извършена с единични отметки (`, споделя ~ key). Няма да се докосваме дотук, но тъй като повечето хора излизат и опознават, след като са научили основите, вероятно е добра идея да споменем, че вместо това трябва да използвате скоби. Това е главно, защото когато гнездото - сложите команди в други команди - скобите работят по-добре.

Вашият първи скрипт

Нека да започнем с прост скрипт, който ви позволява да копирате файлове и да добавяте дати до края на името на файла. Да го наречем "datecp". Първо, нека да проверим дали това име е в конфликт с нещо:

Можете да видите, че няма изход на коя команда, така че всички сме готови да използваме това име.
Можете да видите, че няма изход на коя команда, така че всички сме готови да използваме това име.

Нека да създадем празен файл в папката ~ / bin:

touch ~/bin/datecp

И да променим разрешението сега, преди да забравим:
И да променим разрешението сега, преди да забравим:
След това започнете да създавате нашия скрипт. Отворете този файл във вашия текстов редактор по избор. Както казах, харесвам простотата на нано.
След това започнете да създавате нашия скрипт. Отворете този файл във вашия текстов редактор по избор. Както казах, харесвам простотата на нано.

nano ~/bin/datecp

И нека да продължим напред и да включим предпоставката за първия ред и коментар за това, което прави този скрипт.

След това нека декларираме променлива. Ако някога сте използвали алгебра, вероятно знаете какво е това. Променливата ни позволява да съхраняваме информация и да правим нещата с нея. Променливите могат да се "разширяват", когато се споменават другаде. Това означава, че вместо да показват името си, те ще покажат съхраненото си съдържание. По-късно можете да кажете на същата променлива да съхранявате различна информация и всяка инструкция, която се случва след това, ще използва новата информация. Това е наистина фантастичен заместител.
След това нека декларираме променлива. Ако някога сте използвали алгебра, вероятно знаете какво е това. Променливата ни позволява да съхраняваме информация и да правим нещата с нея. Променливите могат да се "разширяват", когато се споменават другаде. Това означава, че вместо да показват името си, те ще покажат съхраненото си съдържание. По-късно можете да кажете на същата променлива да съхранявате различна информация и всяка инструкция, която се случва след това, ще използва новата информация. Това е наистина фантастичен заместител.

Какво ще направим в променливата? Е, нека да съхраним датата и часа! За да направите това, ще се обадите на командата за дата.

Обърнете внимание на екранната снимка по-долу за това как да създадете изхода на командата за дата:

Да използваме последната итерация на командата за дата "date +% m_% d_% y-% H.% M.% S" и да я използваме в нашия скрипт.

Ако щяхме да запазим този скрипт в момента, бихме могли да го пуснем и това ще ни даде изхода от командата за дата, както бихме очаквали:
Ако щяхме да запазим този скрипт в момента, бихме могли да го пуснем и това ще ни даде изхода от командата за дата, както бихме очаквали:
Но да направим нещо различно. Да дадем име на променлива, като date formatted на тази команда. Правилният синтаксис за това е, както следва:
Но да направим нещо различно. Да дадем име на променлива, като date formatted на тази команда. Правилният синтаксис за това е, както следва:

variable=$(command –options arguments)

И за нас, ще го изградим така:

date_formatted=$(date +%m_%d_%y-%H.%M.%S)

Това е, което наричаме команда замяна. По същество казваме, че когато се появи променливата "date formatted", да се изпълни командата вътре в скобите. След това, независимо от изхода командите дават, трябва да се показва вместо името на променливата "date formatted".
Това е, което наричаме команда замяна. По същество казваме, че когато се появи променливата "date formatted", да се изпълни командата вътре в скобите. След това, независимо от изхода командите дават, трябва да се показва вместо името на променливата "date formatted".

Ето примерният скрипт и неговият изход:

Image
Image
Имайте предвид, че в изхода има две интервали. Пространството в кавичките на командата за ехо и пространството пред променливата се показват. Не използвайте интервали, ако не искате те да се показват. Също така имайте предвид, че без тази добавена линия "ехо" скриптът няма да даде абсолютно никакъв резултат.
Имайте предвид, че в изхода има две интервали. Пространството в кавичките на командата за ехо и пространството пред променливата се показват. Не използвайте интервали, ако не искате те да се показват. Също така имайте предвид, че без тази добавена линия "ехо" скриптът няма да даде абсолютно никакъв резултат.

Да се върнем към нашия скрипт. Нека следва да добавим в копиращата част на командата.

cp –iv $1 $2.$date_formatted

Това ще извика командата за копиране с опциите -i и -v. Първият ще ви помоли за проверка, преди да презапишете файл, а последният ще покаже какво се намира на командния ред.
Това ще извика командата за копиране с опциите -i и -v. Първият ще ви помоли за проверка, преди да презапишете файл, а последният ще покаже какво се намира на командния ред.

След това можете да видите, че съм добавил опцията "$ 1".При създаването на скриптове знакът за долар ($), последван от число, ще обозначи този номериран аргумент на скрипта, когато бъде извикан. Например, в следната команда:

cp –iv Trogdor2.mp3 ringtone.mp3

Първият аргумент е "Trogdor2.mp3", а вторият аргумент е "рязко".

Ако погледнем отново нашият скрипт, можем да видим, че се позовават на два аргумента:

Това означава, че когато стартираме скрипта, ще трябва да предоставим два аргумента за правилното изпълнение на скрипта. Първият аргумент, $ 1, е файлът, който ще бъде копиран и заменен от първия аргумент "команда", команда "команда".
Това означава, че когато стартираме скрипта, ще трябва да предоставим два аргумента за правилното изпълнение на скрипта. Първият аргумент, $ 1, е файлът, който ще бъде копиран и заменен от първия аргумент "команда", команда "команда".

Вторият аргумент, $ 2, ще действа като изходен файл за същата команда. Но можете също да видите, че това е различно. Добавихме период и ние посочихме променливата "Äúdate_formatted" от по-горе. Любопитно ли е какво прави това?

Ето какво се случва, когато се стартира скриптът:

Image
Image

Можете да видите, че изходният файл е посочен като нещо, което съм въвел за $ 2, последвано от период, а след това изхода на командата за дата! Има смисъл, нали?

Сега, когато стартирам командата datecp, ще стартира този скрипт и ще ми позволи да копирам всеки файл на ново място и автоматично да добавя датата и часа до края на името на файла. Полезно за архивиране!

Shell скриптовете са в основата на това, че вашата OS работи за вас. Не е нужно да научите нов език за програмиране, за да го направите. Опитайте скриптове с някои основни команди у дома и започнете да мислите за това, за което можете да използвате това.

Сценарий ли си? Имате ли съвет за начинаещи? Споделете вашите мисли в коментарите! Има още какво да се случи в тази серия!

Препоръчано: