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 ¬¬
Šūdas, jie puikūs O_O ... tai labai padės mano smulkmenoms, kurias darau Bash'e 😀
Scenarijai yra super! Koks didelis indėlis rimtai, tik tai, ko aš ieškojau.
PS: Forumas neveikia.
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.
Na gerai, tikėkimės, kad tai nieko rimto.
Ar tas „pelavas“ taip pat buvo įtrauktas į „Code Ninja“? XD
Man patinka bash 😉 galia ir jie man pasakė, kam reikalinga C kalba ... na, apvalkalo scenarijuje yra daug pažįstamų komandų.
Ačiū, man labai patiko
Įvesties parametrų patvirtinimas yra labai naudingas. Aš nežinojau, kaip sudaryti meniu =)
Puiku…. Dabar aš galiu suteikti tam tikrą „kietumą“ savo scenarijui churros lol
Labai malonu matyti, kaip mūsų kuklus darbas „CodeNinja“ tarnauja tarptautinei „Linux“ bendruomenei
Aišku! 🙂
Viskas yra padėti ir prisidėti kartu, o ne kurti liepsnas, tiesa? 😉
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“
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?
Įdiekite šią programą
tinkamumo diegimas autologas
Konfigūracijos failą turite /etc/autolog.conf
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 ? 🙁
Rašykite į mano el. laišką (kzkggaara[at]desdelinux[taškas]net) kad kalbėtų ramiau, mielai padėsiu :)
Labai ačiū drauge, tu praėjai!
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ū
puikus ... manau, kad labai gerai patekti į kiautą
Gracias
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 😀
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
Kodėl kurdami meniu naudojate „read foo“? man reikia greitų atsakymų