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 e mrekullueshme
Redakto: Duhet të keni kujdes me hapësirat dhe skedat, të cilat për ndonjë arsye nuk po dalin