Naudingi apvalkalo scenarijai bet kurioje programoje

Bash Tai kompiuterinė programa, kurios funkcija yra interpretuoti užsakymus. Jo pagrindas yra unix ir buvo parašyta projektui GNU yra numatytasis apvalkalas daugumoje GNU / Linux. Jo vardas yra santrumpa „Bourne-Again Shell“ (kitas apvalkalas), žaisdamas žodžius (vėl gimęs reiškia atgimimą) apie Bourne'o lukštas (sh), kuris buvo vienas pirmųjų pagrindinių „Unix“ vertėjų žodžiu.

Šiandien mes parodysime keletą „shell“ scenarijų, kurie gali būti labai naudingi kūrėjams. Dauguma dirba bet kokiu apvalkalu unix, nors kai kurie reikalauja, kad juos specialiai įvykdytų Bash.

Neleiskite privilegijuotiems vartotojams paleisti scenarijaus

Kai kurie scenarijai atlieka administracines užduotis, todėl galbūt norėsime, kad scenarijų paleistų tik pagrindinis vartotojas. Tokiu atveju galime naudoti kažką panašaus:

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

Leisti scenarijų vykdyti tik konkrečiam vartotojui

Panašiai kaip aukščiau pateiktas kodas, galbūt norėsime, kad scenarijų vykdytų tik konkretus vartotojas. Mes tai darome taip:

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

Patikrinkite, ar paslauga / procesas veikia

Jei norime sužinoti, ar veikia kokia nors tarnyba ar programa, galime naudoti šį scenarijų (šiuo atveju jis patikrina, ar apache bėga):

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

Sukurkite užrakto failą

Kartais turime įsitikinti, kad scenarijus neveikia du ar daugiau kartų vienu metu. Tam galime naudoti užrakto failus. Tai yra paprasta scenarijaus versija, leidžianti mums tai padaryti:

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

Šiuo atveju patikrinama, ar failas kas bebūtų.užrakinti egzistuoti. Jei scenarijus egzistuoja, scenarijus nevykdo savo užduočių. Jei jo nėra, jis sukuria failą, vykdo užduotis, kurias reikia vykdyti, ir pašalina. Bet tai nėra visiškai patikima. Ką daryti, jei mūsų scenarijus veikia staiga uždarytas?

Tokiu atveju užrakto failas nebus ištrintas, todėl jis neleis vėl paleisti scenarijaus. Norėdami aptarti tuos atvejus, mes galime naudoti komandą „trap“, kuri leidžia mums vykdyti komandas tuo atveju, jei scenarijus netikėtai baigsis. Tai yra tobulesnė versija, kuri taip pat išsaugo scenarijaus, kuris jį vykdo, užrakto faile 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

Supraskime komandą šiek tiek geriau spąstai. Jo sintaksė iš esmės yra tokia: spąstų komandos signalas [signalas ...]; kur signalas yra nutraukimo signalas, kurį norite sugauti. Jei norite pamatyti galimų signalų sąrašą, galite paleisti komandą kill -l. Ankstesniam atvejui buvo naudojami INT signalai (fiksuoja „Ctrl“ + c padarytą nutraukimą), TERMINAS (nutraukimas sukurtas nužudymo komanda) ir EXIT (įprastas scenarijaus nutraukimas arba dėl to, kad nebėra daugiau eilučių, arba todėl, kad jis rodomas komandoje exit).

Parinkčių meniu

Norėdami sukurti meniu, kuriame vartotojui leidžiame pasirinkti daugybę variantų, galime naudoti šią schemą:

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

Prieš paleisdami scenarijų, paprašykite patvirtinimo

Kartais naudinga, jei vartotojas patvirtina teiginių paketo vykdymą, ty tipinį pranešimą, kuriame prašoma vartotojo įvesti taip arba ne. Tai galime padaryti taip:

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

Straipsnio pabaiga. Tiesiog puiku 😀

Redaguoti: Turite būti atsargūs su tarpais ir skirtukais, kurie dėl kokių nors priežasčių neišlenda ¬¬


Palikite komentarą

Jūsų elektroninio pašto adresas nebus skelbiamas. Privalomi laukai yra pažymėti *

*

*

  1. Atsakingas už duomenis: Miguel Ángel Gatón
  2. Duomenų paskirtis: kontroliuoti šlamštą, komentarų valdymą.
  3. Įteisinimas: jūsų sutikimas
  4. Duomenų perdavimas: Duomenys nebus perduoti trečiosioms šalims, išskyrus teisinius įsipareigojimus.
  5. Duomenų saugojimas: „Occentus Networks“ (ES) talpinama duomenų bazė
  6. Teisės: bet kuriuo metu galite apriboti, atkurti ir ištrinti savo informaciją.

  1.   KZKG ^ Gaara sakė

    Šūdas, jie puikūs O_O ... tai labai padės mano smulkmenoms, kurias darau Bash'e 😀

  2.   Ren434 sakė

    Scenarijai yra super! Koks didelis indėlis rimtai, tik tai, ko aš ieškojau.

    PS: Forumas neveikia.

    1.    KZKG ^ Gaara sakė

      Taip, serveris, kuriame yra forumas, yra neprisijungęs, neįsivaizduoji, kodėl ... parašėme el. Laišką draugui, kuris tuo rūpinasi, norėdamas pamatyti, ką jis mums atsako 🙂

      Sveikinimai.

  3.   Ren434 sakė

    Na gerai, tikėkimės, kad tai nieko rimto.

  4.   nyksta sakė

    Ar tas „pelavas“ taip pat buvo įtrauktas į „Code Ninja“? XD

  5.   taregonas sakė

    Man patinka bash 😉 galia ir jie man pasakė, kam reikalinga C kalba ... na, apvalkalo scenarijuje yra daug pažįstamų komandų.

  6.   Christopher sakė

    Ačiū, man labai patiko

  7.   angelų ašmenys sakė

    Įvesties parametrų patvirtinimas yra labai naudingas. Aš nežinojau, kaip sudaryti meniu =)

  8.   Hyuuga_Neji sakė

    Puiku…. Dabar aš galiu suteikti tam tikrą „kietumą“ savo scenarijui churros lol

  9.   varnas sakė

    Labai malonu matyti, kaip mūsų kuklus darbas „CodeNinja“ tarnauja tarptautinei „Linux“ bendruomenei

    1.    KZKG ^ Gaara sakė

      Aišku! 🙂
      Viskas yra padėti ir prisidėti kartu, o ne kurti liepsnas, tiesa? 😉

  10.   diego sakė

    Vykdomas proceso scenarijus gali būti šiek tiek patobulintas pasirinkus pasirinkti norimą procesą, jis atrodytų maždaug taip:

    #! / bin / bash
    aidas „Pasirinkite paslaugą“
    perskaitykite PASLAUGĄ
    # SERVICE = 'mysql'
    jei ps kirvis | grep -v grep | grep $ SERVICE> / dev / null
    tada
    echo "$ SERVICE paslauga veikia"
    kitas
    aidas „$ SERVICE paslauga sustabdyta“

  11.   Jua Carlos C. sakė

    Turiu labai praktiškų scenarijų, bet ieškau specialaus scenarijaus, kad išspręstų turimą problemą, kuri yra ši: Bendrovėje turime programų serverį, prie kurio vidiniai vartotojai jį pasiekia naudodamiesi telnet, ir vykdo specialią programą, kuri yra ribotas Dėl licencijų vartotojai piktnaudžiauja ir atidaro daugiau nei vieną „telnet“, kad perimtų 2 ar daugiau licencijų, todėl manau, kad scenarijus tam tikru metodu patikrina, kuris „telnet“ procesas neveikia ilgiau nei 2 valandas, todėl nusiųskite tam nužudymą pid, gal galėtum man padėti?

    1.    diego sakė

      Įdiekite šią programą

      tinkamumo diegimas autologas

      Konfigūracijos failą turite /etc/autolog.conf

  12.   Tito sakė

    Puiku, drauge, aš galiu užduoti tau klausimą, man reikia apvalkalo scenarijaus su parinktimis, kurį aš grindžiau tavo ir jis veikia puikiai, tačiau viena iš parinkčių turi siųsti el. Laiškus (naudojant „postifix“), jis prašo temos, teksto ir gavėjai ekrane ir kas siunčia ir patikrina, ar jis išsiųstas teisingai, su mailq galiu pamatyti eilę ir pamatyti, ar ji buvo išsiųsta, bet kaip išsiųsti laiškus komanda naudodamas kintamuosius, kurie gavo temą, tekstą ir gavėjus ? 🙁

    1.    KZKG ^ Gaara sakė

      Rašykite į mano el. laišką (kzkggaara[at]desdelinux[taškas]net) kad kalbėtų ramiau, mielai padėsiu :)

      1.    Tito sakė

        Labai ačiū drauge, tu praėjai!

  13.   Fer sakė

    Labas geras.
    Su šiais puikiais pavyzdžiais susidūriau būtent tada, kai man reikėjo meniu.
    Aš pradėjau tai daryti ir negaliu priversti jos veikti (atlikus ankstesnius veiksmus).
    Turiu 247 elementus, kurie nurodo skirtingas teritorines sritis.
    Man reikia meniu, iš kurio galima pasirinkti šalį:
    #! / bin / bash
    aiškus
    o:
    do
    aidas »Pasirinkite šalį, kurią norite išbandyti»
    aidas «1. Afganistanas (AF) »
    aidas «2. Albanija (AL) »
    aidas «3. Vokietija (DE) »
    aidas «5. Angola (AO) »
    aidas «6. Angilija (AI) »
    .. ir tęsiasi iki 247 m

    echo -n "Pasirinkite parinktį [1 - 247]"
    skaitymo parinktis
    atvejis $ parinktis
    1) aidas „tai tu:“; whoami ;;
    2) aidas „tu tai turi“;
    3) aidas ""; uname -r ;;
    4) aidas „iki pasimatymo“; išėjimas 1 ;;
    5) aidas „tai tu:“; whoami ;;
    6) aidas „tai tu:“; whoami ;;
    … Ir tęsiasi iki 247 m
    *) echo «$ opc yra netinkama parinktis. Tai taip sunku? ";
    aidas "Norėdami tęsti, paspauskite klavišą ...";
    skaityti foo ;;
    kad C
    Done

    Elgesys yra toks:
    Bet kuri parinktis, išskyrus 4, kuri yra išvestis, ištrina įvestą numerį ir laukia naujo numerio.
    Įvedus 4 išeina.
    Jei aš įdėsiu kodą 4 į bet kurią kitą eilutę (tarkime, 150), jis išeis vienodai be problemų.
    Taip pat bandžiau įdėti kodą tokiu formatu:
    151) aidi „tai tu esi:“;
    kas aš esu ;;
    su tuo pačiu rezultatu.
    Įdomu, ar yra geresnių variantų tokiam ilgam meniu, ir, žinoma, darau ir blogai.
    Pagalba būtų labai dėkinga, ačiū

  14.   Tik Raulis sakė

    puikus ... manau, kad labai gerai patekti į kiautą

    Gracias

  15.   Marcos sakė

    puiku, ei, kaip aš galiu priversti savo bashą dirbti su byla
    pavyzdys:

    upload.sh fotodelavecina.jpg

    manydamas, kad mano bash scenarijus „upload.sh“ turi prieigos prie mano ftp informaciją

    sveikinimai ir padėkos 😀

  16.   netzulo ntx sakė

    Geras žmogus, labai ačiū už visus scenarijus, aš sukūriau „CentOS“ serverį ir jūs nežinote, kaip gerai šie šablonai pas mane yra, prašau susisiekite su manimi el. Paštu. Noriu jums ką nors pasiūlyti

  17.   Gabrielius Balderramosas sakė

    Kodėl kurdami meniu naudojate „read foo“? man reikia greitų atsakymų