Bash tutorial

Da PiemonteWireless.

Indice

Introduzione agli script /bin/bash

Hello World

Per prima cosa occorre scoprire dove si trova il programma bash (solitamente è /bin/bash):

$ which bash
/bin/bash

Adesso creiamo un nuovo file hw.sh con questo contenuto:

#!/bin/bash

# declare STRING variable
STRING="Hello World"
# print variable on a screen
echo $STRING

e rendiamolo eseguibile, quindi avviamolo.

$ chmod a+x hw.sh
$ ./hw.sh
Hello World
$

Notiamo che ogni script di bash inizia col la riga:

#!/bin/bash

e che il commento si ottiene con un cancelletto:

# declare STRING variable


Variabili

Le variabili si definiscono semplicemente con VARIABILE=valore e si chiamano con $VARIABILE.

#!/bin/bash
OF=myhome_directory_$(date +%Y%m%d).tar.gz
tar -czf $OF /home/linuxconfig

Le variabili definite dentro una funzione sono locali e non si vedono all'esterno della funzione:

#!/bin/bash

# Definisco una variabile globale (può essere vista in tutto lo script)
VAR="variable globale"
function bash {
# Definisco una variabile locale (può essere vista solo all'interno della funzione)
local VAR="variable locale"
echo $VAR
}
echo $VAR
bash
echo $VAR

l'output dello script è:

variable globale
variable locale
variable globale


Passare argomenti ad uno script bash

#!/bin/bash

# uso delle variabili predefinite per accedere agli argomenti passati da riga di comando
# $1 è il primo argomento, $2 il secondo e così via...
echo $1 $2 $3 ' -> echo $1 $2 $3'

# registriamo gli argomenti in un array speciale
args=("$@")
echo ${args[0]} ${args[1]} ${args[2]} ' -> args=("$@"); echo ${args[0]} ${args[1]} ${args[2]}'

# uso $@ per stampare tutti gli argomenti in una volta sola
echo $@ ' -> echo $@'

# uso $# per stampare il numero di argomnenti
echo Numero di argomento passati: $# ' -> echo Numero di argomento passati: $#'

Eseguo lo script:

$ ./args.sh Primo Secondo Terzo
Primo Secondo Terzo -> echo $1 $2 $3
Primo Secondo Terzo -> args=("$@"); echo ${args[0]} ${args[1]} ${args[2]}
Primo Secondo Terzo -> echo $@
Numero di argomento passati: 3 -> echo Numero di argomento passati: $#
$


Eseguire comandi shell con bash

#!/bin/bash

# uso le backticks " ` ` " per eseguire comandi shell
echo `uname -o`
# invece senza backticks
echo uname -o

Eseguo lo script:

$ ./backticks.sh
GNU/Linux
uname -o
$


Leggere input dell'utente

#!/bin/bash

echo -e "Ciao, digita una parola: \c "
read  word
echo "La parola che hai digitato è: $word"
echo -e "Puoi digitare due parole? "
read word1 word2
echo "Questo è il tuo input: \"$word1\" \"$word2\""
echo -e "Stai capendo qualcosa di questo tutorial? "
# il comando read registra ora la risposta nella variabile di default $REPLY
read
echo "Hai detto $REPLY, Sono felice di sentirlo! "
echo -e "Quali sono i tuoi colori preferiti? "
# -a registra gli inout in un array
read -a colours
echo "I miei colori preferiti sono anche ${colours[0]}, ${colours[1]} e ${colours[2]}"
$ ./read.sh
Ciao, digita una parola: piemontewireless
La parola che hai digitato è: piemontewireless
"Puoi digitare due parole?
piemonte wireless
Questo è il tuo input: "piemonte" "wireless"
Stai capendo qualcosa di questo tutorial?
NO
Hai detto NO, Sono felice di sentirlo!
Quali sono i tuoi colori preferiti?
verde nero rosso
I miei colori preferiti sono anche verde, nero e rosso
$


Il comando TRAP

#!/bin/bash

# comando trap: definisco come trap la funzione bashtrap
trap bashtrap INT
# pulisco lo schermo
clear;
# la funzione trap è eseguita quando viene premuto CTRL-C:
bashtrap()
{
  echo "Hai digitato CTRL+C !...eseguo la trap !"
}
# loop da 1/10 a 10/10
for a in `seq 1 10`; do
    echo "$a/10 per Uscire." 
    sleep 1;
done
echo "Esco dallo script !!!"
$ ./trap.sh
1/10 per Uscire.
2/10 per Uscire.
3/10 per Uscire.
4/10 per Uscire.
Hai digitato CTRL+C !...eseguo la trap !
5/10 per Uscire.
6/10 per Uscire.
7/10 per Uscire.
8/10 per Uscire.
9/10 per Uscire.
10/10 per Uscire.
Esco dallo script !!!
$


Dichiarare un semplice array

#!/bin/bash

# Dichiaro un array con 4 elementi
ARRAY=( 'Debian Linux' 'Redhat Linux' Ubuntu Linux )
# prendo il numero di elementi dell'array
ELEMENTS=${#ARRAY[@]}

# stampo ogni elemento dell'array
for ; do
  echo ${ARRAY[${i}]}
done
$ ./array.sh
Debian Linux
Redhat Linux
Ubuntu
Linux
$


Leggere un file in un array

#!/bin/bash

# Dichiaro l'array 
declare -a ARRAY
# Apro il file per leggerlo nell'array
exec 10<bash.txt
let count=0
while read LINE <&10; do
  ARRAY[$count]=$LINE
  
done

echo Numero di elementi: ${#ARRAY[@]}
# stampo il contenuto
echo ${ARRAY[@]}
# chiudo il file
exec 10>&-
$ cat > bash.txt
Prima riga
Ciao Ciao
Fine
[CTRL-D]
$ ./file2array.sh
Numero di elementi: 3
Prima riga Ciao Ciao Fine


Condizioni IF/ELSE

Nota gli spazi dentro le parentesi [ ]. Senza non funziona !!!

#!/bin/bash

directory="./BashScripting"
# controllo se la directory esiste
if [ -d $directory ]; then
  echo "la directory esiste"
else 
  echo "la directory non esiste"
fi
$ ./if_es.sh
la directory non esiste
$ mkdir ./BashScripting
$ ./if_es.sh
la directory esiste


Condizioni IF/ELSE annidate

#!/bin/bash

choice=4
echo "1. Bash"
echo "2. Scripting"
echo "3. Tutorial"
echo -n "Scegli una parola [1,2 or 3]? "
# Cicla finchè la variabile choice è uguale a 4
while [ $choice -eq 4 ]; do
  read choice
  # if/else annidati
  if [ $choice -eq 1 ] ; then
    echo "Hai scelto la parola: Bash"
  else
    if [ $choice -eq 2 ] ; then
      echo "Hai scelto la parola: Scripting"
    else
      if [ $choice -eq 3 ] ; then
        echo "Hai scelto la parola: Tutorial"
      else
        echo "Fai una scelta tra 1-3 !"
        echo "1. Bash"
        echo "2. Scripting"
        echo "3. Tutorial"
        echo -n "Scegli una parola [1,2 or 3]? "
        choice=4
      fi   
    fi
  fi
done
$ ./nested_if.sh
1. Bash
2. Scripting
3. Tutorial
Scegli una parola [1,2 or 3]? 5
Fai una scelta tra 1-3 !
1. Bash
2. Scripting
3. Tutorial
Scegli una parola [1,2 or 3]? 3
Hai scelto la parola: Tutorial
$


Riferimenti:


Name (required):

Website:

Comment:

Discussione:Bash tutorial

200 Rating: 3.3/5 (6 votes cast)

Strumenti personali