Shell сценарийін GNU / Linux-те құрудың үздік тәжірибелері

Әдетте, сіз жұмыс істей бастағанда GNU / Linux және / немесе Unix операциялық жүйелері бар серверлерді басқару аймағы, өзін қоршаған ортада жұмыс істейтін адам өзін табады басқа әкімшілер жазған жоспарлы тапсырмалар тобы және біз белгілі бір уақытта керек басқару (басқару) дейін кез келген мәселені шешуге, мекеменің жаңа талабын орындау үшін жақсартуға және / немесе жоюға ол қайда жұмыс істейді. Сондықтан таңқаларлық емес, бұл кез-келген жаңа SysAdmin Кез-келген жұмыс орнында сіздің алдыңызда кейбір мәселелерді түсіну сияқты күрделі міндет тұр Shell сценарийі басқалар жасаған ескі SysAdmin, олар жақсы жазылмаған немесе логикалық немесе жазушылық құрылымда, түсіну оңай емес немесе нашар жағдайда командалық командалармен, типтік емес, ескі, тиімсіз немесе ыңғайсыз және түсініксіз түрде жазылған.

Қабық сценарийӘзірше нашар жазылған сценарийлерді шешу әрқашан бір сәттік тітіркендіргіш болып табылады, бұл кез келген адамға үйретеді жақсы SysAdmin маңызды нәрсе. Егер біреу а. Жасайтын болса Shell сценарийі бүгіннен тыс қолдану әрқашан жақсырақ оларды өте кәсіби және стандартталған түрде жазыңыз, уақыт өте келе, кез-келген басқа немесе өзімен бірге минималды күш пен білім аз уақыт ішінде түсіну мен басқаруға қол жеткізеді.

Сондықтан, жарияланымдардың практикалық сериясынан кейін «Shell сценарийін үйрену» біз қарапайым және қарапайым командалармен бірге өте практикалық сценарийлерді қарастыратын боламыз, біз осы жаңа сериядан бастаймыз «GNU / Linux-те Shell сценарийін құрудың үздік тәжірибелері», Мұнда біз оның әр кішкене аспектісіне және көптеген себептерге мұқият назар аударамыз, яғни біз сценарийлерді жақсартуға мәжбүр ететін бірнеше кеңестерді қарастырамыз, бірақ өзімізге емес, келесі адамға (SysAdmin) оларды басқару. Сондықтан мен нені кодтайтынымды, қалай және неліктен жұмыс істейтінімді және неге ол жұмыс істемейтінін білу қиын және қиын тапсырманы орындаудың қажеті жоқ.

Бұл ретте бірінші (1-ші) хабарлама осы жаңа серия «GNU / Linux үшін жақсы Shell сценарийіне арналған үздік тәжірибелер» Бізде не бар немесе не болуы керек туралы сөйлесетін боламыз Shell сценарий тақырыбы.

=======================================
БАСШЫ - ҚАБЫЛШАҚТЫ ШАҚЫРУ
=======================================

#! / path /pret [параметр-аргумент]

Жоғарғы жол - бұл GNU / Linux үшін Shell сценарийі қолданылатын негізгі құрылым. Оның элементтерін келесідей сипаттауға болады:

#! => ша-банг

Sha-bang (#!) Жасалған немесе жасалынатын сценарийдің жоғарғы жағында а Операциялық жүйеге біздің файл - бұл кейіннен көрсетілген командалық интерпретатор тамақтандыратын (түсіндірілетін) командалар жиынтығы екенін айтатын сценарий. Кейіпкерлер жұбы #! іс жүзінде бұл сиқырлы сан екі байт, бұл арнайы маркер файл түрін тағайындаужәне біздің жағдайда орындалатын қабық сценарийі. Ша-бангтан кейін бірден аты келеді орындалатын аудармашы орналасқан жол және аталған аудармашының аты. Басқаша айтқанда, бұл сценарийдегі командаларды түсіндіретін программаға жол, мейлі ол интерпретатор болсын, бағдарламалау тілі болсын, утилита болсын. Содан кейін бұл қабық сценарийдегі командаларды жоғарыдан бастап (ша-бангтан кейінгі жол) орындайды және кез келген түсініктемелерді елемейді. Кейбіреулер ша-банг олар:

#! / bin / sh
#! / bin / bash
#! / usr / bin / perl
#! / usr / bin / tcl
#! / bin / sed -f
#! / usr / awk -f

Жоғарыда сипатталған жолдардың әрқайсысы (мысал ретінде) әртүрлі қабықты шақырады. Сызық / bin / sh, шақырыңыз Shell әдепкі бойынша (GNU / Linux операциялық жүйесінде жұмыс істеу) немесе басқа ұқсас. Қолдану #! / bin / sh, әдепкі мәні Борн Шелл UNIX негізіндегі операциялық жүйелердің көптеген коммерциялық нұсқаларында ол сценарийді жасайды Linux-ке сәйкес келмейтін басқа амалдық жүйелер үшін портативті, бірақ ұқсас немесе оған негізделген немесе UNIX, бірақ бұл BASH-тің ерекше сипаттамаларын құрбан етеді. Алайда, реттілік «#! / Bin / sh» нормаға сәйкес келеді POSIX sh стандарты.

Есіңізде болсын ша-бангта берілген жол дұрыс болуы керек, әйтпесе қате туралы хабарлама, әдетте «Команда табылмады», бұл сценарийдің орындалуының жалғыз нәтижесі болады. Кейіпкерлер жұбын есте сақтаңыз »#! « егер сценарий тек Операциялық жүйенің жалпы командаларының жиынтығынан тұрса, яғни ішкі Shell директиваларын қолданбастан алынып тасталуы мүмкін. Мұны тағы бір рет есте сақтаңыз »#! / Bin / sh« үнсіздік бойынша орнатылатын әдепкі қабықша аудармашыны шақырады »#! / Bin / bash« онымен бірге командада GNU / Linux операциялық жүйесі.

Дәлелдерге қатысты бірнеше қолдануға болады, бірақ ең кең тарағандары: »-E«. бұл сценарийді жасайды кез келген команданың орындалу қателіктерін тексеруo (орындау сызығы) және егер оң болса, тоқтатуға және шығуға мәжбүр етеді, типтік болып табылады »-F« дейін қандай сценарий жүктелетінін көрсетіңіз және ең сирек кездесетіндердің бірі »-Rm« оны орындау аяқталғаннан кейін оны жоюды жүзеге асырады. -Де ғана көрсету мүмкін ша-банг дейін жалғыз аргумент (параметр) орындалатын бағдарлама атауынан кейін.

Соңында сценарийді айтыңыз сіздің кодыңыздың маңызды бөліктерінде қолданылатын ғаламдық айнымалылар, орындалу жолы, авторизацияланған пайдаланушы, сценарий аты және басқалары сияқты оқиғаларды тексеру үшін. Және аяқтаңыз бағдарламаның, жасаушының, ұйымның мәліметтері, сонымен қатар бағдарламаға қолданылатын лицензия.

Менің кеңестерім (үздік тәжірибелер) таңдау ең жақсы ша-банг және а Shell сценарийі мыналар:

#! / usr / bin / env bash

Неліктен команданы қолдану керек »Env« Біз Операциялық жүйеге әдепкіде көрсетілген дәл жолмен қолданылатын аудармашыны көрсетеміз, бұл бізге ша-банг бұл оның портативтілігін арттырады, өйткені барлығы бірдей емес OS GNU / Linux аудармашылардың немесе бағдарламалардың жолы бірдей. Дәлелсіз, өйткені ол үшін команданы қолданған жөн жиынтық, өйткені онымен біз жасай аламыз жалпы (-e) немесе нақты (+ x / -x) қателерді тексеру, немесе қоршаған ортаның (-i) немесе арнайы (-u / –unset) айнымалыларға арналған ғаламдық алдын ала орнатулар. Және, ақырында, нақты (- o) толықтырушы әрекеттерді орындау сценарий ішінде.

Сондықтан менің ұсынған БАСШЫМ:

#! / usr / bin / env bash
# Операциялық жүйе арқылы бас интерпретаторды абсолютті жолмен көрсетіңіз.

орнату -o errexit
# Пәрмен немесе орындалу сызығы орындалмаған кезде сценарийге тоқтап жабылуын айту.

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

труба құбырын орнату
# Нөлдік емес шығу кодын қайтарған соңғы тапсырыстың шығу мәртебесін алу үшін.

# жиын -o xtrace
# Не жұмыс істейтінін бақылау үшін. Түзету үшін пайдалы. Оны тек қателіктерді тексеруге қосыңыз.

Осы ұсыныстарды қосымша орындауды ұмытпаңыз:

01.- кодты көрсету: Кодты оқылатын етіп жасау өте маңызды және бұл көптеген адамдар ұмытып кететін сияқты. Көзге жақсы логикалық құрылымды қабылдау үшін қажетті шегіністер жасауға тырысыңыз.

02.- Код бөлімдері арасында бос орын қосыңыз: Бұл кодты әлдеқайда түсінікті етуге көмектеседі, өйткені модульдер немесе бөлімдер бойынша арақашықтық кодты оқуға және түсінуге оңай етеді.

03.- Код туралы мүмкіндігінше түсініктеме: Әр командалық бұйрықтың (орындалу сызығының) немесе кодтық бөлімнің жоғарғы жағында (немесе төменгі жағында) кодтың өзінде не болатынын түсіндіру үшін сценарий (лер) дің функциясының сипаттамасын қосу өте қолайлы.

04. - функцияларының сипаттамалық атауларымен айнымалылар жасаңыз: Ол жасалатын функцияны анықтайтын сипаттамалы айнымалы атауларды тағайындаңыз. Егер сіз ешқашан бір кодтық блоктың сыртында қолданылмайтын уақытша айнымалылар жасасаңыз да, оның қандай мәндермен немесе функциялармен жұмыс жасайтынын жанама (объективті) түсіндіретін атау қою жақсы.

05.- Пәрменді ауыстыру үшін VARIABLE = $ (команда) синтаксисін қолданыңыз: Егер сіз мәні басқа командадан алынған айнымалы құрғыңыз келсе, оны bash-та орындаудың екі әдісі бар. Бірге рюкзит, яғни кейіпкерлермен бірге ` , Эжм: VARIABLE = `команда - опциялар параметрлері ', бірақ ол қазірдің өзінде ескірген, сондықтан синтаксис VARIABLE = $ (команда) бұл ең заманауи, қабылданған және ұсынылған әдіс. ЖОҚ -> DATE = `күн +% F` / ИӘ -> DATE = $ (күн +% F)

06.- Superuser және авторизацияланған пайдаланушыны тексеру модульдерін және / немесе айнымалыларды парольмен немесе парольсіз қолдану: Қажет болса, қауіпсіздік деңгейін арттыру.

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 символдық сілтемесі әрқашан bash-қа сілтеме жасай бермейді. Мысалы, Debian-да (және мен Ubuntu деп ойлаймын):
    $ ls -l / bin / sh
    lrwxrwxrwx 1 түбірлік тамыр 4 аза 8 2014 / bin / sh -> сызықша
    Debian-дағы әдепкі қабық - бұл сызықша. Мұнда қараңыз: https://wiki.debian.org/Shell

  3.   белгісіз дижо

    Қолданыстағы қабықты білуге ​​кеңес ретінде:

    жаңғырық $ 0
    жаңғырық $ SHELL
    қысқаша | grep SHELL

  4.   Инг. Хосе Альберт дижо

    Сіз шынымен де дұрыс айтасыз! Мен DEBIAN 9 және Kali Linux 2.0-де сынап көрдім және бұл шындық! сызықшаға апарады. Бұдан әрі: #! / Usr / bin / env bash ұсынысы, егер бұл сіз пайдаланғыңыз келетін Shell болса.

    Сіз мүлдем дұрыс айтасыз, бұл шебанг, бірақ кейбір веб-сайттарда (шаблон) оны шабанг немесе басқа сөздермен атайды, сондықтан менің абыржуым. Мысал:

    Есептеу кезінде шебанг дегеніміз - сценарийдің басында таңбалар саны мен леп белгісінен (#!) Тұратын символдар тізбегі. Оны ша-банг, [1] [2] хэшбанг, [3] [4] фунт-банг, [5] немесе хэш-плинг деп те атайды.

    Қайдан: https://en.wikipedia.org/wiki/Shebang_%28Unix%29

    Y 2 тарау. Ша-Бэнгпен бастау
    Қайдан: http://www.tldp.org/LDP/abs/html/sha-bang.html

  5.   Инг. Хосе Альберт дижо

    Сондай-ақ: $ 0 негізгі аты