GNU / Linux тутумунда Shell скриптин түзүү боюнча мыкты тажрыйбалар

Адатта, сиз иштеп баштаганда Серверлерди башкаруу аймагы GNU / Linux жана / же Unix Операция Системалары менен, бир адам өзүн (жүздөрүн) адатта a болгон чөйрөдө иштеп жаткандыгын табат башка админдер жазган пландуу тапшырмалардын тобу жана кандайдыр бир учурда биз керек башкаруу (башкаруу) үчүн мекеменин жаңы талабын аткаруу үчүн ар кандай көйгөйлөрдү чечүү, өркүндөтүү жана / же жок кылуу ал кайсы жерде иштейт. Ошентип, таң калыштуу деле эмес, жаңы дагы SysAdmin Кайсы гана жумуш ордунда болбосун, айрымдарын түшүнүү түйшүктүү милдетке туш болосуз Shell script башкалар тарабынан түзүлгөн эски SysAdmin, жакшы жазылган эмес, же логикалык же жазуу структурасында, түшүнүү оңой эмес, же эң начар учурда, буйрук буйруктары менен, типтүү эмес, эски, натыйжасыз же ыңгайсыз жана түшүнүксүз түрдө жазылган.

Shell сценарийижатканда начар жазылган сценарийлерди чечүү ар дайым бир заматта жадатма, бул каалаган нерсени үйрөтөт жакшы SysAdmin маанилүү нерсе. Эгерде кимдир бирөө түзө турган болсо Shell script бүгүнкү күндөн тышкары колдонула турган болсо, анда бул ар дайым жакшыраак аларды абдан кесипкөй жана стандартташтырылган түрдө жазыңызОшентип, убакыттын өтүшү менен, кимдир бирөө же өзү менен минималдуу күч жана билим түшүнүүгө жана башкарууга жетишүүгө минималдуу убакыт.

Ошондуктан, жарыяланган практикалык сериядан кийин "Shell Scriptingти үйрөн" жөнөкөй жана негизги буйруктар менен бир топ практикалык сценарийлерди карап, анда ушул жаңы сериядан баштайбыз "GNU / Linux программасында Shell скриптин түзүү боюнча мыкты тажрыйбалар", анда биз анын ар бир кичинекей жагына жана көп нерсенин себебине терең токтолобуз, башкача айтканда, биз өзүбүзгө эмес, кийинки адамга (SysAdmin) мыкты сценарийлерди жасоого түрткү берген бир нече кеңештерди камтыйбыз. аларды башкаруу керек. Андыктан мен код жазганды, кантип жана эмне үчүн иштей турганымды жана эмне үчүн ал иштебей калгандыгын аныктоо боюнча түйшүктүү жана татаал тапшырманы баштан өткөрүүнүн кажети жок.

бул биринчи (1-чи) билдирүү ушул жаңы сериянын "GNU / Linux үчүн жакшы Shell скрипти боюнча мыкты тажрыйбалар" Эмнеге барышы же барышы керектиги жөнүндө сүйлөшөбүз Shell сценарийинин баш аты.

=======================================
БАШЧЫ - КАБЫЛЧАГА ЧАКЫРУУ
=======================================

#! / path / interpret [parameter-argument]

Жогору сызык - бул GNU / Linux үчүн Shell Script колдонулган негизги структура. Анын элементтерин төмөнкүдөй сүрөттөөгө болот:

#! => sha-bang

Sha-bang (#!) түзүлгөн же түзүлө турган Скрипттин жогору жагында а биздин Операциялык Системага биздин файл, андан кийин көрсөтүлгөн буйрук котормочу тарабынан бериле турган (чечмелене турган) буйруктардын жыйындысы экендигин билдирген сценарий. Каармандар жупу #! чындыгында, ал сыйкырдуу сан эки байт, ал атайын маркер файл түрүн белгилөө, жана биздин учурда, аткарылуучу кабык скрипти. Ошол замат ша-бангдын аты келет аткарыла турган котормочу жайгашкан жол жана аталган котормочунун аты. Башка сөз менен айтканда, бул котормочу болобу, программалоо тили болобу же утилита болобу скрипттеги буйруктарды чечмелеген программага жол. Андан кийин бул кабык сценарийдеги буйруктарды жогору жактан баштап (sha-bangдан кийинки сап) жана эч кандай комментарийлерге көңүл бурбай аткарат. Кээ бирлери ша-банг Алар төмөнкүлөр болушу мүмкүн:

#! / Бин / Sh
#! / bin / bash
#! / usr / bin / perl
#! / usr / bin / tcl
#! / bin / sed -f
#! / usr / awk -f

Жогоруда сүрөттөлгөн ар бир сап (мисал катары) ар башка кабыкты чагылдырат. Сызык / Бин / Ш., чакыруу жумуртканын кабыгы демейки боюнча (GNU / Linux Иштетүү Системасында Баш) же башка ушул сыяктуу. Колдонуу #! / Бин / Sh, демейки мааниси Bourne shell UNIX негизиндеги Операциялык Системалардын көпчүлүк коммерциялык варианттарында Скрипт жаратылган Linux талаптагыдай эмес, башка Оперативдик Системалар үчүн портативдүү, бирок окшош же ага негизделген же UNIX, бирок бул BASHдин өзгөчөлүктөрүн курмандыкка чалат. Бирок, ырааттуулук "#! / Bin / sh" нормага ылайык келет POSIX sh стандарт.

Белгилей кетчү нерсе, ша-банда берилген жол туура болууга тийиш, болбосо ката жөнүндө билдирүү, адатта "Буйрук табылган жок", бул сценарийдин аткарылышынын бирден-бир натыйжасы болот. Каармандардын түгөйүн унутпаңыз »#! « эгер Скрипт Операциялык тутумдун жалпы командаларынын жыйындысынан турса, башкача айтканда, Shellдин ички директиваларын колдонбостон, алынып салынышы мүмкүн. Жана дагы бир жолу эсиңизде болсун »#! / Bin / sh« демейки кабыктын котормочусун чакырат »#! / Bin / bash« аны менен бир командада GNU / Linux Иштетүү Системасы.

Аргументтерге токтолсок, бир нече колдонсо болот, бирок эң кеңири тараган: »-E«. сценарийди түзгөн кандайдыр бир буйруктун аткарылышындагы каталарды текшерүүo (аткаруу сабы) жана оң болсо, токтотууга жана чыгууга мажбурлайт, типтүү бир »-F« үчүн кайсы скриптти жүктөй тургандыгын көрсөтүңүз жана сейрек кездешкендердин бири »-Rm« аткарылышы аяктагандан кийин аны жок кылууну жүзөгө ашырат. Гана көрсөтүүгө болот ша-банг чейин бир аргумент (параметр) аткарыла турган программанын аталышынан кийин.

Акыры, сценарийди айтып бериңиз Сиздин кодуңуздун маанилүү бөлүктөрүндө колдонула турган глобалдык өзгөрмөлөр, иш-чараларды текшерүү үчүн, мисалы, аткаруу жолу, уруксат берилген колдонуучу, скрипт аты жана башкалар. Жана менен аяктайт программанын, жаратуучунун, уюмдун маалыматтары жана башкалар, ошондой эле программага тиешелүү лицензия.

Менин кеңешим (Мыкты тажрыйбалар) тандоо мыкты ша-банг жана а Shell script Алар төмөнкүлөр:

#! / usr / bin / env bash

Эмне үчүн буйрукту колдонушат »Env« Операциялык тутумга котормочуну демейки шартта көрсөтүлгөн так жол менен колдонууну көрсөтөбүз, бул бизге ша-банг бул анын портативдүүлүгүн жогорулатат, анткени бардыгы эмес OS GNU / Linux котормочулардын же программалардын жолу бирдей. Жана аргументтерсиз, анткени ал үчүн буйрукту колдонуу жакшы коюлган, анткени аны менен биз болот жалпы (-e) же конкреттүү (+ x / -x) каталарды текшерүү, же айлана-чөйрө (-i) же белгилүү (-u / –unset) өзгөрмөлөрү үчүн глобалдык алдын-ала белгилер. Акыры, үчүн толуктоочу иш-аракеттерди аткаруу (- o) сценарийдин ичинде.

Ошентип, менин сунуш кылган БАШЧЫМ:

#! / usr / bin / env bash
# Operating System аркылуу баш котормочуну абсолюттук жол менен көрсөтүңүз.

set -o errexit
# Буйрук же аткарылуучу сап аткарылбай калганда сценарийди токтотуп, жабуу керектигин айтыш үчүн.

set -o зат атооч
# Скрипт декларацияланбаган өзгөрмөлөрдү колдонууга аракет кылганда, сценарийди токтотуп, жабуу керектигин айтыш үчүн.

set -o pipefail
# Нөлгө барабар эмес чыгуу кодун кайтарган акыркы буйруктун чыгуу статусун алуу.

# set -o xtrace
# Эмне иштээрин көзөмөлдөө. Мүчүлүштүктөрдү оңдоо үчүн пайдалуу. Аны каталарды гана текшерүү үчүн күйгүзүңүз.

Бул сунуштарды кошумча аткарууну унутпаңыз:

01.- Кодуңузду көрсөтүңүз: Кодуңузду окула тургандай кылуу абдан маанилүү жана көпчүлүк адамдар унутуп калгандай сезилет. Көрүнүктүү логикалык түзүлүштү кабыл алуу үчүн керектүү чегинүүлөрдү жасоого аракет кылыңыз.

02.- Код бөлүмдөрүнүн арасына боштук кошуңуз: Бул кодду кыйла түшүнүктүүрөөк кылууга жардам берет, анткени модулдар же бөлүмдөр боюнча аралык коддун окулушун жана түшүнүүсүн жеңилдетет.

03.- Код жөнүндө мүмкүн болушунча көбүрөөк комментарий бериңиз: Ар бир буйрук буйругунун (Аткаруу тилкесинин) же Код Бөлүгүнүн жогору жагында (же төмөн жагында) коддун өзүндө эмне болуп жаткандыгын түшүндүрүп берүү үчүн буйруктардын ырааттуулугунун (функцияларынын) сүрөттөмөсүн кошуу идеалдуу.

04. - Функцияларынын сүрөттөмө аталыштары менен өзгөрмө түзүңүз: Ал түзүлө турган функцияны аныктай турган сүрөттөмө өзгөрмө аттарды дайындаңыз. Эч качан бир код блогунан тышкары колдонулбай турган убактылуу өзгөрмөлөрдү түзсөңүз дагы, анын кандай баалуулуктарды же функцияларды иштетээрин ачыктан-ачык (объективдүү) түшүндүргөн ат коюу жакшы.

05.- Буйрукту алмаштыруу үчүн VARIABLE = $ (буйрук) синтаксисин колдонуңуз: Эгер мааниси башка буйруктан келип чыккан өзгөрмөнү түзгүңүз келсе, анда аны баш менен жасоонун эки жолу бар. Менен Backtick, башкача айтканда, каармандар менен " , Мисалы: VARIABLE = `команда-параметрлердин параметрлери ', бирок ал буга чейин эскирген, ошондуктан синтаксис VARIABLE = $ (буйрук) бул эң заманбап, кабыл алынган жана сунуш кылынган жол. ЖОК -> DATE = `күн +% F` / Ооба -> ДАТА = $ (күн +% F)

06. - Супер колдонуучуну жана авторизацияланган колдонуучуну тастыктоо модулдарын жана / же өзгөрмөлөрдү сыр сөз менен же сырсыз колдонуу: Керек болсо коопсуздук деңгээлин жогорулатуу.

07. - Иштөө тутумунун (Distro, Version, Architecture) тастыктоонун модулдарын жана / же өзгөрмөлөрүн колдонуңуз: жараксыз аянтчаларда колдонуудан сактануу.

08.- Модулдарды (жол-жоболорду / бөлүмдөрдү) критикалык же топтук иш-аракеттердин (модулдар / функциялар) аткарылышын тастыктоо үчүн колдонуңуз: Импровизация же байкабастыктан улам каталарды минималдаштыруу.

09.- Колдонуучуга ыңгайлуу интерфейстерди камсыз кылыңыз (Колдонуучуга ылайыктуу): Терминал менен менюлар жана түстөр менен диалогу жана Zenity, Gxmessage менен негизги колдонуучулар үчүн графикалык интерфейстер. Мүмкүн болсо, үнгө жараша таанымал окуяларды аныктоочу үн сигналдарынын жардамын колдонуңуз. Сиздин Сценарий мүмкүн болушунча аракет кылдым параметрлерди / модулдарды / функцияларды иштетүү жана өчүрүү менен эки жолду тең иштетүү.

10.- Кош келиңиздер жана Коштошуу модулдарын (билдирүүлөрдү) кошуңуз: колдонуучу менен интерактивдүүлүктү жогорулатуу үчүн зарыл болгон учурда.

11.- Кош аткарууну текшерүү модулун кошуңуз: Аны бир эле учурда 1 жолудан ашык аткарууга жол бербөө үчүн кулпу файлын түзүңүз.

12.- Сценарийдин көлөмүн тышкы функциялар жана / же модулдар менен рационалдаштырыңыз: Эгерде сценарий өтө чоң болсо, анда функцияны колдонуп кодду бөлүңүз же аларды башкы сценарий аркылуу чакырылган кичинекей сценарийлерге бөлүңүз.

13.- Скрипт ичиндеги башка котормочуларга (программалоо тилдерине) ачык жана айкын жол менен чакыруу: Аларды сызыктар же модулдар аркылуу так чагылдырат.

мисалы:

# ================================================== #
#!/bin/bash
#Llamando a un interprete externo a BASH
echo 'El siguiente texto será mostrado por el interprete de PERL'
perl -e 'print "Este texto es mostrado por un script PERL embebido.\n";'
exit 0
# ==================================================#

 

# ==================================================# 
#!/bin/bash #Llamando al interprete de Python. 
echo 'El siguiente es un script de python:'
echo print "Hola, mundo!" | tee $HOME/.testpythonbash.py
python $HOME/.testpythonbash.py exit 0
# ==================================================#

 


# ======================================================= #
#!/bin/bash
# bash-y-perl.sh

echo "Saludos desde la parte BASH del script."
# Es posible añadir mas comandos BASH aqui.

exit 0
# Fin de la parte BASH del script.

###########################################################

#!/usr/bin/perl
# Esta parte del script se invoca con la opcion -x.

print "Saludos desde la parte PERL del script.\n";
# Podemos añadir mas comandos PERL aqui.

# Fin de la parte PERL del script.
# ======================================================= #
 

Келечектеги басылмаларда жогоруда баяндалган ар бир тажрыйбаны кененирээк кеңейтебиз.

Эгер сиз өзүңүздүн же башкалардын дагы башка жакшы тажрыйбаларын билсеңиз, анда толук компендиум түзүү үчүн, аларга комментарий берүүдөн тартынбаңыз!

Ушул жаңы сериянын кийинки басылышына чейин.


Макаланын мазмуну биздин принциптерге карманат редакциялык этика. Ката жөнүндө кабарлоо үчүн чыкылдатыңыз бул жерде.

6 комментарий, өзүңүздүкүн калтырыңыз

Комментарий калтырыңыз

Сиздин электрондук почта дареги жарыяланбайт. Милдеттүү талаалар менен белгиленет *

*

*

  1. Маалыматтар үчүн жооптуу: Мигель Анхель Гатан
  2. Маалыматтын максаты: СПАМды көзөмөлдөө, комментарийлерди башкаруу.
  3. Мыйзамдуулук: Сиздин макулдугуңуз
  4. Маалыматтарды берүү: Маалыматтар үчүнчү жактарга юридикалык милдеттенмелерден тышкары билдирилбейт.
  5. Маалыматтарды сактоо: Occentus Networks (ЕС) тарабынан уюштурулган маалыматтар базасы
  6. Укуктар: Каалаган убакта маалыматыңызды чектеп, калыбына келтирип жана жок кыла аласыз.

  1.   Max j ​​rodriguez ал мындай деди:

    Бир эле деталь, бул "шебанг" 😛
    абдан жакшы кызмат, узак мөөнөттүү жакшы тажрыйба ар дайым стандартташтырууга жардам берет.

  2.   Ушул жерден өткөн ал мындай деди:

    Bash бардык бөлүштүрүүлөрдө демейки кабык эмес, ошондуктан / bin / sh символикалык шилтеме ар дайым башты көрсөтө бербейт. Мисалы, Debianда (жана мен Ubuntu деп ойлойм):
    $ ls -l / bin / sh
    lrwxrwxrwx 1 root root 4 aza 8 2014 / bin / sh -> dash
    Демейки кабык, демек Debianда тире эмес. Бул жерден караңыз: https://wiki.debian.org/Shell

  3.   аты жок ал мындай деди:

    Колдонулуп жаткан Shellди билүү үчүн кеңеш катары:

    echo $ 0
    echo $ SHELL
    жиберүү | grep SHELL

  4.   Инг. Хосе Альберт ал мындай деди:

    Чындыгында туура айтасыз! Мен DEBIAN 9 жана Kali Linux 2.0 сынап көрдүм, бул чын! сызыкка алып барат. Андан дагы: #! / Usr / bin / env bash сунуштамасы, эгерде ал сиз колдоно турган Shell болсо.

    Сиз таптакыр туура айтасыз, бул шебанг, бирок кээ бир веб-сайттарда (техникалык адабияттарда) шабанг же башкача сөздөр менен аташат, ошондуктан менин башаламандыгым. Мисалы:

    Эсептөөдө shebang - сценарийдин башында белгилердин сан белгисинен жана леп белгисинен (#!) Турган символ тизмеги. Ал sha-bang, [1] [2] hashbang, [3] [4] pound-bang, [5] же hash-pling деп аталат.

    алардын ичинен: https://en.wikipedia.org/wiki/Shebang_%28Unix%29

    Y 2-бөлүм. Ша-Бэнг менен баштоо
    алардын ичинен: http://www.tldp.org/LDP/abs/html/sha-bang.html

  5.   Инг. Хосе Альберт ал мындай деди:

    Ошондой эле: $ 0 аталышы