Bash scripts: u principiu

Bash scripts: u principiu
Bash Scripts Part 2: Loops
Scripts Bash, parte 3: opzioni di linea di cumanda è switch
Scripts Bash, parte 4: input è output
Bash scripts, parte 5: signali, funzioni di fondo, gestione di script
Bash Scripts, Part 6: Funzioni è Sviluppu di Biblioteche
Bash scripts, parte 7: sed è trattamentu di testi
Bash Scripts, Part 8: U awk Data Processing Language
Bash Scripts Part 9: Espressioni Regular
Bash Scripts Part 10: Esempii pratichi
Scripts Bash, parte 11: aspetta è automatizazione di utilità interattive

Oghje parlemu di scripts bash. Questu - script di linea di cumanda, scrittu per u bash shell. Ci sò altre cunchiglia, cum'è zsh, tcsh, ksh, ma ci focalizeremu nantu à bash. Stu materiale hè pensatu per tutti, l'unica cundizione hè a capacità di travaglià linea di cumanda Linux.

Bash scripts: u principiu

I script di linea di cumanda sò inseme di i stessi cumandamenti chì ponu esse inseriti da u teclatu, cullati in schedari è uniti da un scopu cumuni. À u listessu tempu, i risultati di u travagliu di e squadre ponu esse di valore indipendente o serve com'è input per altri gruppi. I scripts sò un modu putente per automatizà l'azzioni frequenti.

Bash scripts: u principiu

Allora, se parlemu di a linea di cummanda, vi permette di eseguisce parechji cumandamenti à una volta, inserendu cù un puntu e virgola:

pwd ; whoami

In fatti, sè vo avete pruvatu questu in u vostru terminal, u vostru primu script bash chì usa dui cumandamenti hè digià statu scrittu. Funziona cusì. Prima squadra pwd mostra infurmazione nantu à u cartulare di travagliu attuale, dopu u cumandamentu whoamimostra l'infurmazioni nantu à l'utilizatore chì site cunnessu.

Utilizendu stu approcciu, pudete cumminà quanti cumandamenti chì vulete nantu à una linea, u limitu hè solu u massimu di argumenti chì ponu esse passatu à u prugramma. Pudete definisce stu limitu cù u cumandimu seguente:

getconf ARG_MAX

A linea di cumanda hè un grande strumentu, ma avete da inserisce cumandamenti ogni volta chì avete bisognu. E se scrivemu un set di cumandamenti à un schedariu è simpricimenti chjamemu quellu schedariu per eseguisce? In fatti, u schedariu chì avemu parlatu hè chjamatu script di linea di cumanda.

Cumu funziona i scripts bash

Crea un schedariu viotu cù u cumandimu touch. In a so prima linea, avete bisognu di specificà quale shell avemu da aduprà. Ci interessa bash, cusì a prima linea di u schedariu seria:

#!/bin/bash

In altrò in stu schedariu, u simbulu hash hè utilizatu per indicà i cumenti chì a cunchiglia ùn processa micca. In ogni casu, a prima linea hè un casu particulari, hè un signu di libbra seguitu da un puntu d'esclamazione (sta sequenza hè chjamata shebang) è a strada per bash, indicà à u sistema chì u script hè statu creatu apposta per bash.

I cumandamenti di Shell sò siparati da un feed di linea, i cumenti sò siparati da un signu di libbra. Eccu ciò chì pare:

#!/bin/bash
# This is a comment
pwd
whoami

Quì, cum'è in a linea di cumanda, pudete scrive cumandamenti nantu à una linea, sepanduli cù un puntu e virgola. In ogni casu, se scrive cumandamenti nantu à e diverse linee, u schedariu hè più faciule da leghje. In ogni casu, a cunchiglia li processerà.

Stabbilimentu di Permissions nantu à un File Script

Salvà u schedariu dendu un nome myscript, è u script bash hè quasi finitu. Avà ferma solu per fà stu schedariu eseguibile, altrimenti, quandu pruvate di eseguisce, truverete un errore. Permission denied.

Bash scripts: u principiu
Tentativu di eseguisce un schedariu di script cù permessi cunfigurati incorrectamente

Facemu u schedariu eseguibile:

chmod +x ./myscript

Avà pruvemu à eseguisce:

./myscript

Dopu avè stabilitu i permessi, tuttu funziona cumu si deve.

Bash scripts: u principiu
Eseguite bè u script bash

Output di messagiu

Per stampà u testu à a cunsola Linux, utilizate u cumandimu echo. Utilizemu a cunniscenza di questu fattu è edità u nostru script, aghjunghjendu spiegazioni à i dati chì produci i cumandamenti digià in questu:

#!/bin/bash
# our comment is here
echo "The current directory is:"
pwd
echo "The user logged in is:"
whoami

Questu hè ciò chì succede dopu avè eseguitu u script aghjurnatu.

Bash scripts: u principiu
Outputing missaghji da un script

Avà pudemu vede etichette esplicative cù u cumandamentu echo. Se ùn sapete micca cumu edità un schedariu cù l'arnesi Linux, o se ùn avete micca vistu u cumandamentu prima echo, fighjate questu u materiale

Utilizà Variabili

Variabili permettenu di almacenà l'infurmazioni in un schedariu di script, cum'è i risultati di cumandamenti, per l'utilizazione da altri cumandamenti.

Ùn ci hè nunda di male à eseguisce cumandamenti individuali senza guardà i risultati di u so travagliu, ma e pussibulità di questu approcciu sò assai limitati.

Ci hè dui tipi di variàbili chì ponu esse utilizati in scripts bash:

  • Variabili di l'ambiente
  • Variabili d'utilizatori

Variabili di l'ambiente

Calchì volta i cumandamenti di cunchiglia anu bisognu di travaglià cù qualchi dati di u sistema. Per esempiu, cumu vede u cartulare di casa di l'utilizatore attuale:

#!/bin/bash
# display user home
echo "Home for the current user is: $HOME"

Per piacè nutate chì pudemu usà una variabile di sistema $HOME in virgulette doppie, questu ùn impedisce micca u sistema di ricunnosce. Eccu ciò chì succede se eseguite u script sopra.

Bash scripts: u principiu
Utilizà una Variabile di Ambiente in un Script

Ma chì si vulete vede un signu di dollaru? Pruvemu questu:

echo "I have $1 in my pocket"

U sistema detecterà un signu di dollaru in una stringa citata è assume chì avemu riferitu una variabile. U script hà da pruvà à vede u valore di una variabile indefinita $1. Questu hè micca ciò chì avemu bisognu. Chì fà ?

In questa situazione, aduprendu u caratteru di scappu, un backslash, prima di u signu di u dollaru aiuterà:

echo "I have $1 in my pocket"

U script hà da avà produttu esattamente ciò chì hè previstu.

Bash scripts: u principiu
Utilizà una Sequenza di Escape per Emette un Sign di Dollar

Variabili d'utilizatori

In più di e variabili di l'ambienti, i scripts bash permettenu di definisce è aduprà e vostre propiu variàbili in u script. Tali variàbili mantenenu un valore finu à chì u script finisci l'esekzione.

Cum'è cù e variàbili di u sistema, i variàbili di l'utilizatori ponu accede cù u signu di u dollaru:
TNW-CUS-FMP - codice promozionale per un scontu di 10% nantu à i nostri servizii, dispunibule per l'attivazione in 7 ghjorni

#!/bin/bash
# testing variables
grade=5
person="Adam"
echo "$person is a good boy, he is in grade $grade"

Eccu ciò chì succede dopu à eseguisce un tali script.

Bash scripts: u principiu
Variabili persunalizati in Script

Sustituzione di cumanda

Una di e funzioni più utili di i script bash hè a capacità di estrae l'infurmazioni da l'output di cumandamenti è l'assignà à variàbili, chì vi permette di utilizà sta informazione in ogni locu in u schedariu di script.

Questu pò esse fattu in dui maneri.

  • Cù u caratteru backtick "`"
  • Cù l'aiutu di a custruzzione $()

Quandu aduprate u primu approcciu, fate cura di ùn include micca una sola citazione in u locu di u backtick. U cumandamentu deve esse chjusu in dui tali icone:

mydir=`pwd`

In u sicondu approcciu, u listessu hè scrittu cusì:

mydir=$(pwd)

È u script, à a fine, puderia vede cusì:

#!/bin/bash
mydir=$(pwd)
echo $mydir

Duranti u so funziunamentu, u risultatu di u cumandamentu pwdserà guardatu in una variabile mydir, u cuntenutu di quale, usendu u cumandamentu echo, andarà à a cunsola.

Bash scripts: u principiu
Script chì salva i risultati di u cumandamentu in una variàbile

Operazioni matematiche

Per fà operazioni matematiche in un schedariu di script, pudete aduprà una custruzzione di a forma $((a+b)):

#!/bin/bash
var1=$(( 5 + 5 ))
echo $var1
var2=$(( $var1 * 2 ))
echo $var2

Bash scripts: u principiu
Operazioni matematiche in un script

se-tandu struttura di cuntrollu

In certi scenarii, hè necessariu di cuntrullà u flussu di l'esecuzione di cumandamenti. Per esempiu, se un certu valore hè più grande di cinque, una azzione deve esse realizatu, altrimenti un altru. Questu hè applicabile in assai situazioni, è quì a struttura di cuntrollu ci aiuterà if-then. In a so forma più simplice, pare cusì:

if команда
then
команды
fi

Eccu un esempiu di travagliu:

#!/bin/bash
if pwd
then
echo "It works"
fi

In questu casu, se l'esekzione di u cumandamentu pwdcompie cù successu, u testu "funziona" serà visualizatu in a cunsola.

Utilizemu a cunniscenza chì avemu è scrivite un scenariu più cumplessu. Diciamu chì avemu bisognu di truvà un utilizatore /etc/passwd, è s'ellu si trova, informa chì esiste.

#!/bin/bash
user=likegeeks
if grep $user /etc/passwd
then
echo "The user $user Exists"
fi

Questu hè ciò chì succede dopu à eseguisce stu script.

Bash scripts: u principiu
Ricerca di l'utilizatori

Quì avemu usatu u cumandamentu grepper circà un utilizatore in un schedariu /etc/passwd. Sì a squadra grepscunnisciutu per voi, a so descrizzione pò esse truvata ccà.

In questu esempiu, se l'utilizatore hè truvatu, u script mostrarà un missaghju appropritatu. E se l'utilizatore ùn si pudia truvà? In questu casu, u script hà da compie l'esekzione senza dì nunda. Mi piacerebbe ch'ellu ci parlasse ancu di questu, allora migliuremu u codice.

A custruzzione di cuntrollu se-then-else

Per chì u prugramma sia capace di rapportà i risultati di una ricerca riescita è di un fallimentu, usemu a custruzzione if-then-else. Eccu cumu funziona:

if команда
then
команды
else
команды
fi

Se u primu cumandamentu torna cero, chì significa chì hè stata eseguita cù successu, a cundizione serà vera è l'esekzione ùn viaghja micca longu u ramu. else. Altrimenti, s'è qualcosa altru chè zero hè tornatu, chì significa fallimentu, o un risultatu falsu, i cumandamenti dopu else.

Scrivemu u seguente script:

#!/bin/bash
user=anotherUser
if grep $user /etc/passwd
then
echo "The user $user Exists"
else
echo "The user $user doesn’t exist"
fi

A so esecuzione hè cascata in a linea else.

Bash scripts: u principiu
Esecuzione di un script cù una custruzzione if-then-else

Ebbè, andemu avanti è dumandemu di e cundizioni più difficili. E se avete bisognu di verificà micca una cundizione, ma parechji? Per esempiu, se si trova l'utilizatore necessariu, un missaghju deve esse affissatu, se qualchì altra cundizione hè scontru, un altru missaghju deve esse affissatu, è cusì. In una tale situazione, e cundizioni nidificate ci aiutanu. Sembra cusì:

if команда1
then
команды
elif команда2
then
команды
fi

Se u primu cumandamentu torna cero, chì indica a so esecuzione successu, i cumandamenti in u primu blocu seranu eseguiti then, altrimente, se a prima cundizione hè falsa, è se u sicondu cumandamentu torna cero, u sicondu bloccu di codice serà eseguitu.

#!/bin/bash
user=anotherUser
if grep $user /etc/passwd
then
echo "The user $user Exists"
elif ls /home
then
echo "The user doesn’t exist but anyway there is a directory under /home"
fi

In un tali script, pudete, per esempiu, creà un novu utilizatore cù u cumandamentu useradd, se a ricerca ùn hà micca restituutu risultati, o fate qualcosa d'altru utile.

Comparazione di numeri

In scripts pudete paragunà i valori numerichi. Quì sottu hè una lista di cumandamenti pertinenti.

n1 -eq n2Ritorna vera se n1 ugguali n2.
n1 -ge n2 Ritorna vera se n1più o uguali n2.
n1 -gt n2Ritorna vera se n1 più di più n2.
n1 -le n2Ritorna vera se n1menu o uguali n2.
n1 -lt n2Ritorna vera se n1 hè menu di n2.
n1 -ne n2Ritorna vera se n1micca uguali n2.

Comu esempiu, pruvemu unu di l'operatori di paraguni. Nota chì l'espressione hè chjusa in parentesi quadrate.

#!/bin/bash
val1=6
if [ $val1 -gt 5 ]
then
echo "The test value $val1 is greater than 5"
else
echo "The test value $val1 is not greater than 5"
fi

Eccu ciò chì questu cumandimu hà da pruduce.

Bash scripts: u principiu
Paragunà numeri in scripts

Valore variabile val1più grande di 5, u ramu finisci per esse eseguitu thenoperatore di paragone è u messagiu currispundente hè visualizatu in a cunsola.

Paragone di stringhe

I script ponu ancu paragunà i valori di stringa. L'operatori di paraguni parevanu abbastanza sèmplice, ma l'operatori di paraguni di stringa anu certe peculiarità, chì avemu da toccu quì sottu. Eccu una lista di l'operatori.

str1 = str2 Testa e stringhe per l'ugualità, torna vera se e stringhe sò identiche.
str1 != str2Ritorna vera se e corde ùn sò micca identiche.
str1 < str2Ritorna vera se str1menu di str2.
str1 > str2 Ritorna vera se str1più chè str2.
-n str1 Ritorna vera se a lunghezza str1Sopra à zero.
-z str1Ritorna vera se a lunghezza str1uguali à zero.

Eccu un esempiu di paragone di stringa in un script:

#!/bin/bash
user ="likegeeks"
if [$user = $USER]
then
echo "The user $user  is the current logged in user"
fi

In u risultatu di l'esekzione di script, avemu u seguitu.

Bash scripts: u principiu
Paragone di String in Scripts

Eccu una caratteristica di paragone di stringa chì vale a pena menzionate. Vale à dì, l'operatori ">" è "<" deve esse scappatu cù un backslash, altrimenti u script ùn funziona micca bè, ancu s'ellu ùn ci appare micca missaghju d'errore. U script interpreta u signu ">" cum'è un cumandimu per redirige a output.

Eccu cumu si vede u travagliu cù questi operatori in codice:

#!/bin/bash
val1=text
val2="another text"
if [ $val1 > $val2 ]
then
echo "$val1 is greater than $val2"
else
echo "$val1 is less than $val2"
fi

Eccu i risultati di u script.

Bash scripts: u principiu
Paragone di stringhe, avvistu lanciatu

Nota chì u script, ancu s'ellu hè in esecuzione, dà un avvisu:

./myscript: line 5: [: too many arguments

Per caccià stu avvisu, cuncludemu $val2 tra virgolette doppie:

#!/bin/bash
val1=text
val2="another text"
if [ $val1 > "$val2" ]
then
echo "$val1 is greater than $val2"
else
echo "$val1 is less than $val2"
fi

Avà tuttu funziona cumu si deve.

Bash scripts: u principiu
Paragone di stringhe

Una altra caratteristica di l'operatori ">" è "<" hè cumu si travaglianu cù caratteri maiuscule è minuscule. Per capiscenu sta funzione, preparemu un schedariu di testu cù u cuntenutu seguente:

Likegeeks
likegeeks

Salvà cù un nome myfileè poi eseguite u cumandimu seguitu in u terminal:

sort myfile

Serà sorte e linee da u schedariu cusì:

likegeeks
Likegeeks

squadra sort, per difettu, sorte i strings in ordine crescente, vale à dì a lettera minuscula in u nostru esempiu hè menu di a lettera maiuscula. Avà preparemu un script chì paragunà e stesse stringhe:

#!/bin/bash
val1=Likegeeks
val2=likegeeks
if [ $val1 > $val2 ]
then
echo "$val1 is greater than $val2"
else
echo "$val1 is less than $val2"
fi

Se l'eseguite, risulta chì tuttu hè l'inversu - a lettera minuscula hè avà più grande di quella maiuscula.

Bash scripts: u principiu
cumanda di sorte è paragone di stringa in u schedariu di script

In i cumandamenti di paraguni, e lettere maiuscule sò più chjuche cà e lettere minuscule. A comparazione di stringhe quì hè fatta paragunendu i codici di caratteri ASCII, l'ordine di sorte hè cusì dipende di i codici di caratteri.

squadra sort, à u turnu, usa l'ordine di sorte specificatu in i paràmetri di lingua di u sistema.

Cuntrolli di schedari

Forsi i cumandamenti sottu sò usati più spessu in bash scripts. Permettenu di verificà diverse cundizioni riguardanti i schedari. Eccu una lista di sti cumandamenti.

-d fileVerifica se un schedariu esiste è s'ellu hè un cartulare.
-e fileVerificate se un schedariu esiste.
-f file Verifica se un schedariu esiste è s'ellu hè un schedariu.
-r fileVerifica se u schedariu esiste è hè leggibile.
-s file ПVerifica se u schedariu esiste è ùn hè micca viotu.
-w fileVerifica se u schedariu esiste è hè scrivibile.
-x fileVerifica se un schedariu esiste è hè eseguibile.
file1 -nt file2 Verificate s'ellu hè più novu file1chè file2.
file1 -ot file2Verificate se più vechje file1chè file2.
-O file Cuntrolla se u schedariu esiste è hè di l'utilizatore attuale.
-G fileVerifica se u schedariu esiste è se u so ID di gruppu currisponde à l'ID di gruppu di l'utilizatori attuale.

Questi cumandamenti, è ancu parechji altri discututi oghje, sò faciuli di ricurdà. I so nomi, essendu abbreviazioni per diverse parolle, indicanu direttamente i cuntrolli chì facenu.

Pruvemu unu di i cumandamenti in pratica:

#!/bin/bash
mydir=/home/likegeeks
if [ -d $mydir ]
then
echo "The $mydir directory exists"
cd $ mydir
ls
else
echo "The $mydir directory does not exist"
fi

Stu script, per un repertoriu esistente, mostrarà u so cuntenutu.

Bash scripts: u principiu
Elencu u cuntenutu di un annuariu

Cridemu chì pudete sperimentà cù u restu di i cumandamenti nantu à u vostru propiu, tutti appiicanu secondu u listessu principiu.

Risultati

Oghje avemu parlatu di cumu cumincià à scrive script bash è copre alcune cose basi. In fatti, u tema di u prugramma bash hè enormu. Questu articulu hè una traduzzione di a prima parte di una grande serie di 11 materiali. Se vulete cuntinuà avà, quì hè una lista di l'uriginali di sti materiali. Per comodità, quellu chì a traduzzione avete appena lettu hè inclusu quì.

  1. Bash Script Passu Per Passu - quì parlemu di cumu cumincià à creà scripts bash, l'usu di variàbili hè cunsideratu, custruzzioni cundiziunali, calculi, paraguni di numeri, strings, scuperta infurmazione nantu à i schedari sò descritti.
  2. Bash Scripting Part 2, Bash the awesome - quì sò revelate e caratteristiche di travaglià cù i loops for and while.
  3. Bash Scripting Part 3, Parametri è opzioni - stu materiale hè dedicatu à i paràmetri di a linea di cummandu è e chjave chì ponu esse passati à i scripts, travagliendu cù dati chì l'utilizatore inserisce è chì ponu esse leghje da i schedari.
  4. Bash Scripting Part 4, Input & Output - quì parlemu di descriptori di fugliale è travagliendu cun elli, di input, output, errors, output redirection streams.
  5. Bash Scripting Part 5, Sighals & Jobs - stu materiale hè dedicatu à i signali Linux, u so trasfurmazioni in scripts, u lanciu di script programatu.
  6. Bash Scripting Part 6, Funzioni - quì pudete amparà nantu à a creazione è l'usu di e funzioni in scripts, nantu à u sviluppu di biblioteche.
  7. Bash Scripting Part 7, Utilizendu sed - questu articulu hè di travaglià cù l'editore di testu sed stream.
  8. Bash Scripting Part 8, Utilizendu awk - stu materiale hè dedicatu à a prugrammazione in a lingua di trattamentu di dati awk.
  9. Bash Scripting Part 9, Espressioni Regular - quì pudete leghje nantu à l'usu di l'espressioni regulare in scripts bash.
  10. Bash Scripting Part 10, Esempi pratichi - quì sò i metudi di travaglià cù i missaghji chì ponu esse mandati à l'utilizatori, è ancu un metudu per monitorà u discu.
  11. Bash Scripting Part 11, Expect Command - stu materiale hè dedicatu à u strumentu Expect, cù quale pudete automatizà l'interazzione cù utilità interattive. In particulare, si tratta di aspettate scripts è cumu interagiscenu cù scripts bash è altri prugrammi.

Pensemu chì una di e cose grandi di questa serie di articuli hè chì parte da u più basicu, adattatu per l'utilizatori di ogni livellu, porta gradualmente à temi abbastanza serii, dendu à tutti l'uppurtunità di avanzà in u script di linea di cummanda Linux.

Cari lettori! Dumandemu à i guru di bash-programmazione di parlà di cumu si sò ghjunti à l'altitudine di a maestria, sparte sicreti, è aspettemu impressioni da quelli chì anu scrittu u so primu script.

Bash scripts: u principiu

Solu l'utilizatori registrati ponu participà à l'indagine. Firmà lu, per piacè.

Traduce u restu di a serie di articuli ?

  • Iè!

  • Nisun bisognu

1030 utilizatori anu vutatu. 106 utilizatori si sò astenuti.

Source: www.habr.com

Add a comment