Bash è un linguaggio abbastanza potente per programmare ed è anche abbastanza facile iniziare.
Dopotutto, è quasi universalmente la shell che vedrai quando apri il tuo terminale. Ciò lo rende estremamente utile per abituarsi.
Ci sono alcuni potenti comandi in Bash di cui potresti non essere a conoscenza, anche se sei abbastanza esperto nell'uso della lingua. Tuttavia, tutti questi comandi possono servire a scopi piuttosto utili e possono rendere gli script di shell che scrivi più puliti, più gestibili e semplicemente più potenti di quanto non avrebbero potuto essere prima.
Leggi:richiesta di input dall'utente
Il comando read consente di prendere l'input da un utente e memorizzarlo all'interno di una variabile.
#!/usr/bin/env bash
echo "What is your name?"
read name
echo "Your name is ${name}!"
Questo attenderà l'input da te, l'utente, quindi imposterà il valore per il name
variabile alla stringa immessa.
Ad esempio, se hai specificato il tuo nome come Linux Handbook
durante l'esecuzione dello script precedente, verrebbe visualizzato Your name is Linux Handbook!
.
Puoi anche rendere l'esempio sopra più compatto specificando il -p
opzione per read
comando, che stamperà la stringa specificata dopo -p
, quindi chiedi all'utente di inserire:
#!/usr/bin/env bash
read -p "What is your name? " name
echo "Your name is ${name}!"
Noterai anche che ho aggiunto uno spazio dopo What is your name?
. Se non lo aggiungessimo, stamperebbe letteralmente What is your name?
senza spazio, il che lo farebbe sembrare un po' più strano quando l'utente sta inserendo il proprio input:

Mapfile:Assegnare a una variabile i valori delle righe di un file
Puoi usare il mapfile
comando per leggere il contenuto di un file, quindi assegnare quell'output a un array Bash, con ogni elemento dell'array creato ogni volta che si incontra una nuova riga nel file.
Ad esempio, creiamo un file chiamato file.txt
che contiene il seguente testo:
Line 1
Line 2
Line 3
Line 4
Line 5
Puoi convertire questo file in un array Bash eseguendo quanto segue, che assegna il contenuto del file a file_var
variabile:
#!/usr/bin/env bash
mapfile file_var < file.txt
for i in "${file_var[@]}"; do
echo "${i}"
done

Noterai che quanto sopra produce anche un output stranamente distanziato che non si allinea con ciò che è all'interno del file, che può essere risolto aggiungendo il -t
opzione al mapfile
comando:
#!/usr/bin/env bash
mapfile -t file_var < file.txt
for i in "${file_var[@]}"; do
echo "${i}"
done

Infine, potresti notare che quanto segue non funziona:
#!/usr/bin/env bash
cat file.txt | mapfile -t file_var
Questo perché il mapfile
il comando sul lato destro della pipe viene eseguito in una subshell (o in altre parole, una nuova istanza di Bash), che non è in grado di influenzare la shell corrente.
Fonte:inserisci le variabili da un file nell'ambiente della tua shell
Supponiamo di avere il seguente file immaginario, config.sh
, con il seguente contenuto:
username=linuxhandbook
domain=linuxhandbook.com
E se volessi prendere il contenuto di quel file e inserirlo nell'ambiente della tua shell attuale?
Questo può essere fatto semplicemente usando il comando sorgente:
source config.sh
Puoi quindi verificare che le variabili siano state assegnate come previsto:

Sotto il cofano, il source
comando esegue effettivamente il file specificato nell'ambiente della shell corrente, quindi digitando qualsiasi comando in quel file verrebbe effettivamente eseguito durante l'esecuzione di source
.
Ad esempio, mettiamo quanto segue in config.sh
:
name="Linux Handbook"
echo "Hello ${name}!"
echo "Have a good day!"
Se poi eseguiamo soure config.sh
, vedrai che i due echo
i comandi vengono eseguiti, così come il name
variabile da assegnare:

Puoi anche usare .
al posto di source
, che agisce esattamente allo stesso modo di source
lo farebbe.
Conclusione
E proprio così sei ulteriormente sulla buona strada per svolgere attività più potenti e utili, pur restando all'interno di Bash.
Ci sono altri comandi che usi frequentemente in Bash? Sentiti libero di lasciare qualcuno di loro nei commenti qui sotto.