Korisne skripte ljuske u bilo kojem programu

Bash je računalni program čija je funkcija interpretiranje naredbi. Temelji se na Unix ljusci i napisan je za GNU projekt , te je zadani interpreter naredbi u većini GNU/Linux distribucija . Njegovo ime je akronim za Bourne-Again Shell , igru ​​riječi (born-again znači ponovno rođenje) koja se odnosi na Bourneovu ljusku (sh) , koja je bila jedan od prvih glavnih Unix interpretera.

Danas ćemo vam pokazati neke shell skripte koje mogu biti vrlo korisne za programere. Većina njih radi u bilo kojoj Unix shell ljusci, iako neke zahtijevaju pokretanje Basha.

Spriječite neprivilegiranim korisnicima pokretanje skripte

Neke skripte izvršavaju administrativne zadatke pa bismo možda željeli da samo skriveni korisnik pokrene root korisnik. U tom slučaju možemo koristiti nešto poput ovoga:

#!/bin/bash
if [[ $EUID -ne 0 ]]; then
echo "Este script debe ser ejecutado por el usuario root" 1>&2
exit 1
fi

Omogući izvršavanje skripte samo određenom korisniku

Slično gore navedenom kodu, možda bismo željeli da samo određeni korisnik pokrene skriptu. Činimo to 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

Provjerite je li usluga / postupak pokrenut

Ako želimo znati jesu li pokrenuti neki procesi iz servisa ili programa, mogli bismo koristiti ovaj skript (u ovom slučaju, provjerava je li pokrenut Apache daemon ) :

#!/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

Stvorite datoteku zaključavanja

Ponekad se moramo pobrinuti da se skripta ne pokrene dva ili više puta istovremeno. Za to se možemo poslužiti datotekama zaključavanja. Ovo je jednostavna verzija skripte koja nam omogućuje da to učinimo:

#!/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

U ovom slučaju, skripta provjerava postoji li datoteka `loquesea.lock` . Ako postoji, skripta NE izvršava svoje zadatke. Ako ne postoji, stvara datoteku, izvršava potrebne zadatke, a zatim je briše. Međutim, ovo nije u potpunosti pouzdano. Što bi se dogodilo ako bi se naša skripta naglo zatvorila dok je radila?

U tom slučaju datoteka zaključavanja neće se izbrisati i stoga nam neće dopustiti ponovno pokretanje skripte. Da bismo pokrili te slučajeve, mogli bismo se poslužiti naredbom trap koja nam omogućuje izvršavanje naredbi u slučaju da naša skripta neočekivano završi. Ovo je naprednija verzija koja također sprema PID skripte koja je izvršava u datoteci zaključavanja:

#!/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

Razumijemo malo bolje naredbu `trap` . Njezina sintaksa je u osnovi sljedeća: `trap naredba signal [signal …];` gdje je `signal` signal završetka koji želite snimiti. Ako želite vidjeti popis dostupnih signala, možete pokrenuti naredbu `kill -l`. U prethodnom primjeru korišteni su signali `INT` (hvata signal završetka koji proizvodi Ctrl+c) , `TERM` (završetak koji proizvodi naredba `kill`) i `EXIT` (normalan završetak skripte, bilo zato što više nema redaka za izvršenje ili zato što nailazi na naredbu `exit`).

Izbornik opcija

Da bismo napravili izbornik u kojem dopuštamo korisniku da odabere niz opcija, možemo se poslužiti sljedećom shemom:

#!/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

Zatražite potvrdu prije pokretanja skripte

Ponekad je korisno da korisnik potvrdi izvršavanje serije izjava, to jest tipične poruke koja od korisnika traži da upiše da ili ne. To možemo učiniti ovako:

#!/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"

Kraj članka. Jednostavno super 

Uredi: Moram biti oprezan s razmacima i tabulatorima, jer ih iz nekog razloga ne koristim kako treba ¬¬


Dodaj kao preferirani izvor na Googleu