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.
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.
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.
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.
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.
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.
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.
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.
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.
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)):
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.
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.
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.
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.
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.
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.
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.
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.
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ì.
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.
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.
Bash Scripting Part 4, Input & Output - quì parlemu di descriptori di fugliale è travagliendu cun elli, di input, output, errors, output redirection streams.
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.
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.
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.