Bash Det är ett datorprogram vars funktion är att tolka order. Den är baserad på skalet av Unix och skrevs för projektet GNU är standardskalet i de flesta distributioner av GNU / Linux. Hans namn är en förkortning för Bourne-Again skal (en annan skalborne), gör ett ordspel (återfödda betyder återfödelse) om Bourne skal (sh), som var en av de första stora tolkarna av Unix.
Idag ska vi visa några skalskript som kan vara mycket användbara för utvecklare. De flesta fungerar i alla skal Unix, även om vissa kräver att de specifikt körs av Bash.
Förhindra att icke-privilegierade användare kör skriptet
Vissa skript utför administrativa uppgifter så vi kanske bara vill att rotanvändaren ska köra skriptet. I så fall kan vi använda något så här:
#!/bin/bash
if [[ $EUID -ne 0 ]]; then
echo "Este script debe ser ejecutado por el usuario root" 1>&2
exit 1
fi
Tillåt endast skriptkörning för en specifik användare
I likhet med koden ovan kanske vi bara vill att en specifik användare ska köra skriptet. Vi gör det så:
#!/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
Kontrollera att en tjänst / process körs
Om vi vill veta om det finns processer för någon tjänst eller ett program som körs kan vi använda detta skript (i det här fallet verifierar det att demon av Apache körs):
#!/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
Skapa en låsfil
Ibland måste vi se till att manuset inte körs två eller flera gånger samtidigt. För detta kan vi använda låsfilerna. Detta är en enkel version av ett skript som låter oss göra detta:
#!/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
I det här fallet är det verifierat att filen vad som helst. lås existera. Om det finns exekverar skriptet INTE sina uppgifter. Om den inte finns skapar den filen, kör de uppgifter den behöver för att köra och tar bort den. Men detta är inte helt pålitligt. Vad skulle hända om det stängs plötsligt medan vårt manus körs?
I så fall skulle låsfilen inte raderas och därför tillåter vi inte att köra skriptet igen. För att täcka dessa fall kan vi använda trap-kommandot som låter oss köra kommandon om vårt skript slutar oväntat. Detta är en mer avancerad version som också sparar PID för skriptet som kör det i låsfilen:
#!/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
Låt oss förstå kommandot lite bättre fälla. Dess syntax är i grund och botten denna: fällkommandosignal [signal ...]; där signal är den avslutningssignal som du vill fånga. Om du vill se en lista över tillgängliga signaler kan du köra kommandot kill -l. För det föregående fallet användes INT-signalerna (fångar avslutningen som produceras av en Ctrl + c), TERMIN (uppsägning producerad av kill-kommando) och EXIT (normal avslutning av ett skript, antingen för att det inte finns fler rader att utföra eller för att det kommer över kommandot exit).
Alternativmeny
För att skapa en meny där vi tillåter användaren att välja en serie alternativ kan vi använda följande schema:
#!/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
Be om bekräftelse innan du kör ett skript
Ibland är det bra att låta användaren bekräfta utförandet av en grupp uttalanden, det vill säga det typiska meddelandet som ber användaren att skriva ja eller nej. Vi kan göra detta så här:
#!/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"
Slutet på artikeln. Bra helt enkelt
Redigera: Du måste vara försiktig med mellanslag och flikar, som av någon anledning inte kommer ut ¬¬