Naudingi apvalkalo scenarijai bet kurioje programoje

Bash Tai kompiuterinė programa, kurios funkcija yra interpretuoti užsakymus. Jo pagrindas yra unix ir buvo parašyta projektui GNU yra numatytasis apvalkalas daugumoje GNU / Linux. Jo vardas yra santrumpa „Bourne-Again Shell“ (kitas apvalkalas), žaisdamas žodžius (vėl gimęs reiškia atgimimą) apie Bourne'o lukštas (sh), kuris buvo vienas pirmųjų pagrindinių „Unix“ vertėjų žodžiu.

Šiandien mes parodysime keletą „shell“ scenarijų, kurie gali būti labai naudingi kūrėjams. Dauguma dirba bet kokiu apvalkalu unix, nors kai kurie reikalauja, kad juos specialiai įvykdytų Bash.

Neleiskite privilegijuotiems vartotojams paleisti scenarijaus

Kai kurie scenarijai atlieka administracines užduotis, todėl galbūt norėsime, kad scenarijų paleistų tik pagrindinis vartotojas. Tokiu atveju galime naudoti kažką panašaus:

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

Leisti scenarijų vykdyti tik konkrečiam vartotojui

Panašiai kaip aukščiau pateiktas kodas, galbūt norėsime, kad scenarijų vykdytų tik konkretus vartotojas. Mes tai darome taip:

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

Patikrinkite, ar paslauga / procesas veikia

Jei norime sužinoti, ar veikia kokia nors tarnyba ar programa, galime naudoti šį scenarijų (šiuo atveju jis patikrina, ar apache bėga):

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

Sukurkite užrakto failą

Kartais turime įsitikinti, kad scenarijus neveikia du ar daugiau kartų vienu metu. Tam galime naudoti užrakto failus. Tai yra paprasta scenarijaus versija, leidžianti mums tai padaryti:

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

Šiuo atveju patikrinama, ar failas kas bebūtų.užrakinti egzistuoti. Jei scenarijus egzistuoja, scenarijus nevykdo savo užduočių. Jei jo nėra, jis sukuria failą, vykdo užduotis, kurias reikia vykdyti, ir pašalina. Bet tai nėra visiškai patikima. Ką daryti, jei mūsų scenarijus veikia staiga uždarytas?

Tokiu atveju užrakto failas nebus ištrintas, todėl jis neleis vėl paleisti scenarijaus. Norėdami aptarti tuos atvejus, mes galime naudoti komandą „trap“, kuri leidžia mums vykdyti komandas tuo atveju, jei scenarijus netikėtai baigsis. Tai yra tobulesnė versija, kuri taip pat išsaugo scenarijaus, kuris jį vykdo, užrakto faile 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

Supraskime komandą šiek tiek geriau spąstai. Jo sintaksė iš esmės yra tokia: spąstų komandos signalas [signalas ...]; kur signalas yra nutraukimo signalas, kurį norite sugauti. Jei norite pamatyti galimų signalų sąrašą, galite paleisti komandą kill -l. Ankstesniam atvejui buvo naudojami INT signalai (fiksuoja „Ctrl“ + c padarytą nutraukimą), TERMINAS (nutraukimas sukurtas nužudymo komanda) ir EXIT (įprastas scenarijaus nutraukimas arba dėl to, kad nebėra daugiau eilučių, arba todėl, kad jis rodomas komandoje exit).

Parinkčių meniu

Norėdami sukurti meniu, kuriame vartotojui leidžiame pasirinkti daugybę variantų, galime naudoti šią schemą:

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

Prieš paleisdami scenarijų, paprašykite patvirtinimo

Kartais naudinga, jei vartotojas patvirtina teiginių paketo vykdymą, ty tipinį pranešimą, kuriame prašoma vartotojo įvesti taip arba ne. Tai galime padaryti taip:

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

Straipsnio pabaiga. Tiesiog puiku 

Redaguoti: Turite būti atsargūs su tarpais ir skirtukais, kurie dėl kokių nors priežasčių neišlenda ¬¬


Pridėti kaip pageidaujamą šaltinį „Google“ sistemoje