Kasulikud shelliskriptid mis tahes programmis

sisse lööma See on arvutiprogramm, mille ülesandeks on tellimuste tõlgendamine. See põhineb Unix ja kirjutati projekti jaoks GNU on vaikimisi kest enamikus jaotistes GNU / Linux. Tema nimi on lühend Bourne-Again kest (teine ​​kest Bourne), mängides sõnadega (uuesti sündinud tähendab taassündi) kohta Bourne'i kest (sh), mis oli Unixi üks esimesi suuri tõlke.

Täna näitame mõnda shelliskripti, mis võivad arendajatele väga kasulikud olla. Enamik töötab ükskõik millises kestas Unix, kuigi mõned nõuavad, et need täidaks spetsiaalselt sisse lööma.

Takistage privilegeeritud kasutajatel skripti käivitamast

Mõni skript täidab haldusülesandeid, mistõttu võime soovida, et skripti käitaks ainult juurkasutaja. Sel juhul saame kasutada midagi sellist:

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

Luba skripti käivitamine ainult konkreetsele kasutajale

Sarnaselt ülaltoodud koodiga võime soovida, et skripti käitaks ainult konkreetne kasutaja. Me teeme seda nii:

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

Veenduge, et teenus / protsess töötab

Kui me tahame teada, kas mõni teenus või programm töötab, võiksime seda skripti kasutada (sel juhul kontrollib see, et Apache töötab):

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

Looge lukufail

Mõnikord peame veenduma, et skripti ei käitata kaks või enam korda korraga. Selleks saame kasutada lukufaile. See on skripti lihtne versioon, mis võimaldab meil seda teha:

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

Sel juhul kontrollitakse, kas fail mis iganes.lukk olemas. Juhul kui see on olemas, EI täida oma ülesandeid. Kui seda pole, loob see faili, käivitab käivitamiseks vajalikud toimingud ja eemaldab selle. Kuid see pole täiesti usaldusväärne. Mis siis, kui meie skript töötab, on see järsult suletud?

Sel juhul lukufaili ei kustutata ja seetõttu ei lubaks see meil skripti uuesti käivitada. Nende juhtumite kajastamiseks võiksime kasutada käsku trap, mis võimaldab meil käske täita juhul, kui meie skript ootamatult lõpeb. See on täpsem versioon, mis salvestab ka lukustusfailis selle käivitava skripti PID:

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

Saame käsust natuke paremini aru lõks. Selle süntaks on põhimõtteliselt järgmine: lõksu käsusignaal [signaal ...]; kus signaal on lõpetamissignaal, mida soovite püüda. Kui soovite saadaolevate signaalide loendit näha, võite käivitada käsu kill -l. Eelmisel juhul kasutati INT-signaale (haarab Ctrl + c tekitatud katkestuse), TINGIMUSED (lõpetamine on loodud tapmiskäsuga) ja EXIT (skripti normaalne lõpetamine, kas sellepärast, et käivitada pole enam ridu, või seetõttu, et see puutub kokku käsuga exit).

Menüü Valikud

Menüü koostamiseks, kus lubame kasutajal valida rea ​​võimalusi, saame kasutada järgmist skeemi:

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

Enne skripti käivitamist küsige kinnitust

Mõnikord on kasulik, kui kasutaja kinnitab lausepartii täitmise, see tähendab tüüpiline teade, mis palub kasutajal sisestada jah või ei. Saame seda teha nii:

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

Artikli lõpp. Lihtsalt suurepärane 😀

Muuda: Tühikute ja vahelehtedega peate olema ettevaatlik, mis mingil põhjusel ei tule välja ¬¬


Jäta oma kommentaar

Sinu e-postiaadressi ei avaldata. Kohustuslikud väljad on tähistatud *

*

*

  1. Andmete eest vastutab: Miguel Ángel Gatón
  2. Andmete eesmärk: Rämpsposti kontrollimine, kommentaaride haldamine.
  3. Seadustamine: teie nõusolek
  4. Andmete edastamine: andmeid ei edastata kolmandatele isikutele, välja arvatud juriidilise kohustuse alusel.
  5. Andmete salvestamine: andmebaas, mida haldab Occentus Networks (EL)
  6. Õigused: igal ajal saate oma teavet piirata, taastada ja kustutada.

  1.   KZKG ^ Gaara DIJO

    Kurat, nad on toredad O_O ... see aitab palju minu pisiasjadele, mida ma Bashis teenin 😀

  2.   ren434 DIJO

    Skriptid on super! Milline suur panus on tõsiselt, just see, mida ma otsisin.

    PS: Foorum on maas.

    1.    KZKG ^ Gaara DIJO

      Jah, server, kuhu foorum on ühendatud, pole võrgus, pole aimugi, miks ... kirjutasime selle eest hoolitsevale sõbrale meili, et näha, mida ta meile vastab 🙂

      Tervitused.

  3.   ren434 DIJO

    Ahjaa, loodame, et see pole midagi tõsist.

  4.   nohu DIJO

    Kas see "sõkra" oli ka Code Ninjas? XD

  5.   Taregon DIJO

    Mulle meeldib bash power jõud ja nad ütlesid mulle, milleks C keel on mõeldud ... noh, shelliskriptis on palju tuttavaid käske.

  6.   Christopher DIJO

    Aitäh, mulle väga meeldis

  7.   inglitera DIJO

    Sisendparameetrite valideerimine on väga kasulik. Ma ei teadnud, kuidas menüüsid teha =)

  8.   Hyuuga_neji DIJO

    Suurepärane ... nüüd saan oma stsenaariumile churros lol anda mõne "kõvaduse"

  9.   ronk DIJO

    Suur rõõm on näha, kuidas meie tagasihoidlik töö CodeNinjas teenib rahvusvahelist Linuxi kogukonda

    1.    KZKG ^ Gaara DIJO

      Selge! 🙂
      Kõik on selleks, et koos aidata ja panustada, mitte leeke tekitada, eks? 😉

  10.   diego DIJO

    Töötavat protsessiskripti võiks veidi täiustada, kui panete valiku protsessi kohta, millest soovite teada, see näeks välja umbes selline:

    #! / bin / bash
    kaja "Valige teenus"
    lugege teenust
    # SERVICE = 'mysql'
    kui ps kirves | grep -v grep | grep $ SERVICE> / dev / null
    SIIS
    kaja "Teenus $ SERVICE töötab"
    teine
    kaja "teenus $ SERVICE on peatatud"

  11.   Jua Carlos C. DIJO

    Olen teie skriptidega väga praktiline, kuid otsin spetsiaalset skripti, et lahendada minu probleem, mis on järgmine: Meil ​​on ettevõttes rakendusserver, mis võimaldab sisemistel kasutajatel sellele telneti kaudu juurde pääseda ja käivitada spetsiaalse rakenduse see on piiratud Litsentside puhul kasutavad kasutajad kuritarvitusi ja avavad rohkem kui ühe telneti, et võtta üle kaks või enam litsentsi, nii et minu arvates on skript see, et mingil meetodil kontrollige, milline telneti protsess on üle 2 tunni passiivne ja saadab seetõttu tapmise see pid, kas saaksid mind aidata?

    1.    diego DIJO

      Installige järgmine programm

      sobivuse installimine autolog

      Ja konfiguratsioonifail, mis teil on /etc/autolog.conf

  12.   Tito DIJO

    Suurepärane, sõber, võin teile küsimuse esitada, mul on vaja shelliskripti koos valikutega ja olen selle aluseks võtnud teie ja see töötab suurepäraselt, kuid üks võimalustest peab saatma e-kirju (kasutades posttifixi), see küsib teemat, teksti ja saajad ekraanil ning mis saadavad ja kontrollivad, kas see on õigesti saadetud, koos mailq-iga näen järjekorda ja näen, kas see on saadetud, aga kuidas ma saadan käsud käsuga, kasutades muutujaid, mis said teema, teksti ja adressaadid ? 🙁

    1.    KZKG ^ Gaara DIJO

      Kirjutage mu meilile (kzkggaara[at]desdelinux[dot]net), et rääkida rahulikumalt, aitan teid hea meelega :)

      1.    Tito DIJO

        Suur tänu sõber, sa läksid läbi!

  13.   Fer DIJO

    Tere, hea.
    Olen nende suurepäraste näidetega kokku puutunud just siis, kui vajasin menüüd.
    Olen seda teinud ja ei saa seda tööle panna (eelmistes sammudes).
    Mul on 247 elementi, mis viitavad erinevatele territoriaalsetele domeenidele.
    Mul on vaja menüüd, kust riiki valida:
    #! / bin / bash
    selge
    samas:
    do
    kaja »Valige proovimiseks riik»
    kaja «1. Afganistan (AF) »
    kaja «2. Albaania (AL) »
    kaja «3. Saksamaa (DE) »
    kaja «5. Angola (AO) »
    kaja «6. Anguilla (AI) »
    .. ja jätkub kuni 247. aastani

    echo -n "Valige suvand [1 - 247]"
    loe valik
    juhul $ variant
    1) kaja "see oled sina:"; whoami ;;
    2) kaja "teil on see"; df ;;
    3) kaja ""; uname -r ;;
    4) kaja "hüvasti"; väljapääs 1 ;;
    5) kaja "see oled sina:"; whoami ;;
    6) kaja "see oled sina:"; whoami ;;
    … Ja jätkub kuni 247. aastani
    *) echo "$ opc on vale valik. See on nii raske? ";
    kaja "Jätkamiseks vajutage klahvi ...";
    loe foo ;;
    et C
    tehtud

    Käitumine on järgmine:
    Kõik valikud, välja arvatud 4, mis on väljund, kustutab sisestatud numbri ja ootab uut numbrit.
    4 sisestamine tuleb välja.
    Kui panen koodi 4 mõnele muule reale (ütleme näiteks 150), tuleb see probleemideta võrdselt välja.
    Olen ka proovinud koodi sellesse vormingusse panna:
    151) kaja "see sa oled:";
    kes ma olen ;;
    sama tulemusega.
    Huvitav, kas nii pika menüü jaoks on paremaid võimalusi ja muidugi teen ka valesti.
    Abi oleks väga tänulik, aitäh

  14.   Ainult Raul DIJO

    suurepärane ... minu meelest on kestasse sattumine väga hea

    tänan

  15.   Marcos DIJO

    tore, kuidas ma saan oma bashi failiga tööle panna
    Näide:

    upload.sh fotodelavecina.jpg

    arvan, et minu bashi skriptil "upload.sh" on juurdepääsuteave minu ftp-le

    tervitused ja tänud 😀

  16.   netzulo ntx DIJO

    Hea mees, tänan teid väga kõigi skriptide eest, olen loonud CentOS-serveri ja te ei tea, kui hästi need mallid mulle tulevad, palun võtke minuga ühendust e-posti teel. Ma tahan teile midagi välja pakkuda

  17.   gabriel balderramos DIJO

    Miks kasutate menüü koostamisel read foo? mul on vaja kiireid vastuseid