Bash Gre za računalniški program, katerega naloga je razlagati ukaze. Temelji na lupini Unix in je bil napisan za projekt GNU je privzeta lupina v večini distribucij GNU / Linux. Njegovo ime je kratica za Bourne – Spet Shell (še ena lupina), igranje besed (ponovno rojeno pomeni ponovno rojstvo) o njem Bournova lupina (sh), ki je bil eden prvih večjih tolmačev Unixa.
Danes bomo prikazali nekaj skriptov lupine, ki so lahko zelo koristni za razvijalce. Večina dela v kateri koli lupini Unix, čeprav nekateri zahtevajo, da jih posebej izvede Bash.
Neprivilegiranim uporabnikom preprečite izvajanje skripta
Nekateri skripti izvajajo skrbniške naloge, zato bi morda želeli, da skript zažene le korenski uporabnik. V tem primeru lahko uporabimo nekaj takega:
#!/bin/bash
if [[ $EUID -ne 0 ]]; then
echo "Este script debe ser ejecutado por el usuario root" 1>&2
exit 1
fi
Dovoli izvajanje skripta samo določenemu uporabniku
Podobno kot zgornja koda, bi morda želeli, da skript zažene le določen uporabnik. To počnemo 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
Preverite, ali se storitev / postopek izvaja
Če želimo vedeti, ali se izvaja katera koli storitev ali program, lahko uporabimo ta skript (v tem primeru preveri, da je demon Apache teče):
#!/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
Ustvarite zaklepno datoteko
Včasih moramo zagotoviti, da se skript ne zažene dvakrat ali večkrat hkrati. Za to lahko uporabimo datoteke za zaklepanje. To je preprosta različica skripta, ki nam omogoča to:
#!/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
V tem primeru je preverjeno, ali je datoteka karkoli.zakleni obstajajo. V primeru, da obstaja, skript NE izvaja svojih nalog. Če ne obstaja, ustvari datoteko, zažene naloge, ki jih mora zagnati, in jo odstrani. Vendar to ni povsem zanesljivo. Kaj bi se zgodilo, če bi bil med izvajanjem našega skripta nenadoma zaprt?
V tem primeru datoteka za zaklepanje ne bi bila izbrisana in nam zato ne bi omogočila ponovnega zagona skripta. Za pokrivanje teh primerov bi lahko uporabili ukaz trap, ki nam omogoča izvajanje ukazov v primeru, da se skript nepričakovano konča. To je naprednejša različica, ki shrani tudi PID skripta, ki ga izvede v zaklenjeni datoteki:
#!/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
Razumejmo ukaz malo bolje Past. Njegova sintaksa je v bistvu taka: signal trap command [signal…]; kjer je signal zaključni signal, ki ga želite ujeti. Če želite videti seznam razpoložljivih signalov, lahko zaženete ukaz kill -l. V prejšnjem primeru so bili uporabljeni signali INT (zajema zaključek, ki ga povzroči Ctrl + c), TERMIN (zaključek, ki ga proizvede ukaz kill) in IZHOD (normalno zaključevanje skripta bodisi zato, ker ni več vrstic, ki bi jih lahko zagnali, bodisi ker pride do ukaza za izhod).
Meni možnosti
Za izdelavo menija, kjer uporabniku omogočimo, da izbere vrsto možnosti, lahko uporabimo naslednjo shemo:
#!/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
Prosimo za potrditev, preden zaženete skript
Včasih je koristno, da uporabnik potrdi izvedbo serije izjav, to je tipičnega sporočila, ki od uporabnika zahteva, da vpiše da ali ne. To lahko storimo takole:
#!/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"
Konec članka. Preprosto super
Uredi: Previdni morate biti s presledki in zavihki, ki iz nekega razloga ne izidejo ¬¬