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 ¬¬
Jebi ga, sjajni su O_O ... puno će pomoći mojim malim stvarima koje radim u Bashu 😀
Scenariji su super! Kakav sjajan doprinos ozbiljno, upravo ono što sam tražio.
PS: Forum je pao.
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.
Ma dobro, nadamo se da nije ništa ozbiljno.
Je li i ta "pljeva" bila uključena u Code Ninja? XD
Sviđa mi se snaga basha 😉 i rekli su mi čemu služi jezik C ..., jer u skripti ljuske postoje mnoge poznate naredbe.
Hvala, stvarno mi se svidjelo
Provjera ulaznih parametara je vrlo korisna. Nisam znao kako napraviti jelovnike =)
Sjajno…. sada mogu dati malo "tvrdoće" svom scenariju churros hehehe
Veliko mi je zadovoljstvo vidjeti kako naš skromni rad u CodeNinja služi međunarodnoj linux zajednici
Čisto! 🙂
Sve treba pomoći i doprinijeti zajedno, a ne stvarati plamen, zar ne? 😉
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"
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?
Instalirajte sljedeći program
aptitude instalirati autolog
A konfiguracijsku datoteku imate u /etc/autolog.conf
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 ? 🙁
Escríbeme a mi email (kzkggaara[at]desdelinux[dot]net) para hablar con más calma, te ayudo con mucho gusto 🙂
Veliko hvala prijatelju, prošli ste!
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
izvrsno ... Mislim da je vrlo dobro ući u školjku
hvala
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 😀
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
Zašto prilikom izrade izbornika koristite read foo? brzi odgovori koji mi trebaju