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í ¬¬
Kurva, jsou skvělí O_O ... hodně to pomůže mým maličkostem, které dělám v Bashi 😀
Skripty jsou super! Jaký velký příspěvek vážně, přesně to, co jsem hledal.
PS: Fórum nefunguje.
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.
No, doufejme, že to není nic vážného.
Byl tento „plev“ zahrnut také do Code Ninja? XD
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ů.
Děkuji, opravdu se mi líbilo
Ověření vstupních parametrů je velmi užitečné. Nevěděl jsem, jak vytvořit nabídky =)
Skvělý…. teď můžu svému skriptu churros hehehe dát nějakou „tvrdost“
Je velkým potěšením vidět, jak naše skromná práce v CodeNinja slouží mezinárodní linuxové komunitě
Průhledná! 🙂
Všechno má pomáhat a společně přispívat, a ne vytvářet plameny, že? 😉
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"
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?
Nainstalujte si následující program
aptitude nainstalovat autolog
A máte konfigurační soubor v /etc/autolog.conf
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 ? 🙁
Napište na můj email (kzkggaara[at]desdelinux[dot]net), abyste mluvili klidněji, rád vám pomohu :)
Velké díky, příteli, prošel jsi!
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
vynikající ... myslím, že je velmi dobré se dostat do ulity
díky
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 😀
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
Proč při vytváření nabídky používáte funkci read foo? rychlé odpovědi, které potřebuji