Noderīgi čaulas skripti jebkurā programmā

Stipri iesist Tā ir datorprogramma, kuras funkcija ir interpretēt pasūtījumus. Tās pamatā ir Unix un tika rakstīts projektam GNU ir noklusējuma čaula lielākajā daļā GNU / Linux. Viņa vārds ir saīsinājums Bourne-Agin Shell (cits čaumalas burns), padarot vārdu spēli (dzimis atkal nozīmē atdzimšanu) uz Bourne apvalks (sh), kas bija viens no pirmajiem nozīmīgākajiem Unix tulkotājiem.

Šodien mēs parādīsim dažus čaulas skriptus, kas var būt ļoti noderīgi izstrādātājiem. Lielākā daļa strādā jebkurā apvalkā Unix, lai gan daži pieprasa, lai tos īpaši izpildītu Stipri iesist.

Neļaujiet privileģētiem lietotājiem palaist skriptu

Daži skripti veic administratīvos uzdevumus, tāpēc mēs varētu vēlēties, lai skriptu palaistu tikai saknes lietotājs. Tādā gadījumā mēs varam izmantot kaut ko līdzīgu šim:

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

Atļaut skripta izpildi tikai konkrētam lietotājam

Līdzīgi kā iepriekš minētajā kodā, mēs varētu vēlēties, lai skriptu palaistu tikai noteikts lietotājs. Mēs to darām tā:

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

Pārbaudiet, vai pakalpojums / process darbojas

Ja mēs vēlamies uzzināt, vai darbojas kādi pakalpojumi vai programmas, mēs varētu izmantot šo skriptu (šajā gadījumā tas pārbauda, ​​vai Apache skrien):

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

Izveidojiet bloķēšanas failu

Dažreiz mums jāpārliecinās, ka skripts nedarbojas divas vai vairākas reizes vienlaicīgi. Šim nolūkam mēs varam izmantot bloķēšanas failus. Šī ir vienkārša skripta versija, kas ļauj mums to izdarī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

Šajā gadījumā tiek pārbaudīts, vai fails neatkarīgi.bloķēt pastāvēt. Ja skripts pastāv, skripts NEVADA izpildīt savus uzdevumus. Ja tā nepastāv, tā izveido failu, izpilda nepieciešamos uzdevumus un noņem to. Bet tas nav pilnīgi uzticams. Kas notiktu, ja mūsu skripts darbojas, tas tiek pēkšņi aizvērts?

Tādā gadījumā bloķēšanas fails netiks izdzēsts, un tāpēc tas neļāva mums palaist skriptu vēlreiz. Lai aptvertu šos gadījumus, mēs varētu izmantot komandu trap, kas ļauj mums izpildīt komandas, ja mūsu skripts negaidīti beidzas. Šī ir uzlabota versija, kas arī saglabā skripta PID, kas to izpilda bloķēšanas failā:

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

Sapratīsim komandu nedaudz labāk lamatas. Tās sintakse būtībā ir šāda: slazdošanas komandas signāls [signāls ...]; kur signāls ir beigu signāls, kuru vēlaties noķert. Ja vēlaties redzēt pieejamo signālu sarakstu, varat palaist komandu kill -l. Iepriekšējam gadījumam tika izmantoti INT signāli (uztver Ctrl + c radīto izbeigšanu), JĒDZIENS (izbeigšanu rada kill komanda) un EXIT (skripta normāla pārtraukšana vai nu tāpēc, ka vairs nav palaistas rindas, vai tāpēc, ka tas nāk pāri izejas komandai).

Opciju izvēlne

Lai izveidotu izvēlni, kurā mēs ļaujam lietotājam izvēlēties virkni iespēju, mēs varam izmantot šādu shēmu:

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

Pirms skripta palaišanas vaicājiet apstiprinājumu

Dažreiz ir lietderīgi, ja lietotājs apstiprina paziņojumu sērijas izpildi, tas ir, tipisku ziņojumu, kurā lietotājam tiek lūgts ierakstīt jā vai nē. Mēs varam to izdarīt šādi:

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

Raksta beigas. Vienkārši lieliski 😀

Rediģēt: Jāuzmanās ar atstarpēm un cilnēm, kuras nez kāpēc neiznāk ¬¬


Raksta saturs atbilst mūsu principiem redakcijas ētika. Lai ziņotu par kļūdu, noklikšķiniet uz šeit.

22 komentāri, atstājiet savus

Atstājiet savu komentāru

Jūsu e-pasta adrese netiks publicēta. Obligātie lauki ir atzīmēti ar *

*

*

  1. Atbildīgais par datiem: Migels Ángels Gatóns
  2. Datu mērķis: SPAM kontrole, komentāru pārvaldība.
  3. Legitimācija: jūsu piekrišana
  4. Datu paziņošana: Dati netiks paziņoti trešām personām, izņemot juridiskus pienākumus.
  5. Datu glabāšana: datu bāze, ko mitina Occentus Networks (ES)
  6. Tiesības: jebkurā laikā varat ierobežot, atjaunot un dzēst savu informāciju.

  1.   KZKG ^ Gaara teica

    Jā, viņi ir lieliski O_O ... tas ļoti palīdzēs manām mazajām lietām, ko daru Bašā 😀

  2.   Ren434 teica

    Skripti ir super! Cik liels ir nopietns ieguldījums, tieši tas, ko es meklēju.

    PS: Forums nedarbojas.

    1.    KZKG ^ Gaara teica

      Jā, serveris, kurā ir uzstādīts forums, ir bezsaistē, nav ne jausmas, kāpēc ... mēs uzrakstījām e-pastu draugam, kurš par to rūpējas, lai redzētu, ko viņš mums atbild 🙂

      Sveicieni.

  3.   Ren434 teica

    Ak, labi, cerēsim, ka tas nav nekas nopietns.

  4.   nāve teica

    Vai šie "pelavas" bija iekļauti arī Code Ninja? XD

  5.   taregons teica

    Man patīk bash 😉 spēks, un viņi man teica, kam domāta C valoda ... labi, čaulas skriptā ir daudz pazīstamu komandu.

  6.   Christopher teica

    Paldies, man ļoti patika

  7.   eņģeļu asmens teica

    Ievades parametru validācija ir ļoti noderīga. Es nezināju, kā izveidot izvēlnes =)

  8.   Hyuuga_Neji teica

    Lieliski ... tagad es varu piešķirt zināmu "cietību" savam scenārijam churros lol

  9.   krauklis teica

    Liels prieks redzēt, kā mūsu pazemīgais darbs CodeNinja kalpo starptautiskajai linux kopienai

    1.    KZKG ^ Gaara teica

      Skaidrs! 🙂
      Viss ir palīdzēt un dot savu ieguldījumu kopā, nevis radīt liesmas, vai ne? 😉

  10.   Diego teica

    Darbojošo procesu skriptu varētu nedaudz uzlabot, ievietojot opciju izvēlēties procesu, par kuru vēlaties uzzināt, tas izskatās apmēram šādi:

    #! / bin / bash
    atbalss "Izvēlies pakalpojumu"
    izlasiet PAKALPOJUMU
    # SERVICE = 'mysql'
    ja ps cirvis | grep -v grep | grep $ SERVICE> / dev / null
    tAD
    atbalss "Pakalpojums $ SERVICE darbojas"
    cits
    atbalss "$ SERVICE pakalpojums ir apturēts"

  11.   Džua Karloss C teica

    Es ļoti praktiski izmantoju jūsu skriptus, bet es meklēju īpašu skriptu, lai atrisinātu man radušos problēmu, kas ir šāda: Mums uzņēmumā ir lietojumprogrammu serveris, kas iekšējiem lietotājiem piekļūst tam, izmantojot telnet, un izpilda īpašu lietojumprogrammu, kas ir ierobežota. Lai iegūtu licences, lietotāji ļaunprātīgi izmanto un atver vairāk nekā vienu telnet, lai pārņemtu 2 vai vairāk licences, tāpēc es domāju, ka skripts ir tāds, ka ar kādu metodi pārbaudiet, kurš telnetes process ir neaktīvs ilgāk par 2 stundām, un tāpēc nosūtiet tam slepkavību pid, vai tu varētu man palīdzēt?

    1.    Diego teica

      Instalējiet šo programmu

      piemērotības instalēšana autolog

      Un jums ir konfigurācijas fails mapē /etc/autolog.conf

  12.   Tito teica

    Lieliski, draugs, es varu tev uzdot jautājumu, man ir nepieciešams čaulas skripts ar opcijām, un es to esmu balstījis uz tavu, un tas darbojas lieliski, taču vienai no iespējām ir jānosūta e-pasts (izmantojot postifix), ekrānā tiek prasīts temats, teksts un adresāti un kas nosūtīt un pārbaudīt, vai tas ir nosūtīts pareizi, ar mailq es varu redzēt rindu un redzēt, vai tas ir nosūtīts, bet kā es varu nosūtīt e-pastus ar komandu, izmantojot mainīgos, kas saņēma tēmu, tekstu un adresātus? 🙁

    1.    KZKG ^ Gaara teica

      Uzrakstiet man uz savu e-pastu (kzkggaara [at] desdelinux [dot] net), lai es runātu mierīgāk, es jums ar prieku palīdzēšu 🙂

      1.    Tito teica

        Liels paldies draugs, tu izturēji!

  13.   Fer teica

    Sveiks, labs.
    Ar šiem izcilajiem piemēriem esmu saskāries tieši tad, kad man bija nepieciešama izvēlne.
    Es sāku to darīt, un es nevaru panākt, lai tas darbotos (iepriekšējās darbībās).
    Man ir 247 elementi, kas attiecas uz dažādām teritoriālajām jomām.
    Man ir nepieciešama izvēlne, no kuras izvēlēties valsti:
    #! / bin / bash
    skaidrs
    kamēr:
    do
    atbalss »Izvēlieties valsti, kuru izmēģināt»
    atbalss «1. Afganistāna (AF) »
    atbalss «2. Albānija (AL) »
    atbalss «3. Vācija (DE) »
    atbalss «5. Angola (AO) »
    atbalss «6. Angilja (AI) »
    .. un turpinās līdz 247. gadam

    echo -n "Atlasiet opciju [1 - 247]"
    lasīšanas opcija
    gadījums $ opcija
    1) atbalss "tas esi tu:"; whoami ;;
    2) atbalss "jums tas ir"; df ;;
    3) atbalss ""; uname -r ;;
    4) atbalss "atā"; izeja 1 ;;
    5) atbalss "tas esi tu:"; whoami ;;
    6) atbalss "tas esi tu:"; whoami ;;
    … Un turpinās līdz 247. gadam
    *) echo «$ opc ir nederīga opcija. Tas ir tik grūti? ";
    atbalss "Lai turpinātu, nospiediet taustiņu ...";
    lasīt foo ;;
    Esac
    darīts

    Uzvedība ir šāda:
    Jebkura opcija, izņemot 4, kas ir izvade, izdzēš ievadīto numuru un gaida jaunu numuru.
    Ievadot 4, iznāk.
    Ja es ievietoju kodu 4 jebkurā citā rindā (teiksim, 150), tas iznāk vienādi bez problēmām.
    Esmu arī mēģinājis kodu ievietot šādā formātā:
    151) atbalss "tas tu esi:";
    kas es esmu ;;
    ar tādu pašu rezultātu.
    Nez vai ir labākas iespējas tik garai ēdienkartei un, protams, es arī daru nepareizi.
    Palīdzība būtu ļoti pateicīga, paldies

  14.   Tikai Rauls teica

    izcili ... manuprāt, ir ļoti labi iekļūt čaulā

    paldies

  15.   Marcos teica

    lieliski, hei, kā es varu likt savam basam strādāt ar failu
    piemērs:

    upload.sh fotodelavecina.jpg

    domājot, ka manam bash skriptam "upload.sh" ir piekļuves informācija manam ftp

    sveicieni un paldies 😀

  16.   Netzulo ntx teica

    Labais cilvēks, liels paldies par visiem skriptiem, es esmu izveidojis CentOS serveri un jūs nezināt, cik labi šīs veidnes nāk pie manis, lūdzu, sazinieties ar mani pa e-pastu. Es gribu jums kaut ko ieteikt

  17.   Gabriels Balderramoss teica

    Kāpēc, veidojot izvēlni, jūs izmantojat read foo? ātras atbildes, kas man nepieciešamas