Užitočné shell skripty v akomkoľvek programe

tresnúť Je to počítačový program, ktorého funkciou je interpretácia príkazov. Je založený na škrupine unix a bol napísaný pre projekt GNU je predvoleným shellom vo väčšine distribúcií systému GNU / Linux. Jeho meno je skratka pre Bourne – opäť Shell (ďalšie bourne), slovná hračka (znovuzrodenie znamená znovuzrodenie) o Bourneova škrupina (sh), ktorý bol jedným z prvých hlavných tlmočníkov Unixu.

Dnes si ukážeme niektoré shell skripty, ktoré môžu byť pre vývojárov veľmi užitočné. Väčšina pracuje v akejkoľvek škrupine unix, aj keď niektoré vyžadujú, aby ich konkrétne vykonal tresnúť.

Zabráňte spusteniu skriptu neoprávneným používateľom

Niektoré skripty vykonávajú administratívne úlohy, takže by sme mohli chcieť, aby skript spustil iba používateľ root. V takom prípade môžeme použiť niečo také:

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

Povoliť vykonávanie skriptov iba konkrétnemu používateľovi

Podobne ako v predchádzajúcom kóde môžeme chcieť, aby skript spustil iba konkrétny používateľ. Robí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

Skontrolujte, či je spustená služba / proces

Ak chceme vedieť, či sú spustené procesy nejakej služby alebo programu, môžeme použiť tento skript (v tomto prípade overuje, že démon z apache beží):

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

Vytvorte zámkový súbor

Niekedy sa musíme uistiť, že skript nebeží dvakrát alebo viackrát súčasne. Na tento účel môžeme využiť súbory zámku. Toto je jednoduchá verzia skriptu, ktorá nám 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 takom prípade sa overí, že súbor čokoľvek.zámok existujú. Ak existuje, skript NEVYkonáva svoje úlohy. Ak neexistuje, vytvorí súbor, spustí úlohy potrebné na spustenie a odstráni ho. To však nie je úplne spoľahlivé. Čo by sa stalo, keby bol náš bežecký skript náhle spustený?

V takom prípade by sa súbor zámku nevymazal, a preto by nám to nedovolilo znovu spustiť skript. Na pokrytie týchto prípadov by sme mohli využiť príkaz trap, ktorý nám umožňuje vykonávať príkazy v prípade, že náš skript neočakávane skončí. Toto je pokročilejšia verzia, ktorá tiež uloží PID skriptu, ktorý ho vykoná, do súboru 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

Pochopme príkaz trochu lepšie past. Jeho syntax je v podstate táto: príkazový signál trapu [signál…]; kde signál je signál ukončenia, ktorý chcete zachytiť. Ak chcete vidieť zoznam dostupných signálov, môžete spustiť príkaz kill -l. Pre predchádzajúci prípad boli použité signály INT (zachytáva ukončenie produkované Ctrl + c), TERMÍN (ukončenie vyvolané príkazom kill) a ODCHOD (normálne ukončenie skriptu, buď preto, že už nie sú potrebné ďalšie riadky, alebo sa vyskytuje cez príkaz exit).

Ponuka možností

Ak chcete vytvoriť ponuku, v ktorej používateľom umožníme vybrať si z viacerých možností, môžeme použiť nasledujúcu sché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

Pred spustením skriptu si vyžiadajte potvrdenie

Niekedy je užitočné nechať používateľa potvrdiť vykonanie dávky príkazov, to znamená typickú správu, ktorá od používateľa žiada, aby napísal áno alebo nie. Môžeme to urobiť 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"

Koniec článku. Jednoducho skvelé 

Upraviť: Musíte byť opatrní pri medzerách a tabulátoroch, ktoré z nejakého dôvodu nevychádzajú ¬¬


Pridať ako preferovaný zdroj v Google