Përplas Isshtë një program kompjuterik, funksioni i të cilit është të interpretojë urdhërat. Bazohet në guaskën e Unix dhe ishte shkruar për projektin GNU duke qenë predha e paracaktuar në shumicën e shpërndarjeve të GNU / Linux. Emri i tij është akronim për Bourne-Përsëri Shell (një guaskë tjetër), duke bërë një lojë me fjalët (rilindur do të thotë rilindje) rreth Guaskë Bourne (sh), i cili ishte një nga interpretuesit e parë të mëdhenj të Unix.
Sot do të tregojmë disa skenare shell që mund të jenë shumë të dobishme për zhvilluesit. Shumica punojnë në çdo predhë Unix, megjithëse disa kërkojnë që ato të ekzekutohen në mënyrë specifike nga Përplas.
Parandaloni përdoruesit jo të privilegjuar nga ekzekutimi i skenarit
Disa skripte kryejnë detyra administrative, kështu që mund të dëshirojmë që vetëm përdoruesi rrënjor të ekzekutojë skriptin. Në atë rast mund të përdorim diçka si kjo:
#!/bin/bash
if [[ $EUID -ne 0 ]]; then
echo "Este script debe ser ejecutado por el usuario root" 1>&2
exit 1
fi
Lejoni ekzekutimin e skriptit vetëm për një përdorues të veçantë
Ngjashëm me kodin e mësipërm, mund të dëshirojmë që vetëm një përdorues specifik të ekzekutojë skriptin. Ne e bëjmë atë kështu:
#!/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
Verifikoni që një shërbim / proces po ekzekutohet
Nëse duam të dimë nëse ka procese të ndonjë shërbimi ose programi që ekzekutohet, ne mund ta përdorim këtë skenar (në këtë rast verifikon që demoni i Apache eshte duke vrapuar):
#!/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
Krijoni një skedar bllokimi
Ndonjëherë duhet të sigurohemi që skenari të mos ekzekutohet dy ose më shumë herë njëkohësisht. Për këtë mund të përdorim skedarët e kyçjes. Ky është një version i thjeshtë i një skenari që na lejon ta bëjmë kë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
Në këtë rast, verifikohet që skedari çfarëdo që të jetë ekzistojnë Në rast se ekziston, skenari NUK i ekzekuton detyrat e tij. Nëse nuk ekziston, krijon skedarin, ekzekuton detyrat që duhen për të ekzekutuar dhe e heq atë. Por, kjo nuk është plotësisht e besueshme. Çfarë do të ndodhte nëse ndërsa skenari ynë po ekzekutohet ai mbyllet papritmas?
Në atë rast, skedari i bllokimit nuk do të fshihet, dhe për këtë arsye nuk do të na lejojë të ekzekutojmë përsëri skenarin. Për të mbuluar ato raste, mund të përdorim komandën kurth që na lejon të ekzekutojmë komanda në rast se skenari ynë përfundon papritur. Ky është një version më i përparuar që gjithashtu kursen PID-in e skenarit që e ekzekuton atë brenda skedarit të kyçjes:
#!/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
Le ta kuptojmë komandën pak më mirë kurth. Sintaksa e saj në thelb është kjo: sinjali i komandës kurth [sinjali…]; ku sinjali është sinjali i përfundimit që dëshironi të kapni. Nëse dëshironi të shihni një listë të sinjaleve të disponueshme mund të ekzekutoni komandën kill -l. Për rastin e mëparshëm, janë përdorur sinjalet INT (kap përfundimin e prodhuar nga një Ctrl + c), AFATI (përfundimi i prodhuar nga komanda e vrasjes) dhe EXIT (përfundimi normal i një skenari, ose sepse nuk ka më rreshta për t'u ekzekutuar ose sepse i del komanda e daljes).
Menuja e opsioneve
Për të bërë një menu ku lejojmë përdoruesin të zgjedhë një seri opsionesh mund të përdorim skemën e mëposhtme:
#!/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
Kërkoni konfirmim para se të ekzekutoni një skenar
Ndonjëherë është e dobishme që përdoruesi të konfirmojë ekzekutimin e një grupi deklaratash, domethënë mesazhin tipik që i kërkon përdoruesit të shkruajë po ose jo. Ne mund ta bëjmë këtë si kjo:
#!/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"
Fundi i artikullit. Thjesht shkëlqyeshëm
Redakto: Duhet të keni kujdes me hapësirat dhe skedat, të cilat për ndonjë arsye nuk po dalin
Qij ata janë të shkëlqyeshëm O_O ... kjo do të ndihmojë shumë për gjërat e mia të vogla që bëj në Bash
Skenarët janë super! Çfarë kontributi të shkëlqyeshëm seriozisht, vetëm atë që po kërkoja.
PS: Forumi është prishur.
Po, serveri ku është montuar forumi është jashtë linje, nuk ka ide pse ... i kemi shkruar një email mikut që kujdeset për të, për të parë se çfarë na përgjigjet
Përshëndetje.
Oh mirë, le të shpresojmë se nuk është asgjë serioze.
A përfshihej edhe ai "byk" në Code Ninja? XD
Më pëlqen fuqia e bash dhe ata më thanë se për çfarë ishte gjuha C because, sepse në skriptin shell ka shumë komanda të njohura.
Faleminderit, më pëlqeu shumë
Vlerësimi i parametrave të hyrjes është shumë i dobishëm. Unë nuk dija si të bëja menutë =)
Brilliant. tani unë mund t'i jap ca "fortësi" skenarit tim churros lol
Një kënaqësi e madhe për të parë se si puna jonë modeste në CodeNinja i shërben komunitetit ndërkombëtar të linux
Sigurisht! 🙂
Gjithçka është për të ndihmuar dhe kontribuar së bashku, dhe jo për të krijuar flakë, apo jo? 😉
Skenari i procesit që po ekzekutohet mund të përmirësohet pak duke vendosur mundësinë për të zgjedhur procesin për të cilin dëshironi të dini, do të dukej diçka e tillë:
#! / bin / bash
jehona "Zgjidhni një shërbim"
lexoni SHVRBIMIN
# SERVICE = 'mysql'
nëse ps sëpatë | grep -v grep | grep $ SERVICE> / dev / null
pastaj
echo "Shërbimi $ SERVICE po ekzekutohet"
tjetër
echo "Shërbimi $ SERVICE është ndalur"
Unë jam shumë praktik me skriptet tuaja, por unë jam duke kërkuar për një skenar të veçantë për të zgjidhur një problem që kam, i cili është si më poshtë: Ne kemi një server të aplikimit në kompani që përdoruesit e brendshëm të hyrë në atë me telnet, dhe ekzekutuar një aplikacion të veçantë që është i kufizuar Për licencat, përdoruesit abuzojnë dhe hapin më shumë se një telnet për të marrë mbi 2 ose më shumë licenca, kështu që skenari që kam menduar është që me ndonjë metodë, kontrolloni se cili proces i telnet është joaktiv për më shumë se 2 orë dhe prandaj dërgoni një vrasje në atë pid, mund të më ndihmoni?
Instaloni programin e mëposhtëm
aftësia instaloni autolog
Dhe skedarin e konfigurimit që keni në /etc/autolog.conf
E mrekullueshme, shok, mund të të bëj një pyetje, më duhet një skenar shell me opsione dhe e kam bazuar në tënden dhe funksionon shumë mirë, por një nga opsionet duhet të dërgojë email (duke përdorur postifix), ai kërkon temë, tekst dhe marrësit në ekran dhe çfarë dërgojnë dhe kontrollojnë nëse është dërguar në mënyrë korrekte, me postënq mund të shoh radhën dhe të shoh nëse është dërguar, por si mund të dërgoj email me komandë duke përdorur variablat që morën temën, tekstin dhe marrësit ? 🙁
Escríbeme a mi email (kzkggaara[at]desdelinux[dot]net) para hablar con más calma, te ayudo con mucho gusto 🙂
Faleminderit mik, ke kaluar!
Pershendetje mire.
Unë i kam hasur në këto shembuj të shkëlqyeshëm pikërisht kur më duhej një menu.
Unë kam filluar ta bëj atë dhe nuk mund ta vë në punë (në hapat e mëparshëm).
Unë kam 247 elementë, të cilët i referohen fushave të ndryshme territoriale.
Ajo që më duhet është një menu nga të zgjedh vendin:
#! / bin / bash
qartë
derisa:
do
jehonë »Zgjidhni vendin për të provuar»
jehonë «1. Afganistan (AF) »
jehonë «2. Shqipëri (AL) »
jehonë «3. Gjermani (DE) »
jehonë «5. Angola (AO) »
jehonë «6. Anguilla (AI) »
.. dhe vazhdon deri në vitin 247
echo -n "Zgjidh një opsion [1 - 247]"
opsioni i leximit
rasti $ opsioni në
1) jehonë "kjo je ti:"; whoami ;;
2) jehonë "e ke këtë"; df ;;
3) jehonë ""; uname -r ;;
4) jehonë "bye"; dalja 1 ;;
5) jehonë "kjo je ti:"; whoami ;;
6) jehonë "kjo je ti:"; whoami ;;
… Dhe vazhdon deri në vitin 247
*) echo «$ opc është një opsion i pavlefshëm. Soshtë kaq e vështirë? ";
echo "Shtyp një tast për të vazhduar ...";
lexo foo ;;
se C
e bërë
Sjellja është si më poshtë:
Çdo opsion përveç 4, i cili është rezultati, fshin numrin e futur dhe pret një numër të ri.
Hyrja 4 del.
Nëse vendos kodin e 4 në ndonjë rresht tjetër (le të themi 150) del në mënyrë të barabartë pa probleme.
Unë gjithashtu jam përpjekur ta vendos kodin në këtë format:
151) jehonë "ky je:";
Kush jam unë ;;
me të njëjtin rezultat.
Pyes veten nëse ka mundësi më të mira për një menu kaq të gjatë dhe natyrisht edhe unë jam duke gabuar.
Një ndihmë do të vlerësohej shumë, faleminderit
shkëlqyeshëm ... Unë mendoj se është shumë mirë të futesh në guaskë
falënderim
shkëlqyeshëm, hej si mund ta bëj bash-in tim të punojë me një skedar
shembull:
upload.sh fotodelavecina.jpg
duke menduar se skenari im bash "upload.sh" ka informacionin e hyrjes në ftp tim
pershendetje dhe faleminderit
Djalë i mirë, shumë faleminderit për të gjitha skenaret, unë kam krijuar një server CentOS dhe nuk e dini sa mirë më vijnë këto shabllone, ju lutem më kontaktoni me email. Unë dua të të propozoj diçka
Pse përdorni read foo kur bëni një menu? përgjigje të shpejta më duhen