Shkrime të dobishme shell në çdo program

Përplas Isshtë një program kompjuterik, funksioni i të cilit është të interpretojë urdhërat. Bazohet në guaskën e Unix dhe ishte shkruar për projektin GNU duke qenë predha e paracaktuar në shumicën e shpërndarjeve të GNU / Linux. Emri i tij është akronim për Bourne-Përsëri Shell (një guaskë tjetër), duke bërë një lojë me fjalët (rilindur do të thotë rilindje) rreth Guaskë Bourne (sh), i cili ishte një nga interpretuesit e parë të mëdhenj të Unix.

Sot do të tregojmë disa skenare shell që mund të jenë shumë të dobishme për zhvilluesit. Shumica punojnë në çdo predhë Unix, megjithëse disa kërkojnë që ato të ekzekutohen në mënyrë specifike nga Përplas.

Parandaloni përdoruesit jo të privilegjuar nga ekzekutimi i skenarit

Disa skripte kryejnë detyra administrative, kështu që mund të dëshirojmë që vetëm përdoruesi rrënjor të ekzekutojë skriptin. Në atë rast mund të përdorim diçka si kjo:

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

Lejoni ekzekutimin e skriptit vetëm për një përdorues të veçantë

Ngjashëm me kodin e mësipërm, mund të dëshirojmë që vetëm një përdorues specifik të ekzekutojë skriptin. Ne e bëjmë atë kështu:

#!/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

Verifikoni që një shërbim / proces po ekzekutohet

Nëse duam të dimë nëse ka procese të ndonjë shërbimi ose programi që ekzekutohet, ne mund ta përdorim këtë skenar (në këtë rast verifikon që demoni i Apache eshte duke vrapuar):

#!/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

Krijoni një skedar bllokimi

Ndonjëherë duhet të sigurohemi që skenari të mos ekzekutohet dy ose më shumë herë njëkohësisht. Për këtë mund të përdorim skedarët e kyçjes. Ky është një version i thjeshtë i një skenari që na lejon ta bëjmë këtë:

#!/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

Në këtë rast, verifikohet që skedari çfarëdo që të jetë ekzistojnë Në rast se ekziston, skenari NUK i ekzekuton detyrat e tij. Nëse nuk ekziston, krijon skedarin, ekzekuton detyrat që duhen për të ekzekutuar dhe e heq atë. Por, kjo nuk është plotësisht e besueshme. Çfarë do të ndodhte nëse ndërsa skenari ynë po ekzekutohet ai mbyllet papritmas?

Në atë rast, skedari i bllokimit nuk do të fshihet, dhe për këtë arsye nuk do të na lejojë të ekzekutojmë përsëri skenarin. Për të mbuluar ato raste, mund të përdorim komandën kurth që na lejon të ekzekutojmë komanda në rast se skenari ynë përfundon papritur. Ky është një version më i përparuar që gjithashtu kursen PID-in e skenarit që e ekzekuton atë brenda skedarit të kyçjes:

#!/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

Le ta kuptojmë komandën pak më mirë kurth. Sintaksa e saj në thelb është kjo: sinjali i komandës kurth [sinjali…]; ku sinjali është sinjali i përfundimit që dëshironi të kapni. Nëse dëshironi të shihni një listë të sinjaleve të disponueshme mund të ekzekutoni komandën kill -l. Për rastin e mëparshëm, janë përdorur sinjalet INT (kap përfundimin e prodhuar nga një Ctrl + c), AFATI (përfundimi i prodhuar nga komanda e vrasjes) dhe EXIT (përfundimi normal i një skenari, ose sepse nuk ka më rreshta për t'u ekzekutuar ose sepse i del komanda e daljes).

Menuja e opsioneve

Për të bërë një menu ku lejojmë përdoruesin të zgjedhë një seri opsionesh mund të përdorim skemën e mëposhtme:

#!/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

Kërkoni konfirmim para se të ekzekutoni një skenar

Ndonjëherë është e dobishme që përdoruesi të konfirmojë ekzekutimin e një grupi deklaratash, domethënë mesazhin tipik që i kërkon përdoruesit të shkruajë po ose jo. Ne mund ta bëjmë këtë si kjo:

#!/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"

Fundi i artikullit. Thjesht shkëlqyeshëm

Redakto: Duhet të keni kujdes me hapësirat dhe skedat, të cilat për ndonjë arsye nuk po dalin


Lini komentin tuaj

Adresa juaj e emailit nuk do të publikohet. Fusha e kërkuar janë shënuar me *

*

*

  1. Përgjegjës për të dhënat: Miguel Ángel Gatón
  2. Qëllimi i të dhënave: Kontrolloni SPAM, menaxhimin e komenteve.
  3. Legjitimimi: Pëlqimi juaj
  4. Komunikimi i të dhënave: Të dhënat nuk do t'u komunikohen palëve të treta përveç me detyrim ligjor.
  5. Ruajtja e të dhënave: Baza e të dhënave e organizuar nga Occentus Networks (BE)
  6. Të drejtat: Në çdo kohë mund të kufizoni, rikuperoni dhe fshini informacionin tuaj.

  1.   KZKG ^ Gaara dijo

    Qij ata janë të shkëlqyeshëm O_O ... kjo do të ndihmojë shumë për gjërat e mia të vogla që bëj në Bash

  2.   ren434 dijo

    Skenarët janë super! Çfarë kontributi të shkëlqyeshëm seriozisht, vetëm atë që po kërkoja.

    PS: Forumi është prishur.

    1.    KZKG ^ Gaara dijo

      Po, serveri ku është montuar forumi është jashtë linje, nuk ka ide pse ... i kemi shkruar një email mikut që kujdeset për të, për të parë se çfarë na përgjigjet

      Përshëndetje.

  3.   ren434 dijo

    Oh mirë, le të shpresojmë se nuk është asgjë serioze.

  4.   sallaks dijo

    A përfshihej edhe ai "byk" në Code Ninja? XD

  5.   targoni dijo

    Më pëlqen fuqia e bash dhe ata më thanë se për çfarë ishte gjuha C because, sepse në skriptin shell ka shumë komanda të njohura.

  6.   Christopher dijo

    Faleminderit, më pëlqeu shumë

  7.   engjëllore dijo

    Vlerësimi i parametrave të hyrjes është shumë i dobishëm. Unë nuk dija si të bëja menutë =)

  8.   Hyuuga_Neji dijo

    Brilliant. tani unë mund t'i jap ca "fortësi" skenarit tim churros lol

  9.   korb dijo

    Një kënaqësi e madhe për të parë se si puna jonë modeste në CodeNinja i shërben komunitetit ndërkombëtar të linux

    1.    KZKG ^ Gaara dijo

      Sigurisht! 🙂
      Gjithçka është për të ndihmuar dhe kontribuar së bashku, dhe jo për të krijuar flakë, apo jo? 😉

  10.   diego dijo

    Skenari i procesit që po ekzekutohet mund të përmirësohet pak duke vendosur mundësinë për të zgjedhur procesin për të cilin dëshironi të dini, do të dukej diçka e tillë:

    #! / bin / bash
    jehona "Zgjidhni një shërbim"
    lexoni SHVRBIMIN
    # SERVICE = 'mysql'
    nëse ps sëpatë | grep -v grep | grep $ SERVICE> / dev / null
    pastaj
    echo "Shërbimi $ SERVICE po ekzekutohet"
    tjetër
    echo "Shërbimi $ SERVICE është ndalur"

  11.   Jua Carlos C. dijo

    Unë jam shumë praktik me skriptet tuaja, por unë jam duke kërkuar për një skenar të veçantë për të zgjidhur një problem që kam, i cili është si më poshtë: Ne kemi një server të aplikimit në kompani që përdoruesit e brendshëm të hyrë në atë me telnet, dhe ekzekutuar një aplikacion të veçantë që është i kufizuar Për licencat, përdoruesit abuzojnë dhe hapin më shumë se një telnet për të marrë mbi 2 ose më shumë licenca, kështu që skenari që kam menduar është që me ndonjë metodë, kontrolloni se cili proces i telnet është joaktiv për më shumë se 2 orë dhe prandaj dërgoni një vrasje në atë pid, mund të më ndihmoni?

    1.    diego dijo

      Instaloni programin e mëposhtëm

      aftësia instaloni autolog

      Dhe skedarin e konfigurimit që keni në /etc/autolog.conf

  12.   Tito dijo

    E mrekullueshme, shok, mund të të bëj një pyetje, më duhet një skenar shell me opsione dhe e kam bazuar në tënden dhe funksionon shumë mirë, por një nga opsionet duhet të dërgojë email (duke përdorur postifix), ai kërkon temë, tekst dhe marrësit në ekran dhe çfarë dërgojnë dhe kontrollojnë nëse është dërguar në mënyrë korrekte, me postënq mund të shoh radhën dhe të shoh nëse është dërguar, por si mund të dërgoj email me komandë duke përdorur variablat që morën temën, tekstin dhe marrësit ? 🙁

    1.    KZKG ^ Gaara dijo

      Escríbeme a mi email (kzkggaara[at]desdelinux[dot]net) para hablar con más calma, te ayudo con mucho gusto 🙂

      1.    Tito dijo

        Faleminderit mik, ke kaluar!

  13.   Fer dijo

    Pershendetje mire.
    Unë i kam hasur në këto shembuj të shkëlqyeshëm pikërisht kur më duhej një menu.
    Unë kam filluar ta bëj atë dhe nuk mund ta vë në punë (në hapat e mëparshëm).
    Unë kam 247 elementë, të cilët i referohen fushave të ndryshme territoriale.
    Ajo që më duhet është një menu nga të zgjedh vendin:
    #! / bin / bash
    qartë
    derisa:
    do
    jehonë »Zgjidhni vendin për të provuar»
    jehonë «1. Afganistan (AF) »
    jehonë «2. Shqipëri (AL) »
    jehonë «3. Gjermani (DE) »
    jehonë «5. Angola (AO) »
    jehonë «6. Anguilla (AI) »
    .. dhe vazhdon deri në vitin 247

    echo -n "Zgjidh një opsion [1 - 247]"
    opsioni i leximit
    rasti $ opsioni në
    1) jehonë "kjo je ti:"; whoami ;;
    2) jehonë "e ke këtë"; df ;;
    3) jehonë ""; uname -r ;;
    4) jehonë "bye"; dalja 1 ;;
    5) jehonë "kjo je ti:"; whoami ;;
    6) jehonë "kjo je ti:"; whoami ;;
    … Dhe vazhdon deri në vitin 247
    *) echo «$ opc është një opsion i pavlefshëm. Soshtë kaq e vështirë? ";
    echo "Shtyp një tast për të vazhduar ...";
    lexo foo ;;
    se C
    e bërë

    Sjellja është si më poshtë:
    Çdo opsion përveç 4, i cili është rezultati, fshin numrin e futur dhe pret një numër të ri.
    Hyrja 4 del.
    Nëse vendos kodin e 4 në ndonjë rresht tjetër (le të themi 150) del në mënyrë të barabartë pa probleme.
    Unë gjithashtu jam përpjekur ta vendos kodin në këtë format:
    151) jehonë "ky je:";
    Kush jam unë ;;
    me të njëjtin rezultat.
    Pyes veten nëse ka mundësi më të mira për një menu kaq të gjatë dhe natyrisht edhe unë jam duke gabuar.
    Një ndihmë do të vlerësohej shumë, faleminderit

  14.   Vetëm Raul dijo

    shkëlqyeshëm ... Unë mendoj se është shumë mirë të futesh në guaskë

    falënderim

  15.   Kornizat dijo

    shkëlqyeshëm, hej si mund ta bëj bash-in tim të punojë me një skedar
    shembull:

    upload.sh fotodelavecina.jpg

    duke menduar se skenari im bash "upload.sh" ka informacionin e hyrjes në ftp tim

    pershendetje dhe faleminderit

  16.   netzulo ntx dijo

    Djalë i mirë, shumë faleminderit për të gjitha skenaret, unë kam krijuar një server CentOS dhe nuk e dini sa mirë më vijnë këto shabllone, ju lutem më kontaktoni me email. Unë dua të të propozoj diçka

  17.   gabriel balderramos dijo

    Pse përdorni read foo kur bëni një menu? përgjigje të shpejta më duhen