Bash to program komputerowy, którego funkcją jest interpretacja poleceń. Jest on oparty na powłoce Unix i został napisany dla projektu GNU , będąc domyślnym interpreterem poleceń w większości dystrybucji GNU/Linux . Jego nazwa to akronim od Bourne-Again Shell , gry słów (born-again oznacza odrodzenie) odnoszącej się do powłoki Bourne'a (sh) , która była jednym z pierwszych głównych interpreterów Unix.
Dzisiaj pokażemy Wam kilka skryptów powłoki, które mogą być bardzo przydatne dla programistów. Większość z nich działa w dowolnej powłoce Unix , choć niektóre wymagają uruchomienia powłoki Bash.
Zablokuj nieuprzywilejowanym użytkownikom uruchamianie skryptu
Niektóre skrypty wykonują zadania administracyjne, więc możemy chcieć, aby tylko użytkownik root uruchamiał skrypt. W takim przypadku możemy użyć czegoś takiego:
#!/bin/bash
if [[ $EUID -ne 0 ]]; then
echo "Este script debe ser ejecutado por el usuario root" 1>&2
exit 1
fi
Zezwalaj na wykonywanie skryptu tylko dla określonego użytkownika
Podobnie jak w powyższym kodzie, możemy chcieć, aby tylko określony użytkownik uruchomił skrypt. Robimy 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
Sprawdź, czy usługa / proces jest uruchomiony
Jeśli chcemy się dowiedzieć, czy są uruchomione jakieś procesy usługi lub programu, możemy skorzystać z tego skryptu (w tym przypadku sprawdza on, czy demon Apache jest uruchomiony) :
#!/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
Utwórz plik blokady
Czasami musimy się upewnić, że skrypt nie działa dwa lub więcej razy jednocześnie. W tym celu możemy skorzystać z plików blokujących. To jest prosta wersja skryptu, która pozwala nam to zrobić:
#!/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
W tym przypadku skrypt sprawdza, czy plik `loquesea.lock` istnieje. Jeśli tak, skrypt NIE wykonuje swoich zadań. Jeśli nie istnieje, tworzy plik, wykonuje niezbędne zadania, a następnie go usuwa. Jednak to rozwiązanie nie jest w pełni niezawodne. Co by się stało, gdyby nasz skrypt został nagle zamknięty podczas działania?
W takim przypadku plik blokady nie zostałby usunięty, a zatem nie pozwoliłby nam ponownie uruchomić skryptu. Aby omówić te przypadki, możemy skorzystać z polecenia trap, które pozwala nam wykonywać polecenia w przypadku nieoczekiwanego zakończenia działania naszego skryptu. Jest to bardziej zaawansowana wersja, która również zapisuje PID skryptu, który wykonuje go w pliku blokady:
#!/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
Przyjrzyjmy się bliżej poleceniu `trap` . Jego składnia wygląda mniej więcej tak: `trap command signal [signal …];` gdzie `signal` to sygnał zakończenia, który chcesz przechwycić. Aby wyświetlić listę dostępnych sygnałów, możesz uruchomić polecenie `kill -l`. W poprzednim przykładzie użyto sygnałów `INT` (przechwytuje sygnał zakończenia wygenerowany przez Ctrl+c) , `TERM` (zakończenie wygenerowane przez polecenie `kill`) i `EXIT` (zwykłe zakończenie skryptu, albo z powodu braku wierszy do wykonania, albo z powodu napotkania polecenia `exit`).
Menu opcji
Aby stworzyć menu, w którym pozwolimy użytkownikowi wybrać szereg opcji, możemy skorzystać z następującego schematu:
#!/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
Poproś o potwierdzenie przed uruchomieniem skryptu
Czasami warto poprosić użytkownika o potwierdzenie wykonania partii instrukcji, czyli typowej wiadomości, która prosi użytkownika o wpisanie tak lub nie. Możemy to zrobić w ten sposób:
#!/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 artykułu. Po prostu świetnie
Edytuj: Muszę uważać na spacje i tabulatory, bo z jakiegoś powodu nie robię tego poprawnie ¬¬