Užitečné shell skripty v jakémkoli programu

Bash je počítačový program, jehož funkcí je interpretace příkazů. Je založen na unixovém shellu a byl napsán pro projekt GNU , kde je výchozím interpretem příkazů ve většině distribucí GNU/Linuxu . Jeho název je zkratkou pro Bourne-Again Shell , což je slovní hříčka (born-again znamená znovuzrození) odkazující na Bourneův shell (sh) , který byl jedním z prvních hlavních unixových interpretů.

Dnes vám ukážeme několik shellových skriptů, které mohou být pro vývojáře velmi užitečné. Většina z nich funguje v jakémkoli unixovém shellu, i když některé vyžadují spuštění konkrétně Bashu.

Zabraňte uživatelům, kteří nemají oprávnění, spouštět skript

Některé skripty provádějí administrativní úlohy, takže můžeme chtít, aby skript spouštěl pouze uživatel root. V takovém případě můžeme použít něco takového:

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

Povolit spuštění skriptu pouze konkrétnímu uživateli

Podobně jako výše uvedený kód můžeme chtít, aby skript spustil pouze konkrétní uživatel. Děláme to tak:

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

Ověřte, zda je spuštěna služba / proces

Pokud chceme vědět, zda běží nějaké procesy ze služby nebo programu, můžeme použít tento skript (v tomto případě kontroluje, zda běží démon Apache ) :

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

Vytvořte soubor zámku

Někdy se musíme ujistit, že skript nefunguje dvakrát nebo vícekrát současně. K tomu můžeme využít soubory zámku. Toto je jednoduchá verze skriptu, která nám to umožňuje:

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

V tomto případě skript zkontroluje, zda soubor `loquesea.lock` existuje. Pokud ano, skript neprovede své úkoly. Pokud neexistuje, soubor vytvoří, provede potřebné úkoly a poté jej smaže. To však není zcela spolehlivé. Co by se stalo, kdyby byl náš skript během běhu náhle ukončen?

V takovém případě by soubor zámku nebyl odstraněn, a proto by nám neumožnil znovu spustit skript. K pokrytí těchto případů bychom mohli využít příkaz trap, který nám umožňuje provádět příkazy v případě, že náš skript neočekávaně skončí. Toto je pokročilejší verze, která také uloží PID skriptu, který jej provede, v souboru zámku:

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

Pojďme si příkaz `trap` trochu lépe vysvětlit . Jeho syntaxe je v podstatě tato: `trap command signal [signal …];`, kde `signal` je ukončovací signál, který chcete zachytit. Pokud chcete zobrazit seznam dostupných signálů, můžete spustit příkaz `kill -l`. V předchozím příkladu byly použity signály `INT` (zachycuje ukončovací signál vygenerovaný Ctrl+c) , `TERM` (ukončení vygenerované příkazem `kill`) a `EXIT` (normální ukončení skriptu, buď proto, že již nejsou žádné řádky ke spuštění, nebo proto, že narazí na příkaz `exit`).

Nabídka možností

Chcete-li vytvořit nabídku, kde umožňujeme uživateli vybrat řadu možností, můžeme použít následující schéma:

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

Před spuštěním skriptu si vyžádejte potvrzení

Někdy je užitečné nechat uživatele potvrdit provedení dávky příkazů, tj. Typické zprávy, která uživatele požádá o zadání ano nebo ne. Můžeme to udělat takto:

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

Konec článku. Prostě paráda 

Edit: Musím být opatrný s mezerami a tabulacemi, protože z nějakého důvodu je nepíšu správně.


Přidat jako preferovaný zdroj v Googlu