Stipri iesist Tā ir datorprogramma, kuras funkcija ir interpretēt pasūtījumus. Tās pamatā ir Unix un tika rakstīts projektam GNU ir noklusējuma čaula lielākajā daļā GNU / Linux. Viņa vārds ir saīsinājums Bourne-Agin Shell (cits čaumalas burns), padarot vārdu spēli (dzimis atkal nozīmē atdzimšanu) uz Bourne apvalks (sh), kas bija viens no pirmajiem nozīmīgākajiem Unix tulkotājiem.
Šodien mēs parādīsim dažus čaulas skriptus, kas var būt ļoti noderīgi izstrādātājiem. Lielākā daļa strādā jebkurā apvalkā Unix, lai gan daži pieprasa, lai tos īpaši izpildītu Stipri iesist.
Neļaujiet privileģētiem lietotājiem palaist skriptu
Daži skripti veic administratīvos uzdevumus, tāpēc mēs varētu vēlēties, lai skriptu palaistu tikai saknes lietotājs. Tādā gadījumā mēs varam izmantot kaut ko līdzīgu šim:
#!/bin/bash
if [[ $EUID -ne 0 ]]; then
echo "Este script debe ser ejecutado por el usuario root" 1>&2
exit 1
fi
Atļaut skripta izpildi tikai konkrētam lietotājam
Līdzīgi kā iepriekš minētajā kodā, mēs varētu vēlēties, lai skriptu palaistu tikai noteikts lietotājs. Mēs to darām tā:
#!/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
Pārbaudiet, vai pakalpojums / process darbojas
Ja mēs vēlamies uzzināt, vai darbojas kādi pakalpojumi vai programmas, mēs varētu izmantot šo skriptu (šajā gadījumā tas pārbauda, vai Apache skrien):
#!/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
Izveidojiet bloķēšanas failu
Dažreiz mums jāpārliecinās, ka skripts nedarbojas divas vai vairākas reizes vienlaicīgi. Šim nolūkam mēs varam izmantot bloķēšanas failus. Šī ir vienkārša skripta versija, kas ļauj mums to izdarīt:
#!/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
Šajā gadījumā tiek pārbaudīts, vai fails neatkarīgi.bloķēt pastāvēt. Ja skripts pastāv, skripts NEVADA izpildīt savus uzdevumus. Ja tā nepastāv, tā izveido failu, izpilda nepieciešamos uzdevumus un noņem to. Bet tas nav pilnīgi uzticams. Kas notiktu, ja mūsu skripts darbojas, tas tiek pēkšņi aizvērts?
Tādā gadījumā bloķēšanas fails netiks izdzēsts, un tāpēc tas neļāva mums palaist skriptu vēlreiz. Lai aptvertu šos gadījumus, mēs varētu izmantot komandu trap, kas ļauj mums izpildīt komandas, ja mūsu skripts negaidīti beidzas. Šī ir uzlabota versija, kas arī saglabā skripta PID, kas to izpilda bloķēšanas failā:
#!/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
Sapratīsim komandu nedaudz labāk lamatas. Tās sintakse būtībā ir šāda: slazdošanas komandas signāls [signāls ...]; kur signāls ir beigu signāls, kuru vēlaties noķert. Ja vēlaties redzēt pieejamo signālu sarakstu, varat palaist komandu kill -l. Iepriekšējam gadījumam tika izmantoti INT signāli (uztver Ctrl + c radīto izbeigšanu), JĒDZIENS (izbeigšanu rada kill komanda) un EXIT (skripta normāla pārtraukšana vai nu tāpēc, ka vairs nav palaistas rindas, vai tāpēc, ka tas nāk pāri izejas komandai).
Opciju izvēlne
Lai izveidotu izvēlni, kurā mēs ļaujam lietotājam izvēlēties virkni iespēju, mēs varam izmantot šādu shēmu:
#!/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
Pirms skripta palaišanas vaicājiet apstiprinājumu
Dažreiz ir lietderīgi, ja lietotājs apstiprina paziņojumu sērijas izpildi, tas ir, tipisku ziņojumu, kurā lietotājam tiek lūgts ierakstīt jā vai nē. Mēs varam to izdarīt šādi:
#!/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"
Raksta beigas. Vienkārši lieliski
Rediģēt: Jāuzmanās ar atstarpēm un cilnēm, kuras nez kāpēc neiznāk ¬¬