Nyttige skallskript i ethvert program

Bash Det er et dataprogram hvis funksjon er å tolke ordrer. Den er basert på skallet av Unix og ble skrevet for prosjektet GNU er standard skallet i de fleste distribusjoner av GNU / Linux. Hans navn er et akronym for Bourne – Igjen Shell (et annet skall bourne), lage et ordspill (gjenfødt betyr gjenfødelse) om ham Bourne-skall (sh), som var en av de første store tolkerne til Unix.

I dag skal vi vise noen skallskript som kan være veldig nyttige for utviklere. De fleste jobber i et hvilket som helst skall Unix, selv om noen krever at de blir henrettet spesifikt av Bash.

Forhindre at ikke-privilegerte brukere kjører skriptet

Noen skript utfører administrative oppgaver, så vi vil kanskje bare at rotbrukeren skal kjøre skriptet. I så fall kan vi bruke noe slikt:

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

Tillat skriptutførelse bare til en bestemt bruker

I likhet med koden ovenfor, vil vi kanskje bare at en bestemt bruker skal kjøre skriptet. Vi gjør det slik:

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

Bekreft at en tjeneste / prosess kjører

Hvis vi vil vite om det er prosesser for en tjeneste eller et program som kjører, kan vi bruke dette skriptet (i dette tilfellet bekrefter det at demon av Apache løper):

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

Lag en låsefil

Noen ganger må vi sørge for at skriptet ikke kjører to eller flere ganger samtidig. For dette kan vi bruke låsefilene. Dette er en enkel versjon av et skript som lar oss gjøre dette:

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

I dette tilfellet er det bekreftet at filen uansett. lås eksistere. I tilfelle det eksisterer, utfører skriptet IKKE oppgavene. Hvis den ikke eksisterer, oppretter den filen, kjører oppgavene den trenger for å kjøre, og fjerner den. Men dette er ikke helt pålitelig. Hva ville skje hvis det mens skriptet vårt kjører, lukkes brått?

I så fall vil ikke låsefilen bli slettet, og derfor vil den ikke tillate oss å kjøre skriptet igjen. For å dekke disse sakene, kan vi bruke fellekommandoen som lar oss utføre kommandoer i tilfelle skriptet vårt ender uventet. Dette er en mer avansert versjon som også lagrer PID for skriptet som kjører det i låsefilen:

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

La oss forstå kommandoen litt bedre felle. Dens syntaks er i utgangspunktet dette: fellekommandosignal [signal ...]; hvor signal er avslutningssignalet du vil fange. Hvis du vil se en liste over tilgjengelige signaler, kan du kjøre kommandoen kill -l. I forrige tilfelle ble INT-signalene brukt (fanger oppsigelsen produsert av en Ctrl + c), BEGREP (avslutning produsert av drepekommandoen) og EXIT (normal avslutning av et skript, enten fordi det ikke er flere linjer å kjøre, eller fordi det kommer over exit-kommandoen).

Alternativmeny

For å lage en meny der vi lar brukeren velge en rekke alternativer, kan vi bruke følgende skjema:

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

Be om bekreftelse før du kjører et skript

Noen ganger er det nyttig å få brukeren til å bekrefte utførelsen av en gruppe utsagn, det vil si den typiske meldingen som ber brukeren om å skrive ja eller nei. Vi kan gjøre dette slik:

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

Slutt på artikkelen. Rett og slett flott 

Redigere: Du må være forsiktig med mellomrom og faner, som av en eller annen grunn ikke kommer ut ¬¬


Legg til som foretrukket kilde i Google