Mga kapaki-pakinabang na script ng shell sa anumang programa

Malakas na palo Ito ay isang programa sa computer na ang pagpapaandar ay upang bigyang kahulugan ang mga order. Ito ay batay sa shell ng Unix at isinulat para sa proyekto GNU pagiging default na shell sa karamihan ng mga pamamahagi ng GNU / Linux. Ang kanyang pangalan ay isang akronim para sa Bourne-Muli Shell (isa pang shell bourne), paggawa ng isang dula sa mga salita (ipinanganak na muli ay nangangahulugang muling pagsilang) sa Bourne shell (sh), na kung saan ay isa sa mga pangunahing pangunahing interpreter ng Unix.

Ngayon ay magpapakita kami ng ilang mga script ng shell na maaaring maging lubhang kapaki-pakinabang para sa mga developer. Karamihan sa mga nagtatrabaho sa anumang shell Unix, kahit na ang ilan ay nangangailangan na sila ay partikular na naisakatuparan ng Malakas na palo.

Pigilan ang mga hindi gumagamit na pribilehiyo mula sa pagpapatakbo ng script

Ang ilang mga script ay nagsasagawa ng mga pang-administratibong gawain kaya maaaring gusto lang namin ang root user na patakbuhin ang script. Sa kasong iyon maaari naming gamitin ang isang bagay tulad nito:

#!/bin/bash
if [[ $EUID -ne 0 ]]; then
echo "Este script debe ser ejecutado por el usuario root" 1>&2
exit 1
fi

Payagan lamang ang pagpapatupad ng script sa isang tukoy na gumagamit

Katulad ng code sa itaas, baka gusto lang namin ng isang tukoy na gumagamit na patakbuhin ang script. Ginagawa namin ito kaya:

#!/bin/bash
AUTHORIZED_USER="usuario_permitido"
if [ $USER != $AUTHORIZED_USER ]; then
echo "Este script debe ser ejecutado por el usuario $AUTHORIZED_USER" 1>&2
exit 1
fi

I-verify na tumatakbo ang isang serbisyo / proseso

Kung nais naming malaman kung may mga proseso ng anumang serbisyo o programa na tumatakbo maaari naming gamitin ang script na ito (sa kasong ito napatunayan nito na ang demonyo ng Apache ay tumatakbo):

#!/bin/sh
SERVICE='httpd'
if ps ax | grep -v grep | grep $SERVICE > /dev/null
then
echo "El servicio $SERVICE esta ejecutandose"
else
echo "Chanfle! El servicio $SERVICE esta detenido"
fi

Lumikha ng isang file ng lock

Minsan kailangan nating tiyakin na ang script ay hindi tumatakbo dalawa o higit pang beses nang sabay-sabay. Para sa mga ito maaari naming magamit ang mga file ng lock. Ito ay isang simpleng bersyon ng isang script na nagpapahintulot sa amin na gawin ito:

#!/bin/bash
lockfile=/var/lock/loquesea.lock
if [ ! -e $lockfile ]; then
touch $lockfile
echo "hago muchas cosas importantes aqui"
rm $lockfile
else
echo "ya hay otro proceso corriendo"
fi

Sa kasong ito, napatunayan na ang file kung anuman.lock mayroon Kung sakaling mayroon ito, HINDI isinasagawa ng script ang mga gawain nito. Kung wala ito, lumilikha ito ng file, pinapatakbo ang mga gawaing kinakailangan nito upang patakbuhin, at aalisin ito. Ngunit, hindi ito ganap na maaasahan. Ano ang mangyayari kung habang tumatakbo ang aming script ay sarado ito bigla?

Sa kasong iyon ang lock file ay hindi matatanggal, at samakatuwid ay hindi ito papayagan na muling patakbuhin ang script. Upang masakop ang mga kaso na iyon, maaari naming magamit ang utos ng bitag na nagbibigay-daan sa amin upang magpatupad ng mga utos kung sakaling hindi magtagpo ang pagtatapos ng aming script. Ito ay isang mas advanced na bersyon na nagse-save din ng PID ng script na nagpapatupad nito sa loob ng lock file:

#!/bin/bash
lockfile=/var/lock/loquesea.lock
if ( set -o noclobber; echo "$$" > "$lockfile") 2> /dev/null;
then
trap 'rm -f "$lockfile"; exit $?' INT TERM EXIT
echo "hago muchas cosas aqui tranquilamente"
rm -f "$lockfile"
trap - INT TERM EXIT
else
echo "Ya hay otro proceso de este script ejecutandose"
echo "corriendo con el PID: $(cat $lockfile)"
fi

Unawain natin nang kaunti ang utos bitag. Ang syntax nito ay karaniwang ito: signal ng bitag ng utos [signal…]; kung saan ang signal ay ang termination signal na nais mong mahuli. Kung nais mong makita ang isang listahan ng mga magagamit na signal maaari mong patakbuhin ang command kill -l. Para sa nakaraang kaso, ginamit ang mga signal ng INT (kinukuha ang pagwawakas na ginawa ng isang Ctrl + c), MGA TUNTUNIN (pagwawakas na ginawa ng kill command) at EXIT (normal na pagwawakas ng isang script, alinman dahil wala nang mga linya na naisakatuparan o dahil dumating ito sa exit command).

Menu ng mga pagpipilian

Upang makagawa ng isang menu kung saan pinapayagan namin ang gumagamit na pumili ng isang serye ng mga pagpipilian na maaari naming magamit ang sumusunod na pamamaraan:

#!/bin/bash
clear
while :
do
echo " Escoja una opcion "
echo "1. quien soy?"
echo "2. cuanto espacio tengo"
echo "3. que es esto?"
echo "4. Salir"
echo -n "Seleccione una opcion [1 - 4]"
read opcion
case $opcion in
1) echo "este eres:";
whoami;;
2) echo "tienes esto";
df;;
3) uname -r;;
4) echo "chao";
exit 1;;
*) echo "$opc es una opcion invalida. Es tan dificil?";
echo "Presiona una tecla para continuar...";
read foo;;
esac
done

Humingi ng kumpirmasyon bago magpatakbo ng isang script

Minsan kapaki-pakinabang na kumpirmahin ng gumagamit ang pagpapatupad ng isang pangkat ng mga pahayag, iyon ay, ang karaniwang mensahe na humihiling sa gumagamit na mag-type ng oo o hindi. Magagawa natin ito tulad nito:

#!/bin/bash
while true; do
echo
read -p "esta seguro de hacer lo que sea que vaya a hacer " yn
case $yn in
yes ) break;;
no ) exit;;
* ) echo "por favor responda yes o no";;
esac
done
echo "si se ejecuta esto es que aceptaste"

Pagtatapos ng artikulo. Simple lang 😀

I-edit: Kailangan mong mag-ingat sa mga puwang at tab, na sa anumang kadahilanan ay hindi lalabas ¬¬


Iwanan ang iyong puna

Ang iyong email address ay hindi nai-publish. Mga kinakailangang patlang ay minarkahan ng *

*

*

  1. Responsable para sa data: Miguel Ángel Gatón
  2. Layunin ng data: Kontrolin ang SPAM, pamamahala ng komento.
  3. Legitimation: Ang iyong pahintulot
  4. Komunikasyon ng data: Ang data ay hindi maiparating sa mga third party maliban sa ligal na obligasyon.
  5. Imbakan ng data: Ang database na naka-host ng Occentus Networks (EU)
  6. Mga Karapatan: Sa anumang oras maaari mong limitahan, mabawi at tanggalin ang iyong impormasyon.

  1.   KZKG ^ Gaara dijo

    Fuck they are great O_O ... malaki ang maitutulong nito sa aking maliliit na bagay na ginagawa ko sa Bash 😀

  2.   ren434 dijo

    Napakahusay ng mga script! Isang mabuting kontribusyon nang seryoso, kung ano ang hinahanap ko.

    PS: Natapos ang forum.

    1.    KZKG ^ Gaara dijo

      Oo, offline ang server kung saan naka-mount ang forum, walang ideya kung bakit ... nagsulat kami ng isang email sa kaibigan na nag-aalaga doon, upang makita kung ano ang tugon niya sa amin 🙂

      Pagbati.

  3.   ren434 dijo

    Oh well, sana walang seryoso ito.

  4.   kaliwang kamay dijo

    Ang "chaff" na iyon ay kasama rin sa Code Ninja? XD

  5.   taregon dijo

    Gusto ko ang lakas ng bash 😉 at sinabi nila sa akin kung para saan ang wikang C ... mabuti, sa shell script maraming mga pamilyar na utos.

  6.   Christopher dijo

    Salamat, nagustuhan ko talaga

  7.   talim ng anghel dijo

    Ang pagpapatunay ng mga parameter ng pag-input ay lubhang kapaki-pakinabang. Hindi ko alam kung paano gawin ang mga menu =)

  8.   Hyuuga_Neji dijo

    Malaki…. ngayon maaari na akong magbigay ng "tigas" sa aking script churros hehehe

  9.   makintab na itim dijo

    Isang malaking kasiyahan na makita kung paano ang aming mapagpakumbabang trabaho sa CodeNinja ay nagsisilbi sa internasyonal na linux na pamayanan

    1.    KZKG ^ Gaara dijo

      Malinaw! 🙂
      Ang lahat ay makakatulong at mag-ambag ng sama-sama, at hindi upang lumikha ng apoy, tama? 😉

  10.   diego dijo

    Ang proseso ng script na tumatakbo ay maaaring mapabuti nang kaunti sa pamamagitan ng paglalagay ng pagpipilian upang piliin ang proseso na nais mong malaman, magmukhang ganito:

    #! / bin / bash
    echo "Pumili ng serbisyo"
    basahin ang SERVICE
    # SERVICE = 'MySQL'
    kung ps palakol | grep -v grep | grep $ SERVICE> / dev / null
    pagkatapos
    echo "$ SERVICE service is running"
    iba
    echo "Ang serbisyo ng $ SERVICE ay natigil"

  11.   Juan Carlos C dijo

    Napaka praktikal ko sa iyong mga script, ngunit naghahanap ako ng isang espesyal na script upang malutas ang isang problema na mayroon ako, na kung saan ay ang sumusunod: Mayroon kaming isang server ng application sa Kumpanya na na-access ito ng mga panloob na gumagamit sa pamamagitan ng telnet, at nagpapatupad ng isang espesyal na application limitado iyon Para sa mga lisensya, pag-abuso ng mga gumagamit at buksan ang higit sa isang telnet upang kumuha ng higit sa 2 o higit pang mga lisensya, kung gayon ang script na naisip ko ay sa pamamagitan ng ilang pamamaraan, suriin kung aling proseso ng telnet ang hindi aktibo nang higit sa 2 oras at samakatuwid ay nagpapadala sa pid na iyon, maaari mo ba akong tulungan?

    1.    diego dijo

      I-install ang sumusunod na programa

      aptitude install autolog

      At ang file ng pagsasaayos na mayroon ka sa /etc/autolog.conf

  12.   Tito dijo

    Mahusay, kaibigan, maaari akong magtanong sa iyo ng isang katanungan, kailangan ko ng isang shell script na may mga pagpipilian at ibinase ko ito sa iyo at mahusay itong gumana, ngunit ang isa sa mga pagpipilian ay kailangang magpadala ng mga email (gamit ang postifix), humihiling ito para sa paksa, teksto at mga tatanggap sa screen at kung ano ang nagpapadala at suriin na naipadala ito nang tama, gamit ang mailq makikita ko ang pila at makita kung naipadala ito, ngunit paano ko ipapadala ang mga email sa pamamagitan ng utos gamit ang mga variable na nakatanggap ng paksa, teksto at mga tatanggap ? 🙁

    1.    KZKG ^ Gaara dijo

      Sumulat sa aking email (kzkggaara[at]desdelinux[dot]net) para makapagsalita nang mas mahinahon, ikalulugod kong tulungan ka :)

      1.    Tito dijo

        Mahusay salamat kaibigan, nakapasa ka!

  13.   Fer dijo

    Hello buti naman
    Natagpuan ko ang mga mahusay na mga halimbawa lamang kapag kailangan ko ng isang menu.
    Sinimulan ko ito at hindi ko ito magawang gumana (sa mga nakaraang hakbang).
    Mayroon akong 247 na mga elemento, na tumutukoy sa iba't ibang mga teritoryal na domain.
    Ang kailangan ko ay isang menu mula sa kung saan pipiliin ang bansa:
    #! / bin / bash
    limasin
    habang:
    do
    echo »Piliin ang bansa upang subukan»
    echo «1. Afghanistan (AF) »
    echo «2. Albania (AL) »
    echo «3. Alemanya (DE) »
    echo «5. Angola (AO) »
    echo «6. Anguilla (AI) »
    .. at nagpapatuloy hanggang 247

    echo -n "Pumili ng isang pagpipilian [1 - 247]"
    basahin ang pagpipilian
    case $ pagpipilian sa
    1) echo "this is you:"; whoami ;;
    2) echo "mayroon ka nito"; df ;;
    3) echo ""; hindi pa gaanong ;;
    4) echo "bye"; exit 1 ;;
    5) echo "this is you:"; whoami ;;
    6) echo "this is you:"; whoami ;;
    … At nagpapatuloy hanggang 247
    *) ang echo «$ opc ay isang hindi wastong pagpipilian. Napakahirap nito? ";
    echo "Pindutin ang isang susi upang magpatuloy ...";
    basahin ang foo ;;
    na C
    tapos

    Ang pag-uugali ay ang mga sumusunod:
    Anumang pagpipilian maliban sa 4, na kung saan ay ang output, tinatanggal ang ipinasok na numero at naghihintay para sa isang bagong numero.
    Ang pagpasok ng 4 ay lalabas.
    Kung inilagay ko ang code ng 4 sa anumang iba pang linya (sabihin nating 150) lumabas ito nang pantay nang walang mga problema.
    Sinubukan ko ring ilagay ang code sa format na ito:
    151) echo "this you are:";
    sino ako ;;
    na may parehong resulta.
    Nagtataka ako kung may mga mas mahusay na pagpipilian para sa isang mahabang menu at syempre nagkakamali din ako.
    Ang isang tulong ay magiging lubos na pinahahalagahan, salamat

  14.   Si Raul lang dijo

    mahusay ... Sa palagay ko napakahusay na makapasok sa shell

    salamat

  15.   Marcos dijo

    mahusay, hey paano ko magagawa ang aking bash gumana sa isang file
    Halimbawa:

    upload.sh fotodelavecina.jpg

    iniisip na ang aking bash script na "upload.sh" ay may impormasyon sa pag-access sa aking ftp

    pagbati at salamat 😀

  16.   netzulo ntx dijo

    Mabuting tao, maraming salamat sa lahat ng mga script, nag-set up ako ng isang server ng CentOS at hindi mo alam kung gaano kahusay dumating ang mga template na ito sa akin, mangyaring makipag-ugnay sa akin sa pamamagitan ng email. May gusto akong ipanukala sa iyo

  17.   gabriel balderramos dijo

    Bakit mo ginagamit ang read foo kapag gumagawa ng isang menu? mabilis na sagot na kailangan ko