Uporabni skripti lupine v katerem koli programu

Bash Gre za računalniški program, katerega naloga je razlagati ukaze. Temelji na lupini Unix in je bil napisan za projekt GNU je privzeta lupina v večini distribucij GNU / Linux. Njegovo ime je kratica za Bourne – Spet Shell (še ena lupina), igranje besed (ponovno rojeno pomeni ponovno rojstvo) o njem Bournova lupina (sh), ki je bil eden prvih večjih tolmačev Unixa.

Danes bomo prikazali nekaj skriptov lupine, ki so lahko zelo koristni za razvijalce. Večina dela v kateri koli lupini Unix, čeprav nekateri zahtevajo, da jih posebej izvede Bash.

Neprivilegiranim uporabnikom preprečite izvajanje skripta

Nekateri skripti izvajajo skrbniške naloge, zato bi morda želeli, da skript zažene le korenski uporabnik. V tem primeru lahko uporabimo nekaj takega:

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

Dovoli izvajanje skripta samo določenemu uporabniku

Podobno kot zgornja koda, bi morda želeli, da skript zažene le določen uporabnik. To počnemo tako:

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

Preverite, ali se storitev / postopek izvaja

Če želimo vedeti, ali se izvaja katera koli storitev ali program, lahko uporabimo ta skript (v tem primeru preveri, da je demon Apache teče):

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

Ustvarite zaklepno datoteko

Včasih moramo zagotoviti, da se skript ne zažene dvakrat ali večkrat hkrati. Za to lahko uporabimo datoteke za zaklepanje. To je preprosta različica skripta, ki nam omogoča to:

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

V tem primeru je preverjeno, ali je datoteka karkoli.zakleni obstajajo. V primeru, da obstaja, skript NE izvaja svojih nalog. Če ne obstaja, ustvari datoteko, zažene naloge, ki jih mora zagnati, in jo odstrani. Vendar to ni povsem zanesljivo. Kaj bi se zgodilo, če bi bil med izvajanjem našega skripta nenadoma zaprt?

V tem primeru datoteka za zaklepanje ne bi bila izbrisana in nam zato ne bi omogočila ponovnega zagona skripta. Za pokrivanje teh primerov bi lahko uporabili ukaz trap, ki nam omogoča izvajanje ukazov v primeru, da se skript nepričakovano konča. To je naprednejša različica, ki shrani tudi PID skripta, ki ga izvede v zaklenjeni datoteki:

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

Razumejmo ukaz malo bolje Past. Njegova sintaksa je v bistvu taka: signal trap command [signal…]; kjer je signal zaključni signal, ki ga želite ujeti. Če želite videti seznam razpoložljivih signalov, lahko zaženete ukaz kill -l. V prejšnjem primeru so bili uporabljeni signali INT (zajema zaključek, ki ga povzroči Ctrl + c), TERMIN (zaključek, ki ga proizvede ukaz kill) in IZHOD (normalno zaključevanje skripta bodisi zato, ker ni več vrstic, ki bi jih lahko zagnali, bodisi ker pride do ukaza za izhod).

Meni možnosti

Za izdelavo menija, kjer uporabniku omogočimo, da izbere vrsto možnosti, lahko uporabimo naslednjo shemo:

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

Prosimo za potrditev, preden zaženete skript

Včasih je koristno, da uporabnik potrdi izvedbo serije izjav, to je tipičnega sporočila, ki od uporabnika zahteva, da vpiše da ali ne. To lahko storimo takole:

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

Konec članka. Preprosto super 😀

Uredi: Previdni morate biti s presledki in zavihki, ki iz nekega razloga ne izidejo ¬¬


Pustite svoj komentar

Vaš e-naslov ne bo objavljen. Obvezna polja so označena z *

*

*

  1. Za podatke odgovoren: Miguel Ángel Gatón
  2. Namen podatkov: Nadzor neželene pošte, upravljanje komentarjev.
  3. Legitimacija: Vaše soglasje
  4. Sporočanje podatkov: Podatki se ne bodo posredovali tretjim osebam, razen po zakonski obveznosti.
  5. Shranjevanje podatkov: Zbirka podatkov, ki jo gosti Occentus Networks (EU)
  6. Pravice: Kadar koli lahko omejite, obnovite in izbrišete svoje podatke.

  1.   KZKG ^ Gaara je dejal

    Hudiča, super so O_O ... veliko bo pomagalo mojim malenkostim, ki jih počnem v Bashu 😀

  2.   ren434 je dejal

    Scenariji so super! Kako velik prispevek resno, ravno tisto, kar sem iskal.

    PS: Forum ne deluje.

    1.    KZKG ^ Gaara je dejal

      Da, strežnik, na katerem je nameščen forum, je brez povezave, ne vem, zakaj ... prijatelju, ki skrbi za to, smo poslali e-poštno sporočilo, da vidimo, kaj nam odgovori 🙂

      Lep pozdrav.

  3.   ren434 je dejal

    Oh, upajmo, da ni nič resnega.

  4.   levičar je dejal

    Je bila tudi ta "plev" vključena v Code Ninja? XD

  5.   taregon je dejal

    Všeč mi je moč basha 😉 in povedali so mi, za kaj je jezik C ..., ker je v skriptu lupine veliko znanih ukazov.

  6.   Christopher je dejal

    Hvala, zelo mi je bilo všeč

  7.   angelsko rezilo je dejal

    Validacija vhodnih parametrov je zelo koristna. Nisem vedel, kako narediti menije =)

  8.   Hyuuga_Neji je dejal

    Super…. zdaj lahko dodam nekaj "trdote" svojemu scenariju churros lol

  9.   krokar je dejal

    V veliko veselje sem videti, kako naše skromno delo v CodeNinja služi mednarodni skupnosti linux

    1.    KZKG ^ Gaara je dejal

      Jasno! 🙂
      Vse je, da skupaj pomagamo in prispevamo, ne pa da ustvarjamo plamene, kajne? 😉

  10.   Diego je dejal

    Skript procesa, ki se izvaja, bi lahko nekoliko izboljšali tako, da bi izbrali postopek, o katerem želite vedeti, izgledal bi nekako takole:

    #! / Bin / bash
    echo "Izberite storitev"
    preberite STORITEV
    # SERVICE = 'mysql'
    če ps ax | grep -v grep | grep $ SERVICE> / dev / null
    POTEM
    echo "Storitev $ SERVICE se izvaja"
    ostalo
    echo "Storitev $ SERVICE je ustavljena"

  11.   Juan Carlos C je dejal

    Z vašimi skripti sem zelo praktičen, vendar iščem poseben skript za rešitev težave, ki jo imam, in sicer naslednjo: V podjetju imamo strežnik aplikacij, do katerega notranji uporabniki dostopajo prek telneta, in zaženemo posebno aplikacijo to je omejeno. Pri licencah uporabniki zlorabljajo in odpirajo več kot en telnet, da prevzamejo dve ali več licenc, zato se mi zdi skript, da po neki metodi preverite, kateri postopek telneta je neaktiven več kot 2 uri in zato pošljete umor temu pidu, mi lahko pomagaš?

    1.    Diego je dejal

      Namestite naslednji program

      aptitude namesti avtolog

      Konfiguracijsko datoteko imate v /etc/autolog.conf

  12.   Tito je dejal

    Odlično, prijatelj, lahko vas vprašam, rabim lupinski skript z možnostmi in ga temeljim na vašem in deluje odlično, toda ena od možnosti mora poslati e-pošto (z uporabo postifiksa), prosi za zadevo, besedilo in prejemniki na zaslonu ter kaj pošljejo in preverijo, ali je pravilno poslano, z mailq lahko vidim čakalno vrsto in vidim, ali je bila poslana, kako pa pošljem e-pošto z ukazom s pomočjo spremenljivk, ki so prejele zadevo, besedilo in prejemnike ? 🙁

    1.    KZKG ^ Gaara je dejal

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

      1.    Tito je dejal

        Lepa hvala prijatelju, opravil si!

  13.   Fer je dejal

    Pozdravljeni.
    Na te odlične primere sem naletel ravno takrat, ko sem potreboval jedilnik.
    Naredil sem in ne morem spraviti v delo (v prejšnjih korakih).
    Imam 247 elementov, ki se nanašajo na različna teritorialna področja.
    Potrebujem meni, kjer izbrati državo:
    #! / Bin / bash
    jasno
    medtem:
    do
    echo »Izberite državo, ki jo želite preizkusiti»
    odmev «1. Afganistan (AF) »
    odmev «2. Albanija (AL) »
    odmev «3. Nemčija (DE) »
    odmev «5. Angola (AO) »
    odmev «6. Angvila (AI) »
    .. in nadaljuje do 247

    echo -n "Izberite možnost [1 - 247]"
    možnost branja
    možnost $ case v
    1) echo "to si ti:"; whoami ;;
    2) echo "to imaš"; df ;;
    3) odmev ""; uname -r ;;
    4) odmev "adijo"; izhod 1 ;;
    5) echo "to si ti:"; whoami ;;
    6) echo "to si ti:"; whoami ;;
    … In nadaljuje do 247
    *) echo «$ opc je neveljavna možnost. Je tako težko? ";
    echo "Pritisnite tipko za nadaljevanje ...";
    beri foo ;;
    da je C
    opravljeno

    Obnašanje je naslednje:
    Katera koli možnost razen 4, ki je izhod, izbriše vneseno številko in počaka na novo številko.
    Vnese se 4.
    Če postavim kodo 4 v katero koli drugo vrstico (recimo 150), se brez težav pojavi enako.
    Kodo sem poskušal postaviti tudi v tej obliki:
    151) odmeva "to si:";
    kdo sem jaz ;;
    z enakim rezultatom.
    Zanima me, ali obstajajo boljše možnosti za tako dolg jedilnik in seveda tudi delam narobe.
    Pomoč bi bila zelo hvaležna, hvala

  14.   Samo Raul je dejal

    odlično ... mislim, da je zelo dobro priti v lupino

    hvala

  15.   marcos je dejal

    super hej, kako lahko naredim, da moj bash deluje z datoteko
    primer:

    upload.sh fotodelavecina.jpg

    mislim, da ima moj bash skript "upload.sh" informacije o dostopu do mojega ftp-a

    pozdrav in hvala 😀

  16.   netzulo ntx je dejal

    Dober človek, najlepša hvala za vse skripte, vzpostavil sem strežnik CentOS in ne veste, kako dobro mi te predloge pridejo, prosim, kontaktirajte me po e-pošti. Nekaj ​​bi ti rad predlagal

  17.   gabriel balderramos je dejal

    Zakaj pri izdelavi menija uporabljate read foo? hitri odgovori, ki jih potrebujem