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

Praštit Jedná se o počítačový program, jehož funkcí je interpretovat příkazy. Je založen na prostředí Unix a byl napsán pro projekt GNU je výchozím shellem ve většině distribucí GNU / Linux. Jeho jméno je zkratka pro Bourne – Znovu Shell (další granát), dělat slovní hříčku (znovuzrozený znamená znovuzrození) na Bourneova skořápka (sh), který byl jedním z prvních velkých tlumočníků Unixu.

Dnes si ukážeme některé shell skripty, které mohou být velmi užitečné pro vývojáře. Většina pracuje v libovolném prostředí Unix, i když některé vyžadují, aby je konkrétně provedl Praštit.

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 jsou spuštěny procesy nějaké služby nebo programu, můžeme použít tento skript (v tomto případě ověří, že démon z Apache běží):

#!/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ě je ověřeno, že soubor cokoliv. zámek existovat. Pokud existuje, skript NEVYkonává své úkoly. Pokud neexistuje, vytvoří soubor, spustí úlohy, které potřebuje ke spuštění, a odebere jej. To však není zcela spolehlivé. Co by se stalo, kdyby byl náš běh skriptu náhle spuštěn?

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

Pochopme příkaz trochu lépe past. Jeho syntaxe je v zásadě tato: signál příkazu trap [signál…]; kde signál je signál ukončení, který chcete zachytit. Chcete-li zobrazit seznam dostupných signálů, můžete spustit příkaz kill -l. V předchozím případě byly použity signály INT (zachycuje ukončení produkované Ctrl + c), TERMÍN (ukončení vytvořeno příkazem kill) a KONEC (normální ukončení skriptu, buď proto, že již není třeba provádět žádné řádky, nebo proto, že naráží 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ě skvělé 😀

Upravit: Musíte být opatrní s mezerami a tabulátory, které z nějakého důvodu nevycházejí ¬¬


Zanechte svůj komentář

Vaše e-mailová adresa nebude zveřejněna. Povinné položky jsou označeny *

*

*

  1. Odpovědný za údaje: Miguel Ángel Gatón
  2. Účel údajů: Ovládací SPAM, správa komentářů.
  3. Legitimace: Váš souhlas
  4. Sdělování údajů: Údaje nebudou sděleny třetím osobám, s výjimkou zákonných povinností.
  5. Úložiště dat: Databáze hostovaná společností Occentus Networks (EU)
  6. Práva: Vaše údaje můžete kdykoli omezit, obnovit a odstranit.

  1.   KZKG ^ Gaara řekl

    Kurva, jsou skvělí O_O ... hodně to pomůže mým maličkostem, které dělám v Bashi 😀

  2.   ren434 řekl

    Skripty jsou super! Jaký velký příspěvek vážně, přesně to, co jsem hledal.

    PS: Fórum nefunguje.

    1.    KZKG ^ Gaara řekl

      Ano, server, na kterém je fórum připojeno, je offline, netuším proč ... napsali jsme e-mail příteli, který se o to stará, abychom zjistili, co nám odpovídá 🙂

      Zdravím.

  3.   ren434 řekl

    No, doufejme, že to není nic vážného.

  4.   lafty řekl

    Byl tento „plev“ zahrnut také do Code Ninja? XD

  5.   taregon řekl

    Mám rád moc bash h a řekli mi, k čemu je jazyk C ..., protože ve skriptu shellu je mnoho známých příkazů.

  6.   Christopher řekl

    Děkuji, opravdu se mi líbilo

  7.   andělská čepel řekl

    Ověření vstupních parametrů je velmi užitečné. Nevěděl jsem, jak vytvořit nabídky =)

  8.   Hyuuga_neji řekl

    Skvělý…. teď můžu svému skriptu churros hehehe dát nějakou „tvrdost“

  9.   havran řekl

    Je velkým potěšením vidět, jak naše skromná práce v CodeNinja slouží mezinárodní linuxové komunitě

    1.    KZKG ^ Gaara řekl

      Průhledná! 🙂
      Všechno má pomáhat a společně přispívat, a ne vytvářet plameny, že? 😉

  10.   diego řekl

    Spuštěný skript procesu lze trochu vylepšit tak, že dáte možnost zvolit proces, o kterém chcete vědět, vypadal by asi takto:

    #! / bin / bash
    echo "Vyberte službu"
    přečtěte si SLUŽBU
    # SERVICE = 'mysql'
    pokud ps ax | grep -v grep | grep $ SERVICE> / dev / null
    pak
    echo "Služba $ SERVICE běží"
    jiný
    echo "Služba $ SERVICE je zastavena"

  11.   Jua Carlos C. řekl

    Mám velmi praktické skripty, ale hledám speciální skript, který by vyřešil problém, který mám: omezeno U licencí uživatelé zneužívají a otevírají více než jeden telnet, aby převzali 2 nebo více licencí, takže skript, o kterém jsem si myslel, je, že podle nějaké metody zkontrolujte, který proces telnet je neaktivní po dobu delší než 2 hodiny, a proto pošlete zabití pid, mohl bys mi pomoci?

    1.    diego řekl

      Nainstalujte si následující program

      aptitude nainstalovat autolog

      A máte konfigurační soubor v /etc/autolog.conf

  12.   Tito řekl

    Skvělé, příteli, mohu se vás na něco zeptat, potřebuji shell skript s možnostmi a já jsem ho založil na vašem a funguje skvěle, ale jedna z možností musí posílat e-maily (pomocí postifixu), ptá se na předmět, text a příjemci na obrazovce a to, co odesílá a kontroluje, zda je odesláno správně, s mailq vidím frontu a vidím, zda byla odeslána, ale jak mohu poslat e-maily příkazem pomocí proměnných, které dostaly předmět, text a příjemce ? 🙁

    1.    KZKG ^ Gaara řekl

      Napište na můj email (kzkggaara[at]desdelinux[dot]net), abyste mluvili klidněji, rád vám pomohu :)

      1.    Tito řekl

        Velké díky, příteli, prošel jsi!

  13.   Fer řekl

    Dobrý den
    Na tyto vynikající příklady jsem narazil, právě když jsem potřeboval nabídku.
    Začal jsem to a nemohu to dostat do práce (v předchozích krocích).
    Mám 247 prvků, které odkazují na různé územní domény.
    Potřebuji nabídku, ze které si vyberu zemi:
    #! / bin / bash
    jasný
    zatímco:
    do
    echo »Vyberte zemi, kterou chcete vyzkoušet»
    ozvěna «1. Afghánistán (AF) »
    ozvěna «2. Albánie (AL) »
    ozvěna «3. Německo (DE) »
    ozvěna «5. Angola (AO) »
    ozvěna «6. Anguilla (AI) »
    .. a pokračuje až do 247

    echo -n "Vyberte možnost [1 - 247]"
    možnost čtení
    případ $ volba v
    1) ozvěna „to jsi ty:“; whoami ;;
    2) ozvěna „máte toto“; df ;;
    3) echo ""; uname -r ;;
    4) ozvěna „ahoj“; výstup 1 ;;
    5) ozvěna „to jsi ty:“; whoami ;;
    6) ozvěna „to jsi ty:“; whoami ;;
    … A pokračuje až do 247
    *) echo «$ opc je neplatná volba. Je to tak těžké? “;
    echo "Pokračujte stisknutím klávesy ...";
    číst foo ;;
    že C.
    hotový

    Chování je následující:
    Jakákoli možnost kromě 4, což je výstup, odstraní zadané číslo a čeká na nové číslo.
    Zadání 4 vyjde.
    Pokud vložím kód 4 do jiného řádku (řekněme 150), vyjde to stejně bez problémů.
    Také jsem se pokusil dát kód v tomto formátu:
    151) ozvěna „toto jsi:“;
    kdo jsem ;;
    se stejným výsledkem.
    Zajímalo by mě, jestli existují lepší možnosti pro tak dlouhé menu a samozřejmě také dělám špatně.
    Pomoc by byla velmi oceněna, děkuji

  14.   Pouze Raul řekl

    vynikající ... myslím, že je velmi dobré se dostat do ulity

    díky

  15.   Marcos řekl

    skvělé, hej, jak mohu, aby můj bash fungoval se souborem
    příklad:

    upload.sh fotodelavecina.jpg

    myslet si, že můj bash skript "upload.sh" má informace o přístupu k mému ftp

    pozdravy a díky 😀

  16.   netzulo ntx řekl

    Dobrý člověk, moc děkuji za všechny skripty, nastavil jsem server CentOS a nevíte, jak dobře mi tyto šablony přicházejí, kontaktujte mě e-mailem. Chci ti něco navrhnout

  17.   gabriel balderramos řekl

    Proč při vytváření nabídky používáte funkci read foo? rychlé odpovědi, které potřebuji