Przydatne skrypty powłoki w dowolnym programie

Bash Jest to program komputerowy, którego funkcją jest interpretacja poleceń. Opiera się na powłoce Unix i został napisany na potrzeby projektu GNU jest domyślną powłoką w większości dystrybucji GNU / Linux. Jego imię to skrót od Powłoka Bourne-Again (kolejny pocisk), grając na słowach (narodzony ponownie oznacza odrodzenie) na Powłoka Bourne'a (sh), który był jednym z pierwszych głównych tłumaczy systemu Unix.

Dzisiaj pokażemy kilka skryptów powłoki, które mogą być bardzo przydatne dla programistów. Większość działa w dowolnej powłoce Unixchociaż niektóre wymagają, aby były one specjalnie wykonywane przez 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 wiedzieć, czy są uruchomione procesy jakiejkolwiek usługi lub programu, możemy użyć tego skryptu (w tym przypadku sprawdza, czy demon Apache biegnie):

#!/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 sprawdza się, czy plik cokolwiek. blokada istnieć. Jeśli istnieje, skrypt NIE wykonuje swoich zadań. Jeśli nie istnieje, tworzy plik, uruchamia zadania, które musi wykonać, i usuwa go. Ale to nie jest całkowicie wiarygodne. Co by się stało, gdyby podczas działania naszego skryptu został nagle zamknięty?

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

Rozumiemy nieco lepiej polecenie pułapka. Jego składnia jest w zasadzie następująca: sygnał polecenia pułapki [sygnał…]; gdzie sygnał jest sygnałem zakończenia, który chcesz przechwycić. Jeśli chcesz zobaczyć listę dostępnych sygnałów, możesz uruchomić polecenie kill -l. W poprzednim przypadku wykorzystano sygnały INT (przechwytuje zakończenie wywołane przez Ctrl + c), SEMESTR (zakończenie wywołane komendą zabicia) i EXIT (normalne zakończenie skryptu, ponieważ nie ma więcej wierszy do uruchomienia lub napotyka polecenie wyjścia).

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 😀

Edytować: Trzeba uważać na spacje i tabulatory, które z jakiegoś powodu nie wychodzą ¬¬


Zostaw swój komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

*

*

  1. Odpowiedzialny za dane: Miguel Ángel Gatón
  2. Cel danych: kontrola spamu, zarządzanie komentarzami.
  3. Legitymacja: Twoja zgoda
  4. Przekazywanie danych: Dane nie będą przekazywane stronom trzecim, z wyjątkiem obowiązku prawnego.
  5. Przechowywanie danych: baza danych hostowana przez Occentus Networks (UE)
  6. Prawa: w dowolnym momencie możesz ograniczyć, odzyskać i usunąć swoje dane.

  1.   KZKG ^ Gaara powiedział

    Cholera, są świetne O_O ... to bardzo pomoże moim drobiazgom, które robię w Bash 😀

  2.   ren434 powiedział

    Scenariusze są super! Cóż za wspaniały wkład, poważnie, właśnie tego szukałem.

    PS: Forum nie działa.

    1.    KZKG ^ Gaara powiedział

      Tak, serwer na którym zamontowane jest forum jest offline, nie mam pojęcia dlaczego ... napisaliśmy maila do przyjaciela, który się tym zajmuje, żeby zobaczyć, co nam odpowie 🙂

      Pozdrowienia.

  3.   ren434 powiedział

    No cóż, miejmy nadzieję, że to nic poważnego.

  4.   lewy powiedział

    Czy ta „plewa” była również zawarta w Code Ninja? XD

  5.   Taregonu powiedział

    Podoba mi się moc bash 😉 i powiedzieli mi, do czego służy język C…, ponieważ w skrypcie powłoki jest wiele znajomych poleceń.

  6.   Christopher powiedział

    Dziękuję, bardzo mi się podobało

  7.   Angelblade powiedział

    Sprawdzanie poprawności parametrów wejściowych jest bardzo przydatne. Nie wiedziałem, jak zrobić menu =)

  8.   Hyuuga_Neji powiedział

    Znakomity…. teraz mogę nadać mojemu skryptowi churros lol trochę "twardości"

  9.   kruk powiedział

    Z wielką przyjemnością obserwuję, jak nasza skromna praca w CodeNinja służy międzynarodowej społeczności linuksowej

    1.    KZKG ^ Gaara powiedział

      Pewnie! 🙂
      Wszystko po to, by pomagać i pomagać razem, a nie tworzyć płomienie, prawda? 😉

  10.   diego powiedział

    Uruchomiony skrypt procesu można nieco ulepszyć, umieszczając opcję wyboru procesu, o którym chcesz wiedzieć, wyglądałby mniej więcej tak:

    #! / bin / bash
    echo „Wybierz usługę”
    przeczytaj SERWIS
    # SERVICE = 'mysql'
    jeśli ps ax | grep -v grep | grep $ SERVICE> / dev / null
    następnie
    echo „Usługa $ SERVICE jest uruchomiona”
    więcej
    echo „Usługa $ SERVICE została zatrzymana”

  11.   Jua Carlos C. powiedział

    Mam bardzo praktyczne skrypty, ale szukam specjalnego skryptu do rozwiązania problemu, który mam, a mianowicie: Mamy w firmie serwer aplikacji, do którego użytkownicy wewnętrzni uzyskują dostęp przez telnet i wykonują specjalną aplikację tj. ograniczona W przypadku licencji, nadużyć użytkowników i otwierania więcej niż jednego telnetu, aby przejąć 2 lub więcej licencji, to skrypt, o którym myślałem, polega na tym, że za pomocą jakiejś metody sprawdź, który proces Telnet jest nieaktywny przez ponad 2 godziny i dlatego wyślij do niego zabójstwo pid, czy możesz mi pomóc?

    1.    diego powiedział

      Zainstaluj następujący program

      aptitude zainstaluj autolog

      I plik konfiguracyjny, który masz w /etc/autolog.conf

  12.   Tito powiedział

    Świetnie, przyjacielu, mogę zadać ci pytanie, potrzebuję skryptu powłoki z opcjami i oparłem go na twoim i działa świetnie, ale jedna z opcji musi wysłać e-maile (używając postifix), pyta o temat, tekst i odbiorców na ekranie oraz co wysyłać i sprawdzać, czy jest wysłane poprawnie, z mailq widzę kolejkę i czy została wysłana, ale jak mam wysyłać maile poleceniem używając zmiennych, które otrzymały temat, tekst i odbiorców ? 🙁

    1.    KZKG ^ Gaara powiedział

      Napisz na mój e-mail (kzkggaara[at]desdelinux[dot]net), żeby mówić spokojniej, chętnie pomogę :)

      1.    Tito powiedział

        Wielkie dzięki przyjacielu, zdałeś!

  13.   Fer powiedział

    Cześć dobrze.
    Trafiłem na te doskonałe przykłady właśnie wtedy, gdy potrzebowałem menu.
    Zrobiłem to i nie mogę uruchomić tego (w poprzednich krokach).
    Mam 247 elementów, które odnoszą się do różnych dziedzin terytorialnych.
    Potrzebuję menu, skąd wybrać kraj:
    #! / bin / bash
    jasny
    podczas:
    do
    echo »Wybierz kraj do wypróbowania»
    echo «1. Afganistan (AF) »
    echo «2. Albania (AL) »
    echo «3. Niemcy (DE) »
    echo «5. Angola (AO) »
    echo «6. Anguilla (AI) »
    .. i trwa do 247

    echo -n "Wybierz opcję [1 - 247]"
    opcja odczytu
    case $ opcja w
    1) echo „to jesteś:”; whoami ;;
    2) echo „masz to”; df ;;
    3) echo „”; uname -r ;;
    4) echo „pa”; wyjście 1 ;;
    5) echo „to jesteś:”; whoami ;;
    6) echo „to jesteś:”; whoami ;;
    … I trwa do 247
    *) echo «$ opc jest niepoprawną opcją. To takie trudne?";
    echo "Naciśnij klawisz, aby kontynuować ...";
    przeczytaj foo ;;
    to C
    zrobić

    Zachowanie jest następujące:
    Każda opcja poza 4, która jest wyjściem, usuwa wprowadzoną liczbę i oczekuje na nową.
    Pojawia się wejście 4.
    Jeśli wstawię kod 4 w jakimkolwiek innym wierszu (powiedzmy 150), to wychodzi równie bez problemów.
    Próbowałem też umieścić kod w tym formacie:
    151) echo "to jesteś:";
    kim jestem ;;
    z tym samym wynikiem.
    Zastanawiam się, czy są lepsze opcje dla tak długiego menu i oczywiście też robię źle.
    Dziękuję bardzo za pomoc

  14.   Tylko Raul powiedział

    wspaniale ... Myślę, że bardzo dobrze jest dostać się do muszli

    dzięki

  15.   Marcos powiedział

    świetnie, hej, jak mogę sprawić, by mój bash działał z plikiem
    przykład:

    upload.sh fotodelavecina.jpg

    myśląc, że mój skrypt bash "upload.sh" ma informacje o dostępie do mojego ftp

    pozdrawiam i dziękuję 😀

  16.   netzulo ntx powiedział

    Dobry człowieku, bardzo dziękuję za wszystkie skrypty, skonfigurowałem serwer CentOS i nie wiesz, jak dobrze te szablony przychodzą do mnie, proszę o kontakt mailowy. Chcę ci coś zaproponować

  17.   Gabriela Balderramosa powiedział

    Dlaczego podczas tworzenia menu używasz read foo? szybkie odpowiedzi, których potrzebuję