Korisne ljuske skripte u bilo kojem programu

bash To je računalni program čija je funkcija tumačenje naloga. Zasnovan je na ljusci od Unix i napisan je za projekat GNU je zadana ljuska u većini distribucija GNU / Linux. Njegovo ime je skraćenica za Bourne-Again Shell (još jedna školjka je propala), igranje riječi (ponovno rođenje znači ponovno rođenje) o tome Bornova školjka (sh), koji je bio jedan od prvih glavnih tumača Unixa.

Danas ćemo pokazati neke skripte ljuske koje mogu biti vrlo korisne za programere. Većina radi u bilo kojoj ljusci Unix, iako neki zahtijevaju da ih posebno izvrše bash.

Spriječite neprivilegiranim korisnicima pokretanje skripte

Neke skripte izvršavaju administrativne zadatke pa bismo možda željeli da samo skriveni korisnik pokrene root korisnika. U tom slučaju možemo koristiti nešto poput ovog:

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

Omogućite izvršavanje skripte samo određenom korisniku

Slično gore navedenom kodu, možda bismo željeli da samo određeni korisnik pokrene skriptu. Činimo to 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

Provjerite je li usluga / proces pokrenut

Ako želimo znati postoje li procesi bilo koje usluge ili programa koji se izvode, mogli bismo koristiti ovu skriptu (u ovom slučaju potvrđuje da je demon apaš trči):

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

Stvorite datoteku zaključavanja

Ponekad moramo biti sigurni da se skripta ne pokreće dva ili više puta istovremeno. Za ovo možemo koristiti datoteke zaključavanja. Ovo je jednostavna verzija skripte koja nam omogućava da to učinimo:

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

U ovom slučaju, provjerava se da li je datoteka what.lock postoje. U slučaju da postoji, skripta NE izvršava svoje zadatke. Ako ne postoji, kreira datoteku, pokreće zadatke potrebne za pokretanje i uklanja je. Ali, ovo nije u potpunosti pouzdano. Što bi se dogodilo ako se naša skripta naglo zatvori dok je pokrenuta?

U tom slučaju datoteka zaključavanja neće biti izbrisana i stoga nam neće dopustiti da ponovo pokrenemo skriptu. Da bismo pokrili te slučajeve, mogli bismo se poslužiti naredbom trap koja nam omogućava izvršavanje naredbi u slučaju da naša skripta završi neočekivano. Ovo je naprednija verzija koja također sprema PID skripte koja ga izvršava u datoteci zaključavanja:

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

Shvatimo naredbu malo bolje Zamka. Njegova sintaksa je u osnovi sljedeća: signal trap naredbe [signal…]; gdje je signal signal raskida koji želite uhvatiti. Ako želite vidjeti listu dostupnih signala, možete pokrenuti naredbu kill -l. Za prethodni slučaj korišteni su INT signali (snima završetak proizveden Ctrl + c), TERMIN (završetak proizveden naredbom kill) i EXIT (normalno prekidanje skripte, bilo zato što više nema linija za pokretanje ili zato što nailazi na naredbu exit).

Izbornik opcija

Da bismo napravili meni u kojem dopuštamo korisniku da odabere niz opcija, možemo koristiti sljedeću shemu:

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

Zatražite potvrdu prije pokretanja skripte

Ponekad je korisno da korisnik potvrdi izvršenje serije naredbi, to jest tipične poruke koja od korisnika traži da unese da ili ne. Možemo to učiniti ovako:

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

Kraj članka. Jednostavno super 😀

Uredi: Morate biti oprezni s razmacima i karticama koji iz nekog razloga ne izlaze ¬¬


Ostavite komentar

Vaša e-mail adresa neće biti objavljena. Obavezna polja su označena sa *

*

*

  1. Za podatke odgovoran: Miguel Ángel Gatón
  2. Svrha podataka: Kontrola neželjene pošte, upravljanje komentarima.
  3. Legitimacija: Vaš pristanak
  4. Komunikacija podataka: Podaci se neće dostavljati trećim stranama, osim po zakonskoj obavezi.
  5. Pohrana podataka: Baza podataka koju hostuje Occentus Networks (EU)
  6. Prava: U bilo kojem trenutku možete ograničiti, oporaviti i izbrisati svoje podatke.

  1.   KZKG ^ Gaara rekao je

    Jebote, sjajni su O_O ... puno će pomoći mojim malim stvarima koje radim u Bashu 😀

  2.   ren434 rekao je

    Scenariji su super! Kakav sjajan doprinos ozbiljno, upravo ono što sam tražio.

    PS: Forum je pao.

    1.    KZKG ^ Gaara rekao je

      Da, server na koji je postavljen forum je van mreže, nemamo pojma zašto ... napisali smo e-mail prijatelju koji se brine o tome, da vidimo šta nam odgovara 🙂

      Pozdrav.

  3.   ren434 rekao je

    Ah, nadamo se da nije ništa ozbiljno.

  4.   ljevoruki rekao je

    Je li i ta "pljeva" bila uključena u Code Ninja? XD

  5.   taregon rekao je

    Sviđa mi se snaga basha 😉 i rekli su mi čemu služi jezik C ..., jer u shell skripti ima mnogo poznatih naredbi.

  6.   Christopher rekao je

    Hvala, stvarno mi se svidjelo

  7.   angel blade rekao je

    Provjera ulaznih parametara je vrlo korisna. Nisam znao kako napraviti jelovnike =)

  8.   Hyuuga_Neji rekao je

    Sjajno…. sada mogu dati malo "tvrdoće" svom scenariju churros hehehe

  9.   gavran rekao je

    Veliko mi je zadovoljstvo vidjeti kako naš skromni rad u CodeNinja služi međunarodnoj linux zajednici

    1.    KZKG ^ Gaara rekao je

      Naravno! 🙂
      Sve treba pomoći i doprinijeti zajedno, a ne stvarati plamen, zar ne? 😉

  10.   Diego rekao je

    Skripta procesa koja se izvodi mogla bi se malo poboljšati stavljanjem opcije za odabir procesa o kojem želite znati, izgledao bi otprilike ovako:

    #! / bin / bash
    odjek "Odaberite uslugu"
    pročitajte USLUGA
    # SERVICE = 'mysql'
    ako ps sjekira | grep -v grep | grep $ SERVICE> / dev / null
    onda
    echo "Usluga $ SERVICE je pokrenuta"
    drugo
    echo "Usluga $ SERVICE je zaustavljena"

  11.   Juan Carlos C rekao je

    Imam vrlo praktične skripte, ali tražim posebnu skriptu za rješavanje problema koji imam, a to je sljedeće: U kompaniji imamo poslužitelj aplikacija kojem interni korisnici pristupaju putem telneta i izvršavaju posebnu aplikaciju koja je ograničeno Za licence korisnici zloupotrebljavaju i otvaraju više od jednog telneta da bi preuzeli 2 ili više licenci, onda je skripta za koju smatram da nekom metodom provjeri koji je telnetov proces neaktivan duže od 2 sata i stoga pošalji ubojstvo na to pid, možeš li mi pomoći?

    1.    Diego rekao je

      Instalirajte sljedeći program

      aptitude instaliraj autolog

      I konfiguracijsku datoteku koju imate u /etc/autolog.conf

  12.   Tito rekao je

    Izvrsno, prijatelju, mogu te pitati pitanje, treba mi skripta ljuske s opcijama, a ja sam je zasnovao na tvojoj i izvrsno funkcionira, ali jedna od opcija mora slati e-poštu (pomoću postifixa), traži temu, tekst i primatelje na ekranu i ono što šalju i provjeravaju li je ispravno poslano, s mailq-om vidim red i vidim je li poslan, ali kako da pošaljem poštu naredbom koristeći varijable koje su primile temu, tekst i primatelje ? 🙁

    1.    KZKG ^ Gaara rekao je

      Pišite mi na e-mail (kzkggaara[at]desdelinux[dot]net) da govorite mirnije, rado cu vam pomoci :)

      1.    Tito rekao je

        Veliko hvala prijatelju, prošli ste!

  13.   Fer rekao je

    Zdravo dobro.
    Naišao sam na ove izvrsne primjere baš kad mi je trebao meni.
    Učinio sam to i ne mogu ga natjerati da radi (u prethodnim koracima).
    Imam 247 elemenata koji se odnose na različite teritorijalne domene.
    Ono što mi treba je meni odakle odabrati državu:
    #! / bin / bash
    jasno
    dok:
    do
    echo »Odaberite zemlju za isprobavanje»
    eho «1. Afganistan (AF) »
    eho «2. Albanija (AL) »
    eho «3. Njemačka (DE) »
    eho «5. Angola (AO) »
    eho «6. Angvila (AI) »
    .. i nastavlja se do 247

    echo -n "Odaberite opciju [1 - 247]"
    opcija čitanja
    case $ opcija u
    1) odjekni "ovo si:"; whoami ;;
    2) odjek "imate ovo"; df ;;
    3) odjek ""; uname -r ;;
    4) odjek "ćao"; izlaz 1 ;;
    5) odjekni "ovo si:"; whoami ;;
    6) odjekni "ovo si:"; whoami ;;
    ... I nastavlja se do 247
    *) echo «$ opc je nevaljana opcija. Tako je teško? ";
    echo "Pritisnite tipku za nastavak ...";
    read foo ;;
    da je C
    done

    Ponašanje je sljedeće:
    Bilo koja opcija osim 4, koja je izlaz, briše uneseni broj i čeka novi broj.
    Ulaz 4 izlazi.
    Ako kôd 4 stavim u bilo koji drugi redak (recimo 150), on će izaći jednako bez problema.
    Također sam pokušao staviti kod u ovaj format:
    151) odjeknite "ovo ste:";
    ko sam ja ;;
    sa istim rezultatom.
    Zanima me postoje li bolje opcije za tako dugačak meni, a naravno da i radim pogrešno.
    Hvala vam na pomoći

  14.   Samo Raul rekao je

    izvrsno ... Mislim da je vrlo dobro ući u školjku

    hvala

  15.   Marcos rekao je

    super, hej kako mogu natjerati moj bash da radi s datotekom
    primer:

    upload.sh fotodelavecina.jpg

    misleći da moja bash skripta "upload.sh" ima informacije o pristupu mom ftp-u

    pozdrav i hvala 😀

  16.   netzulo ntx rekao je

    Dobri čovječe, hvala vam puno na svim skriptama, postavio sam CentOS server i ne znate koliko mi dobro dolaze ovi predlošci, kontaktirajte me e-poštom. Želim da vam predložim nešto

  17.   gabriel balderramos rekao je

    Zašto prilikom izrade menija koristite read foo? brzi odgovori koji su mi potrebni