Korisne skripte ljuske u bilo kojem programu

Tresnuti To je računalni program čija je funkcija tumačenje naloga. Temelji se na ljusci Unix i napisan je za projekt GNU kao zadana ljuska u većini distribucija GNU / Linux. Njegovo ime je kratica za Školjka Bourne-Again (još jedna školjka je propala), praveći igru ​​riječi (ponovno rođenje znači ponovno rođenje) na 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ši Tresnuti.

Spriječite neprivilegiranim korisnicima pokretanje skripte

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

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

Omogući 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 / postupak 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 od 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 se moramo pobrinuti da se skripta ne pokrene dva ili više puta istovremeno. Za to se možemo poslužiti datotekama zaključavanja. Ovo je jednostavna verzija skripte koja nam omogućuje 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 je slučaju potvrđeno da datoteka ma što.brava 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 posve pouzdano. Što bi se dogodilo ako se naša skripta naglo zatvori dok je pokrenuta?

U tom slučaju datoteka zaključavanja neće se izbrisati i stoga nam neće dopustiti ponovno pokretanje skripte. Da bismo pokrili te slučajeve, mogli bismo se poslužiti naredbom trap koja nam omogućuje izvršavanje naredbi u slučaju da naša skripta neočekivano završi. Ovo je naprednija verzija koja također sprema PID skripte koja je 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 naredbe trap [signal ...]; gdje je signal signal raskida koji želite uhvatiti. Ako želite vidjeti popis dostupnih signala, možete pokrenuti naredbu kill -l. Za prethodni slučaj korišteni su INT signali (snima završetak proizveden Ctrl + c), POJAM (raskid proizveden naredbom kill) i IZLAZ (normalno prekidanje skripte, bilo zato što više nema redaka za pokretanje ili zato što nailazi na naredbu exit).

Izbornik opcija

Da bismo napravili izbornik u kojem dopuštamo korisniku da odabere niz opcija, možemo se poslužiti sljedećom shemom:

#!/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šavanje serije izjava, to jest tipične poruke koja od korisnika traži da upiše da ili ne. To možemo 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 ¬¬


22 komentara, ostavi svoj

Ostavite svoj komentar

Vaša email adresa neće biti objavljen. Obavezna polja su označena s *

*

*

  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 obvezi.
  5. Pohrana podataka: Baza podataka koju hostira Occentus Networks (EU)
  6. Prava: U bilo kojem trenutku možete ograničiti, oporaviti i izbrisati svoje podatke.

  1.   KZKG ^ Gaara dijo

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

  2.   ren434 dijo

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

    PS: Forum je pao.

    1.    KZKG ^ Gaara dijo

      Da, poslužitelj na kojem je postavljen forum je izvan mreže, nemamo pojma zašto ... napisali smo e-mail prijatelju koji je za to zadužen da vidimo što nam odgovara

      Pozdrav.

  3.   ren434 dijo

    Ma dobro, nadamo se da nije ništa ozbiljno.

  4.   lijeve ruke dijo

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

  5.   taregon dijo

    Sviđa mi se snaga basha 😉 i rekli su mi čemu služi jezik C ..., jer u skripti ljuske postoje mnoge poznate naredbe.

  6.   Christopher dijo

    Hvala, stvarno mi se svidjelo

  7.   anđeoska oštrica dijo

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

  8.   Hyuuga_Neji dijo

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

  9.   gavran dijo

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

    1.    KZKG ^ Gaara dijo

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

  10.   Diego dijo

    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
    tada
    echo "Usluga $ SERVICE je pokrenuta"
    drugo
    echo "Usluga $ SERVICE je zaustavljena"

  11.   Juan Carlos C dijo

    Imam vrlo praktične skripte, ali tražim posebnu skriptu za rješavanje problema koji imam, a to je sljedeće: U tvrtki imamo poslužitelj aplikacija kojem interni korisnici pristupaju putem telneta i izvršavamo posebni program koji je ograničeno Za licence korisnici zloupotrebljavaju i otvaraju više od jednog teleneta da bi preuzeli 2 ili više licenci, pa je skripta za koju smatram da prema nekoj metodi provjeri koji je telnetov postupak neaktivan dulje od 2 sata i stoga mu pošalju ubojstvo pid, možeš li mi pomoći?

    1.    Diego dijo

      Instalirajte sljedeći program

      aptitude instalirati autolog

      A konfiguracijsku datoteku imate u /etc/autolog.conf

  12.   Tito dijo

    Izvrsno, prijatelju, mogu te pitati pitanje, trebam skriptu ljuske s opcijama i temeljio sam je na tvojoj i izvrsno funkcionira, ali jedna od opcija mora poslati 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 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

        Veliko hvala prijatelju, prošli ste!

  13.   Fer dijo

    Zdravo dobro.
    Naišao sam na ove izvrsne primjere baš kad mi je trebao jelovnik.
    Pokrenuo sam ga i ne mogu ga pokrenuti (u prethodnim koracima).
    Imam 247 elemenata koji se odnose na različita teritorijalna područja.
    Treba mi izbornik odakle odabrati državu:
    #! / bin / bash
    jasno
    dok:
    do
    echo »Odaberite zemlju za isprobavanje»
    odjek «1. Afganistan (AF) »
    odjek «2. Albanija (AL) »
    odjek «3. Njemačka (DE) »
    odjek «5. Angola (AO) »
    odjek «6. Angvila (AI) »
    .. i nastavlja se do 247

    echo -n "Odabir opcije [1 - 247]"
    opcija čitanja
    slučaj $ opcija u
    1) jeka "ovo što jesi:"; whoami ;;
    2) odjek "imate ovo"; df ;;
    3) odjek ""; uname -r ;;
    4) odjek "ćao"; izlaz 1 ;;
    5) jeka "ovo što jesi:"; whoami ;;
    6) jeka "ovo što jesi:"; whoami ;;
    ... I nastavlja se do 247
    *) echo «$ opc je nevaljana opcija. To je tako teško? ";
    echo "Pritisnite tipku za nastavak ...";
    read foo ;;
    ESAC
    obavlja

    Ponašanje je sljedeće:
    Bilo koja opcija osim 4, koja je izlaz, briše uneseni broj i čeka novi broj.
    Ulazak 4 izlazi.
    Ako kôd 4 stavim u bilo koji drugi redak (recimo 150), izlazi podjednako bez problema.
    Također sam pokušao staviti kôd u ovaj format:
    151) odjeknite "ovo ste:";
    tko sam ja ;;
    s istim rezultatom.
    Zanima me postoje li bolje mogućnosti za tako dugačak jelovnik i naravno da i ja radim krivo.
    Hvala vam, pomoć bi bila vrlo cijenjena

  14.   Samo Raul dijo

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

    hvala

  15.   okviri dijo

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

    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 dijo

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

  17.   gabrijel balderramos dijo

    Zašto prilikom izrade izbornika koristite read foo? brzi odgovori koji mi trebaju