Ръководство за начинаещи на Shell Scripting The Basics
Терминът "shell scripting" често се споменава в Linux форумите, но много потребители не са запознати с него. Изучаването на този лесен и мощен метод на програмиране може да ви помогне да спестите време, да научите по-добре командния ред и да пропъдите досадни задачи за управление на файлове.
Какво е Shell Scripting?
Да бъдеш потребител на Linux означава, че си играеш с командния ред. Харесва ви или не, има само някои неща, които се правят много по-лесно чрез този интерфейс, отколкото чрез посочване и щракване. Колкото повече използвате и изучавате командния ред, толкова повече виждате неговия потенциал. Е, командния ред сам по себе си е програма: черупката. Повечето Linux дистрибуции днес използват Bash, и това е, което наистина въвеждате команди.
Сега някои от вас, които са използвали Windows, преди да използват Linux, може да запомнят пакетни файлове. Това са малки текстови файлове, които можете да изпълните с команди, а Windows да ги изпълни на свой ред. Това е умен и чист начин да се направят някои неща, като тичам игри във вашата гимназия компютърна лаборатория, когато не можете да отворите системни папки или да създадете преки пътища. Пакетни файлове в Windows, макар и полезни, са евтина имитация на скриптовете на обвивката.
Скриптовете на Shell ни позволяват да програмираме команди в вериги и да ги изпълним като скриптово събитие, подобно на командни файлове. Те също така позволяват много по-полезни функции, като например подмяна на команди. Можете да извикате команда като дата и да я използвате като част от схема за именуване на файлове. Можете да автоматизирате архивирането и всеки копиран файл може да има текущата дата, прикрепена към края на името. Освен това скриптовете не са само извиквания на команди. Те са собствени програми. Скриптовете ви позволяват да използвате функциите за програмиране - например "за", цикли, ако / след това / и т.н., и т.н. - директно в интерфейса на вашата операционна система. И не е нужно да научите друг език, защото използвате това, което вече знаете: командния ред.
Това е наистина силата на скриптовете, мисля. Можете да програмирате с команди, които вече знаете, докато изучавате най-големите езици за програмиране. Трябва да направите нещо повтарящо се и досадно? Пишете го! Нуждаете се от пряк път за наистина сложна команда? Пишете го! Искате ли да създадете наистина лесен за използване интерфейс на командния ред за нещо? Напишете го!
Преди да започнеш
Преди да започнем нашата сценарийна поредица, нека да разгледаме основната информация. Ще използваме bash shell, който повечето дистрибуции на Linux използват. Bash е наличен и за потребители на Mac OS и за Cygwin на Windows. Тъй като е толкова универсален, трябва да можете да създавате скриптове, независимо от вашата платформа. Освен това, докато съществуват всички команди, за които се прави позоваване, скриптовете могат да работят на няколко платформи с малко или никакви настройки.
Скриптовете могат лесно да използват привилегиите на „администратор“ или „суперпотребител“, така че е най-добре да тествате скриптовете, преди да ги поставите на работа. Използвайте и здрав разум, като се уверите, че имате резервни копия на файловете, на които ще изпълните скрипт. Също така е много важно да се използват правилните опции, като -i за командата rm, така че да се изисква взаимодействие. Това може да предотврати някои лоши грешки. Като такива, прочетете скриптовете, които изтегляте и бъдете внимателни с данните, които имате, само в случай, че нещата се объркат.
В основата си скриптовете са просто текстови файлове. Можете да използвате всеки текстов редактор, за да ги напишете: gedit, emacs, vim, nano… Този списък продължава. Просто го запазете като обикновен текст, а не като богат текст или документ на Word. Тъй като обичам лекотата на използване, която осигурява нано, ще използвам това.
Разрешения за скрипт и имена
Скриптовете се изпълняват като програми и за да се случи това, те трябва да имат правилните разрешения. Можете да направите скриптове изпълними, като изпълните следната команда:
chmod + x ~ / somecrazyfolder / script1
Това ще позволи на всеки да пусне този конкретен скрипт. Ако искате да ограничите използването му само до потребителя, можете да го използвате вместо това:
chmod u + x ~ / somecrazyfolder / script1
За да изпълните този скрипт, трябва да влезете в правилната директория и след това да стартирате скрипта по следния начин:
cd ~ / somecrazyfolder
./ script1
За да направите нещата по-удобни, можете да поставите скриптове в папка „bin“ във вашата домашна директория:
~ / Бин
В много съвременни дистрибуции тази папка вече не се създава по подразбиране, но можете да я създадете. Това обикновено е мястото, където се съхраняват изпълними файлове, които принадлежат на вашия потребител, а не на други потребители. С поставянето на скриптове тук можете просто да ги стартирате, като напишете името им, както и другите команди, вместо да се налага да използвате диска и да използвате префикса „./“..
Преди да въведете име на скрипт, трябва да въведете следната команда, за да проверите дали имате инсталирана програма, която използва това име:
които [заповядвам]
Много хора наричат ранния си скрипт “test” и когато се опитат да го стартират в командния ред, нищо не се случва. Това е така, защото противоречи на командата test, която не прави нищо без аргументи. Винаги бъдете сигурни, че вашите имена на скриптове не влизат в конфликт с команди, в противен случай може да откриете, че правите неща, които не възнамерявате да правите!
Указания за създаване на скриптове
Както вече споменах, всеки скриптов файл е по същество обикновен текст. Това не означава, че можете да напишете всичко, което искате, въпреки всичко. Когато се опитва да се изпълни текстов файл, черупките ще ги анализират за улики дали са скриптове или не, и как да се справят с всичко правилно. Поради това има няколко насоки, които трябва да знаете.
- Всеки скрипт трябва да е с „#! / Bin / bash“
- Всяка нова линия е нова команда
- Редът на коментара започва с #
- Командите са заобиколени от ()
Хакът на взрива
Когато черупката анализира чрез текстов файл, най-прекият начин да идентифицирате файла като скрипт е като направите първия ред:
#! / Хамбар / Баш
Ако използвате друга черупка, заменете пътя му тук. Линиите с коментари започват с хешове (#), но добавянето на bang (!) И пътя на обвивката след него е нещо като рана, която ще заобиколи това правило за коментари и ще принуди скрипта да се изпълни с обвивката, към която сочи тази линия.
Нова линия = Нова команда
Всяка нова линия трябва да се разглежда като нова команда или компонент на по-голяма система. Например, ако операторите / then / else ще заемат няколко реда, всеки компонент на тази система е в нов ред. Не позволявайте на командата да изтича в следващия ред, тъй като това може да съкрати предишната команда и да ви даде грешка в следващия ред. Ако вашият текстов редактор прави това, трябва да изключите превключването на текст, за да бъдете безопасни. Можете да изключите превключването на текст в нано битове, натискайки ALT + L.
Коментар Често с #s
Ако започнете линия с #, редът се игнорира. Това го превръща в ред за коментари, където можете да си припомните какво е изходът на предишната команда или какво ще направи следващата команда. Отново изключете превключването на текст или прекъснете коментара в няколко реда, които започват с хеш. Използването на много коментари е добра практика да се запази, тъй като позволява на вас и други хора да променяте скриптовете си по-лесно. Единственото изключение е гореспоменатият хак на Hash-Bang, така че не следвайте #s с! S. ;-)
Командите са заобиколени от скоби
В по-старите дни подмяната на командите беше извършена с единични отметки (', споделя клавиша ~). Все още няма да се докосваме до това, но тъй като повечето хора се разхождат и изучават след изучаване на основите, вероятно е добра идея да споменем, че вместо това трябва да използвате скоби. Това се дължи главно на това, че когато поставите команди в други команди, скобите работят по-добре.
Вашият първи скрипт
Нека започнем с прост скрипт, който ви позволява да копирате файлове и да добавите дати към края на името на файла. Нека го наречем “datecp”. Първо, нека проверим дали това име противоречи на нещо:
Можете да видите, че няма изход от тази команда, така че всички сме настроени да използваме това име.
Нека създадем празен файл в папката ~ / bin:
докоснете ~ / bin / datecp
И сега нека променим разрешението, преди да забравим:
Да започнем с изграждането на нашия сценарий тогава. Отворете файла във вашия текстов редактор. Както казах, харесвам простотата на нано.
nano ~ / bin / datecp
И нека продължим напред и да поставим предварителния ред и коментар за това, което прави този скрипт.
След това нека обявим променлива. Ако някога сте приемали алгебра, вероятно знаете какво е това. Променливата ни позволява да съхраняваме информация и да правим неща с нея. Променливите могат да се „разширяват“, когато са упоменати другаде. Това означава, че вместо да показва тяхното име, те ще покажат запазеното си съдържание. По-късно можете да кажете на същата променлива да съхранява различна информация и всяка инструкция, която се появява след това, ще използва новата информация. Това е наистина фантастично място.
Какво ще поставим в променливата? Е, нека да съхраним датата и часа! За да направите това, ще извикаме командата за дата.
Погледнете скрийншота по-долу за това как да създадете изхода на командата за дата:
Можете да видите, че чрез добавяне на различни променливи, които започват с%, можете да промените изхода на командата на това, което искате. За повече информация, можете да разгледате ръчната страница за командата за дата.
Да използваме последната итерация на командата за дата, „date +% m_% d_% y-% H.% M.% S“ и да я използваме в нашия скрипт.
Ако искаме да запазим този скрипт в момента, можем да го стартираме и ще ни даде изхода на командата за дата, както бихме очаквали:
Но нека направим нещо различно. Нека дадем име на променлива, като date_formatted на тази команда. Подходящият синтаксис за това е както следва:
променлива = $ (аргументи с опции на команда)
И за нас ще го изградим по следния начин:
date_formatted = $ (дата +% m_% d_% y-% H.% M.% S)
Това наричаме подмяна на команда. По същество ние казваме на bash, че когато се появи променливата "date_formatted", командата се изпълнява в скобите. Тогава, независимо от изхода, който командите дават, трябва да се показва вместо името на променливата, "date_formatted".
Ето един примерен скрипт и неговия изход:
Имайте предвид, че в изхода има две интервали. Пространството в кавичките на командата echo и пространството пред променливата се показват. Не използвайте интервали, ако не искате те да се показват. Също така имайте предвид, че без тази добавена "ехо" линия, скриптът ще даде абсолютно никакъв изход.
Да се върнем към нашия сценарий. Нека да добавим следващата част в командата за копиране.
cp -iv $ 1 $ 2. $ date_formatted
Това ще извика командата copy, с опциите -i и -v. Първият ще ви помоли за проверка, преди да презапишете файл, а последният ще покаже какво се намира в командния ред.
След това можете да видите, че съм добавил опцията „$ 1“. Когато скриптове, знак за долар ($), последван от число, ще означава този номериран аргумент на скрипта, когато е бил извикан. Например в следната команда:
cp -iv Trogdor2.mp3 ringtone.mp3
Първият аргумент е “Trogdor2.mp3” и вторият аргумент е “ringtone.mp3”.
Ако погледнем назад към нашия скрипт, виждаме, че споменаваме два аргумента:
Това означава, че когато стартираме скрипта, ще трябва да предоставим два аргумента за правилното изпълнение на скрипта. Първият аргумент, $ 1, е файлът, който ще бъде копиран и заменен като първия аргумент на командата “cp -iv”..
Вторият аргумент, $ 2, ще действа като изходен файл за същата команда. Но също така можете да видите, че е различно. Добавихме период и споменахме променливата „date_formatted“ от по-горе. Любопитно е какво прави това?
Ето какво се случва, когато скриптът се изпълнява:
Можете да видите, че изходният файл е посочен като каквото съм въвел за $ 2, последван от период, след това изхода на командата за дата! Има смисъл?
Сега, когато стартирам командата datecp, той ще стартира този скрипт и ще ми позволи да копирам всеки файл на ново място и автоматично да добавя датата и часа към края на името на файла. Полезно за архивиране на неща!
Скриптове на Shell са в основата на това да направите вашата операционна система за вас. Не е нужно да научите нов език за програмиране, за да се случи това. Опитайте скриптове с някои основни команди у дома и започнете да мислите за това, за какво можете да използвате това.
Имате ли скрипт? Имате ли съвет за начинаещи? Споделете вашите мисли в коментарите! В тази серия има още нещо!