Најбоље праксе за креирање Схелл скрипте у ГНУ / Линук

Обично, када почнете да радите на Административна област сервера са ГНУ / Линук и / или Уник оперативним системима, човек се затекне (ради) у окружењу где обично постоји гомила заказаних задатака које су написали други администратори и да у неком тренутку морамо управљати (администрирати) пар решити било који проблем, побољшати и / или елиминисати, како би се удовољило новом захтеву институције где ради. Па није ни чудо, да је било шта ново СисАдмин На било ком радном месту суочени сте са гломазним задатком да разумете неке од њих Схелл сцрипт створили други стари СисАдмин, који нису добро написани или су у логичкој структури или структури за писање, нису лако разумљиви или у најгорем случају са командним командама, атипичним, старим, неефикасним или написаним на неспретан и збуњујући начин.

Схелл Сцриптинг

Док решавање лоше написаних скрипти је увек тренутна сметња, ово свакога учи добар СисАдмин нешто важно. Ако ће неко створити Схелл сцрипт да се користи и данас, увек је боље напишите их на врло професионалан и стандардизован начин, тако да с временом било ко други или неко сам може са минимални напор и знање постижу разумевање и администрацију у минималном времену.

Стога је након практичне серије публикација о „Леарн Схелл Сцриптинг“ где ћемо испитати неке врло практичне скрипте са једноставним и основним наредбама, започињемо са овом новом серијом под називом „Најбоље праксе за креирање Схелл скрипте у ГНУ / Линук“, где ћемо се темељито усредсредити на сваки његов мали аспект и разлог многих ствари, односно, обухватићемо неке савете који ће нас натерати да правимо боље скрипте, али не толико за себе, већ за следећу особу (СисАдмин) која мора управљати њима. Тако да не морате да пролазите кроз досадан и тежак задатак да откријете шта кодирам, како и зашто и зашто то више не функционише.

У овом први (1.) пост ове нове серије „Најбоље праксе за добру скрипту шкољке за ГНУ / Линук“ Разговараћемо о томе шта иде или треба да иде у Заглавље скрипте шкољке.

=======================================
ГЛАВА - ПОЗИВ ШКОЉКЕ
=======================================

#! / путања / тумачење [параметар-аргумент]

Горња линија је основна структура помоћу које се позива Схелл Сцрипт за ГНУ / Линук. Његови елементи се могу описати на следећи начин:

#! => сха-банг

Сха-банг (#!) на врху скрипте која је креирана или ће бити креирана налази се скрипта која нашем оперативном систему говори да је наша датотека скуп наредби које ће напајати (тумачити) тумач наредби назначен након њега. Пар ликова #! заправо, то је магични број двобајтни, посебан маркер који одредити тип датотеке, и у нашем случају, извршну љуску скрипту. Одмах након сха-банга долази име путања на којој се налази тумач који треба извршити плус име наведеног тумача. Другим речима, ово је пут до програма који тумачи наредбе у скрипти, било да се ради о тумачу, програмском језику или услужном програму. Затим ова љуска извршава наредбе у скрипти, почевши од врха (ред након сха-банга), игноришући коментаре. Неки ша-банг Они могу бити:

# / Бин / сх
#! / бин / басх
#! / уср / бин / перл
#! / уср / бин / тцл
#! / бин / сед -ф
#! / уср / авк -ф

Свака од линија описаних горе (као пример) позива другу љуску. Линија / Бин / сх, позива се на граната по дефаулту (Ударање на ГНУ / Линук оперативном систему) или друга слична. Користећи # / Бин / сх, подразумевана вредност Боурне Схелл У већини комерцијалних верзија оперативних система заснованих на УНИКС-у чини скрипту створеном преносив на друге оперативне системе који нису исправно Линук, али сличан или заснован на њему или УНИКС-у, иако ово жртвује специфичне карактеристике БАСХ-а. Међутим, редослед „#! / Бин / сх“ одговара норми ПОСИКС сх стандард.

Имајте на уму то путања дата у сха-бангу мора бити тачна, иначе порука о грешци, обично „Наредба није пронађена“, то ће бити једини резултат извршења скрипте. Сетите се личног пара »#! « може се изоставити ако се скрипта састоји само од скупа генеричких наредби оперативног система, односно без употребе унутрашњих Схелл директива. И имајте још једном на уму да »#! / Бин / сх« позива подразумевани тумач љуске, који је подразумевано »#! / Бин / басх« у тиму са њим ГНУ / Линук оперативни систем.

Што се тиче аргумената, постоји неколико њих који би се могли користити, али најчешћи је: »-Е«. што чини сценарио потврдити грешке извршавања било које наредбеo (линија извршења) и ако је позитивно, присиљава заустављање и излазак, типичан је »-Ф« пар назначите коју скрипту треба учитати а један од најређих је »-Рм« која извршава његово брисање након завршетка извршења. Могуће је навести само у ша-банг до а појединачни аргумент (параметар) након назива програма који треба извршити.

И на крају, реците сценарио глобалне променљиве које ћете користити у битним деловима вашег кода, за валидацију догађаја, као што су путања извршења, овлашћени корисник, име скрипте, између осталог. И заврши са подаци програма, ствараоца, организације, између осталог, плус лиценцирање које се односи на програм.

Мој савет (најбоље праксе) да бирају најбољи ша-банг и наслов а Схелл сцрипт звук:

#! / уср / бин / енв басх

Зашто користити команду »Енв« Оперативном систему указујемо на тумач који ће се користити са тачно наведеном путањом која је према њему подразумевано задата, што нам омогућава да имамо ша-банг то повећава његову преносивост, јер не у свим ОС ГНУ / Линук тумачи или програми имају исти пут. И без аргумената, јер је за то боље користити команду сет, јер с њим можемо потврдити грешке, опште (-е) или специфичне (+ к / -к), или да обришите глобалне унапред подешене вредности за променљиве окружења (-и) или одређене (-у / –унсет). И на крају, да извршити одређене (- о) комплементарне радње унутар скрипте.

Дакле, мој препоручени ХЕАДЕР би био:

#! / уср / бин / енв басх
# Означите басх тумач са апсолутном путањом од стране оперативног система.

сет -о еррекит
# Рећи скрипти да се заустави и затвори када наредба или линија извршења не успе.

сет -о именица
# Рећи скрипти да се заустави и затвори када скрипта покуша да користи непријављене променљиве.

сет -о пипефаил
# Да бисте добили излазни статус последње наруџбине која је вратила не-нулти излазни код.

# сет -о ктраце
# Да бисте пратили шта ради. Корисно за отклањање грешака. Омогућите га да бисте проверили само грешке.

Не заборавите да се додатно придржавате ових препорука:

01.- Унесите свој код: Учинити ваш код читљивим веома је важно, а чини се и да то многи људи такође заборављају. Покушајте да направите потребна удубљења да бисте уочили добру логичку структуру на видику.

02.- Додајте размаке између одељака кода: Ово може помоћи да код буде много разумљивији, јер размак по модулима или одељцима помаже да код постане читљив и лак за разумевање.

03.- Коментирајте што је више могуће о коду: На врх (или дно) сваког наредбеног налога (линија за извршавање) или одељка кода, идеално је додати опис функције скрипте (сценарија) да бисте објаснили шта се дешава унутар самог кода.

04.- Креирајте променљиве са описним именима њихових функција: Доделите описна имена променљивих која очигледно идентификују функцију за коју ће бити створена. Чак и ако креирате привремене променљиве које се никада неће користити изван једног блока кода, и даље је добро ставити име које имплицитно (објективно) објашњава којим вредностима или функцијама рукује.

05.- Користите синтаксу ВАРИАБЛЕ = $ (наредба) за замену наредбе: Ако желите да креирате променљиву чија је вредност изведена из друге наредбе, постоје два начина за то у басх-у. Са бацктицк, односно са ликовима `` , Ејм: ВАРИАБЛЕ = `параметри наредбе -оптионс`, али је већ застарела, па је синтакса ВАРИАБЛЕ = $ (наредба) то је најмодернији, прихваћен и препоручен начин. НЕ -> ДАТУМ = `датум +% Ф` / ДА -> ДАТУМ = $ (датум +% Ф)

06.- Користите суперусер и овлашћене модуле за валидацију корисника и / или променљиве са или без лозинке: Да бисте повећали ниво безбедности ако је потребно.

07.- Користите модуле и / или променљиве за проверу ваљаности оперативног система (Дистро, верзија, архитектура): како би се спречила употреба на неприкладним платформама.

08.- Користите модуле (процедуре / одељци) за потврђивање извршења критичних или групних радњи (модули / функције): Да минимизирате грешке због импровизације или непажње.

09. - Пружање корисничких интерфејса (усер-фриендли): Терминал са менијем и бојама са Дијалог и Графички интерфејс за основне кориснике са Зенити, Гкмессаге. А ако је могуће, користите подршку идентификатора звучних упозорења о препознатљивим догађајима у складу са звуком. Трудио сам се што је више могуће да ваш Скрипт може радити у оба смера само омогућавањем и онемогућавањем опција / модула / функција.

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.
# ======================================================= #
 

У будућим публикацијама детаљније ћемо проширити сваку од горе описаних пракси.

А ако знате неке друге добре праксе, своје или других, не устручавајте се да их коментаришете како бисте направили потпунији сажетак!

До следећег објављивања ове нове серије.


Оставите свој коментар

Ваша емаил адреса неће бити објављена. Обавезна поља су означена са *

*

*

  1. За податке одговоран: Мигуел Ангел Гатон
  2. Сврха података: Контрола нежељене поште, управљање коментарима.
  3. Легитимација: Ваш пристанак
  4. Комуникација података: Подаци се неће преносити трећим лицима, осим по законској обавези.
  5. Похрана података: База података коју хостује Оццентус Нетворкс (ЕУ)
  6. Права: У било ком тренутку можете ограничити, опоравити и избрисати своје податке.

  1.   Мак ј родригуез дијо

    Само један детаљ, то је "схебанг" 😛
    врло добар пост, дугорочне добре праксе увек помажу у стандардизацији.

  2.   Онај који је прошао овде дијо

    Басх није подразумевана љуска у свим дистрибуцијама, па стога симболична веза / бин / сх не показује увек басх. На пример, у Дебиану (а претпостављам стога и у Убунту-у):
    $ лс -л / бин / сх
    лрвкрвкрвк 1 роот роот 4 аза 8 2014 / бин / сх -> цртица
    Према томе, задата љуска на Дебиану је цртица. Погледајте овде: https://wiki.debian.org/Shell

  3.   безимени дијо

    Као савет за познавање шкољке у употреби:

    ехо $ 0
    ецхо $ СХЕЛЛ
    енв | греп СХЕЛЛ

  4.   Инг. Јосе Алберт дијо

    Заиста сте у праву! Тестирао сам на ДЕБИАН 9 и Кали Линук 2.0 и то је истина! води вас у црту. Још више препорука: #! / Уср / бин / енв басх ако желите да користите Схелл.

    И потпуно сте у праву да је то схебанг, али на неким веб локацијама (техничка литература) то називају схабанг или другим речима, отуда и моја забуна. Пример:

    У рачунарству, схебанг је низ знакова који се састоји од знака са бројем знакова и знака узвика (#!) На почетку скрипте. Такође се назива сха-банг, [1] [2] хасхбанг, [3] [4] поунд-банг, [5] или хасх-плинг

    Из: https://en.wikipedia.org/wiki/Shebang_%28Unix%29

    И Поглавље 2. Почетак са Сха-Банг-ом
    Из: http://www.tldp.org/LDP/abs/html/sha-bang.html

  5.   Инг. Јосе Алберт дијо

    Такође: основно име $ 0