Avere padronanza della propria shell è uno dei requisiti fondamentali per poter agire in autonomia, semplicità e migliorare nel campo della sicurezza informatica.
Lo shell scripting consiste nella scrittura di script eseguibili tramite la shell per automatizzare compiti, creare batch jobs ed imparare ad utilizzare il proprio terminale nel pieno delle sue capacità.
Esistono diverse tipologie di Shell:
- shell standard, sh;
- ash shell;
- tcsh shell;
- Korn shell;
- zsh shell.
Creare un file di script
Non c’è bisogno di un programma speciale per scrivere uno script, basta VIM, geany o VI. Io utilizzerò quest’ultimo.Quando si crea uno script shell, bisogna specificare la shell che si sta utilizzando tramite la prima riga, con il comando
#!/bin/shSolitamente, il carattere # viene utilizzato per i commenti. Aggiungendo il ! riferisce quale shell, appunto, utilizzare per lo script.
Il primo script sarà un semplice “Hello World”.
#!/bin/sh # Questo è un commento echo "\nCiao mondo!\n"Per eseguirlo bisogna cambiare i permessi, eseguendo il comando
chmod 755 script.sh
Utilizzare variabili
La shell mantiene diverse variabili d’ambiente a cui possiamo accedervi ed utilizzarle durante i nostri script. Per vederle basta digitare il comando set┌─[mrtouch@parrot]─[~/Desktop] └──╼ $set BASH=/bin/bash BASH_SOURCE=() BASH_VERSINFO=([0]="4" [1]="4" [2]="11" [3]="1" [4]="release" [5]="i686-pc-linux-gnu") HISTFILE=/home/mrtouch/.bash_history HOME=/home/mrtouch HOSTNAME=parrot HOSTTYPE=i686 LANG=en_US.UTF-8 LINES=24 LOGNAME=mrtouch ...Per quanto riguarda le variabili, uno script shell permette di definirle all’interno dello stesso. Sono case sensitive (nome sarà diverso da Nome), il tipo di dato viene determinato automaticamente dal sistema e per utilizzarle basta aggiungere il carattere $.
┌─[mrtouch@parrot]─[~/Desktop] └──╼ $cat script.sh #!/bin/sh nome="Hacktips" ore=$(date +"%T") echo "Oggi alle $ore, $USER sta scrivendo un articolo per $nome" ┌─[mrtouch@parrot]─[~/Desktop] └──╼ $./script.sh Oggi alle 12:46:51, mrtouch sta scrivendo un articolo per HacktipsNel caso uno script non stampasse nulla, è possibile controllare se lo stesso è stato eseguito con successo oppure no. Linux possiede diversi codici di uscita per gli script, con i quali possiamo verificare lo buon uscita del nostro script.
Ad esempio, se digito date, il codice di uscita sarà 0, poichè il comando è stato eseguito correttamente.
Se invece digito boh, il codice sarà 127, in quanto il comando non esiste.
┌─[mrtouch@parrot]─[~] └──╼ $date Wed Feb 22 17:12:35 CET 2017 ┌─[mrtouch@parrot]─[~] └──╼ $echo $? 0 ┌─[mrtouch@parrot]─[~] └──╼ $boh bash: boh: command not found ┌─[✗]─[mrtouch@parrot]─[~] └──╼ $echo $? 127
Redirezione I/O
La redirezione può essere eseguita sia per l’input sia per l’output.
Uno dei comandi più basilari per eseguirla è inviare comandi ad un file. Molto semplicemente:
- Si utilizza il comando > per inserire il comando in un file;
- Si utilizza il comando >> per inserire nella riga successiva del file il comando passato per argomento.
┌─[mrtouch@parrot]─[~/Desktop] └──╼ $ls -l script.sh > file ┌─[mrtouch@parrot]─[~/Desktop] └──╼ $cat file -rwxr-xr-x 1 mrtouch mrtouch 29 Feb 22 12:57 script.sh ┌─[mrtouch@parrot]─[~/Desktop] └──╼ $date >> file ┌─[mrtouch@parrot]─[~/Desktop] └──╼ $cat file -rwxr-xr-x 1 mrtouch mrtouch 29 Feb 22 12:57 script.sh Wed Feb 22 13:00:11 CET 2017
Eseguire espressioni
Con la shell è ovviamente possibile scrivere espressioni matematiche. Nel caso dovessimo scrivere espressioni, il modo più semplice è quello di creare uno script, salvare le variabili ed eseguire i calcoli che ci servono.Oltre alle semplici espressioni, è possibile usare if-then-else, cicli for e while. Come in qualsiasi altro linguaggio di programmazione, sta a noi decidere quale è più consono per la situazione.
Un paio di esempi
1.Verifica della presenza di file, cartelle ed esecuzione di alcuni comandi
#!/bin/sh if USER=mrtouch then echo "Ciao mrtouch" else echo "Non ti conosco" fi dir=hs if [ -d $dir ] then echo "Hs è una cartella" cd $dir ls -l if [ -e Telecom.cap ] then echo "Ed è pure presente Telecom" rm Telecom.cap ls -l echo "Ora non c'è più" fi fiL’output sarà
Per comparare dei numeri, il codice corrispondente è:
- a -eq b controlla se a è uguale a b;
- a -ge b controlla se a è più grande o uguale a b;
- a -gt b controlla se a è più grande di b;
- a -le b controlla se a è minore o uguale a b;
- a -lt b controlla se a è minore di b;
- a -ne b controlla se a è diverso da b;
2.Stampare le parole di un file più lunghe di venti caratteri
#!/bin/sh file="dictIT.txt" for word in `cat $file` do if [ ${#word} -gt 20 ] #con ${#word} calcolo la lunghezza della stringa then echo $word fi done
Conclusioni
Come già detto, in questo articolo ho voluto solo introdurre l’argomento. Come qualsiasi linguaggio di programmazione, anche bash necessita di esercizi e molta pratica per essere conosciuto a fondo. Per questo motivo, consiglio ShellScript.sh e tldp.org, due ottimi siti per potersi esercitare al meglio.
Travis Scott Jordan
RispondiEliminacurry shoes
supreme
kd13
kyrie 7