Bash on arvutiprogramm, mille ülesanne on käskude tõlgendamine. See põhineb Unixi shellil ja kirjutati GNU projekti jaoks , olles enamiku GNU/Linuxi distributsioonide vaikimisi käskude interpreteerija . Selle nimi on lühend sõnadest Bourne-Again Shell , mis on sõnamäng (born-again tähendab taassündi) ja viitab Bourne'i shellile (sh) , mis oli üks esimesi suuremaid Unixi interpreteerijaid.
Täna näitame teile mõningaid shelliskripte, mis võivad arendajatele väga kasulikud olla. Enamik neist töötab igas Unixi shellis, kuigi mõned nõuavad spetsiaalselt Bashi käivitamist.
Takistage privilegeeritud kasutajatel skripti käivitamast
Mõni skript täidab haldusülesandeid, mistõttu võime soovida, et skripti käitaks ainult juurkasutaja. Sel juhul saame kasutada midagi sellist:
#!/bin/bash
if [[ $EUID -ne 0 ]]; then
echo "Este script debe ser ejecutado por el usuario root" 1>&2
exit 1
fi
Luba skripti käivitamine ainult konkreetsele kasutajale
Sarnaselt ülaltoodud koodiga võime soovida, et skripti käitaks ainult konkreetne kasutaja. Me teeme seda nii:
#!/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
Veenduge, et teenus / protsess töötab
Kui tahame teada, kas teenuse või programmi protsesse on töös, saaksime kasutada seda skripti (antud juhul kontrollib see, kas Apache deemon töötab) :
#!/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
Looge lukufail
Mõnikord peame veenduma, et skripti ei käitata kaks või enam korda korraga. Selleks saame kasutada lukufaile. See on skripti lihtne versioon, mis võimaldab meil seda teha:
#!/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
Sellisel juhul kontrollib skript, kas fail `loquesea.lock` on olemas. Kui on, siis skript EI täida oma ülesandeid. Kui seda pole olemas, loob see faili, täidab vajalikud ülesanded ja seejärel kustutab selle. See pole aga täiesti usaldusväärne. Mis juhtuks, kui meie skript töötamise ajal järsult suletaks?
Sel juhul lukufaili ei kustutata ja seetõttu ei lubaks see meil skripti uuesti käivitada. Nende juhtumite kajastamiseks võiksime kasutada käsku trap, mis võimaldab meil käske täita juhul, kui meie skript ootamatult lõpeb. See on täpsem versioon, mis salvestab ka lukustusfailis selle käivitava skripti PID:
#!/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
Saame käsust `trap` veidi paremini aru . Selle süntaks on põhimõtteliselt järgmine: `trap command signal [signal …];`, kus `signal` on lõppsignaal, mida soovite jäädvustada. Kui soovite näha saadaolevate signaalide loendit, saate käivitada käsu `kill -l`. Eelmises näites olid kasutatud signaalid `INT` (jäädvustab Ctrl+c poolt tekitatud lõppsignaali) , `TERM` (käsu `kill` poolt tekitatud lõppsignaal) ja `EXIT` (tavaline skripti lõpp, kuna kas pole rohkem ridu käivitada või kuna see kohtab käsku `exit`).
Menüü Valikud
Menüü koostamiseks, kus lubame kasutajal valida rea võimalusi, saame kasutada järgmist skeemi:
#!/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
Enne skripti käivitamist küsige kinnitust
Mõnikord on kasulik, kui kasutaja kinnitab lausepartii täitmise, see tähendab tüüpiline teade, mis palub kasutajal sisestada jah või ei. Saame seda teha nii:
#!/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"
Artikli lõpp. Lihtsalt suurepärane
Muudatus: Pean tühikute ja tabulaatoritega ettevaatlik olema, sest mingil põhjusel ei saa ma neist õigesti aru ¬¬