Common Linux Directory Names
/ -> root of the virtual directory , where normally , no files are placed
/bin -> binary directory
/boot -> whre boot are stored
/dev -> device directory , where linux creates device nodes
/etc -> file di configurazione
/home -> dove risiedono le cartelle utenti
/media ->
/mnt ->
/opt -> optional directory , often used to store 3-party software packages and data files
/proc -> process directory , where current hardware and process information is stored
/root -> root home directory
/sbin
/run -> run directory , where runtime data is held during system operation
/srv -> service directory, where local service store their files
/sys -> system direcoty ,
/tmp
/usr
/var -> variabile directory, for files that change frequently , such as log files
Il comando file in Linux viene utilizzato per determinare il tipo di un file. Esamina il contenuto di un file e cerca di identificarne il tipo e altre informazioni correlate.
man filefile [opzioni] nomefile-
Utilizzo di base:
file nomefile
Questo comando mostra il tipo del file specificato.
-
Visualizzazione del tipo MIME:
file --mime-type nomefile
Questo comando mostra il tipo MIME del file specificato.
-
Visualizzazione di ulteriori informazioni:
file -i nomefile
Questo comando mostra il tipo MIME insieme a informazioni aggiuntive sul file.
-
Visualizzazione del tipo di sistema di file:
file -s nomefile
Questo comando mostra il tipo di file e informazioni aggiuntive, inclusi il tipo di sistema di file.
-
Modalità ricorsiva:
file -r cartellanome
Questo comando elabora le directory in modo ricorsivo e mostra informazioni su tutti i file presenti nella cartella specificata.
-
Visualizzazione delle informazioni sulla versione:
file --version
Questo comando mostra le informazioni sulla versione del comando
file.
touch file_name
gedit file_name.sh
#! /bin/bash #! /bin/bash
# This is the basic bash script
echo " Hello World! " chmod +x bash_script.sh
Secondo programma
#!/bin/bash
#This is a single-line comment in Bash Script.
echo "Enter your name:"
read name
echo
#echo output, its also a single line comment
echo "The current user name is $name"
#This is another single line comment Bash Multi Line Comment
#!/bin/bash
<<COMMENTS
This is the first comment
This is the second comment
This is the third comment
COMMENTS
echo "Hello World" Quote with String
While working with simple texts and string, there will be no differences either we use a single quote or double quote.
#!/bin/bash
# String in single quote
echo 'Hello User'
echo
# String in double quote
echo "we are javatpoint"
Quote with Variable
It should be noted that the shell variable expansion will only work with double-quotes. If you define any variable in single quotes, then it will not be considered as a variable. Let's understand this with an example:
#!/bin/bash
name="You are welcome at javatpoint"
echo "$name"
echo '$name' Esempio
**Utilizzo di variabili in operazioni aritmetiche**
numero1=10
numero2=5
somma=$((numero1 + numero2))
prodotto=$((numero1 * numero2))
echo "La somma di $numero1 e $numero2 è $somma"
echo "Il prodotto di $numero1 e $numero2 è $prodotto"
In Bash, i tipi di dati principali sono:
-
Stringhe (Strings): Le stringhe rappresentano sequenze di caratteri. Possono essere dichiarate tra apici singoli (
') o doppi (").stringa_singola='Questo è un esempio' stringa_doppia="Un'altra stringa"
-
Numeri interi (Integers): Bash tratta i numeri senza decimali come interi. Non c'è bisogno di dichiarare il tipo.
numero_intero=42
-
Numeri decimali (Floating Point): Bash supporta anche numeri con decimali, ma le operazioni aritmetiche possono richiedere uno strumento come
bc.numero_decimale=3.14
-
Array: Gli array contengono una raccolta di elementi, e gli indici degli array iniziano solitamente da 0.
nomi=("Alice" "Bob" "Charlie") echo ${nomi[0]} # Stampa il primo elemento dell'array
-
Booleani: Bash non ha un tipo di dato booleano nativo. Tuttavia, spesso le condizioni sono gestite usando comandi di confronto come
[[ ]]otest.vero=true falso=false
-
Variabili nulle (Null): In bash, una variabile non inizializzata o senza valore assegnato è considerata come nullo.
variabile_nulla=
-
Variabili Lettre (Literal): Bash considera qualsiasi sequenza di caratteri come letterale, e puoi assegnare valori arbitrari alle variabili.
valore_letterale="Questo è un valore letterale"
system defined variables
In Bash, ci sono alcune variabili predefinite di sistema, spesso chiamate "system-defined variables" o "variables predefinite del sistema".
Per visualizzare tutte le variabili attive env o set.
-
$HOME: Rappresenta il percorso della directory home dell'utente corrente.
echo $HOME
-
$USER o $LOGNAME: Contiene il nome dell'utente corrente.
echo $USER
-
$PATH: Specifica una lista di directory in cui il sistema cerca i comandi eseguibili.
echo $PATH
-
$PWD: Rappresenta il percorso corrente (working directory).
echo $PWD
-
$SHELL: Contiene il percorso dell'interprete della shell corrente.
echo $SHELL
-
$BASH_VERSION: Mostra la versione di Bash in uso.
echo $BASH_VERSION
-
$RANDOM: Genera un numero casuale.
echo $RANDOM
-
$UID: Rappresenta l'ID dell'utente corrente.
echo $UID
-
$PPID: Contiene l'ID del processo padre del processo corrente.
echo $PPID
-
$? (Exit Status): Restituisce lo stato di uscita dell'ultimo comando eseguito. Un valore di 0 indica successo.
echo $?
#! /bin/bash
# Bash System-defined Variables
echo $HOME # Home Directory
echo $PWD # current working directory
echo $BASH # Bash shell name
echo $BASH_VERSION # Bash shell Version
echo $LOGNAME # Name of the Login User
echo $OSTYPE # Type of OS esempio con read
#!/bin/bash
# Chiedi all'utente di inserire un testo
echo "Inserisci il tuo nome:"
read nome
# Stampa il nome inserito
echo "Ciao, $nome! Benvenuto."
# Chiedi all'utente di inserire un numero
echo "Inserisci un numero:"
read numero
# Esegui un'operazione con il numero inserito
doppio=$((numero * 2))
# Stampa il risultato
echo "Il doppio di $numero è $doppio."In Bash, il comando date viene utilizzato per visualizzare o manipolare la data e l'orario del sistema. Può essere utilizzato per ottenere la data corrente, formattarla in modi diversi o impostare una data specifica.
#!/bin/bash
current_date=$(date)
echo "Data e orario correnti: $current_date"#!/bin/bash
# Formato personalizzato
formatted_date=$(date +"%Y-%m-%d %H:%M:%S")
echo "Data formattata: $formatted_date"Alcuni dei formati di data e ora più comuni sono:
%Y: Anno a 4 cifre%m: Mese (01-12)%d: Giorno del mese (01-31)%H: Ore (00-23)%M: Minuti (00-59)%S: Secondi (00-59)
#!/bin/bash
# Impostare una data specifica (2022-01-01 12:00:00)
specific_date=$(date -d "2022-01-01 12:00:00" +"%Y-%m-%d %H:%M:%S")
echo "Data specifica: $specific_date"#!/bin/bash
# Data attuale
current_date=$(date +%s)
# Data futura (ad esempio, 7 giorni dopo)
future_date=$(date -d "7 days" +%s)
# Calcola la differenza
difference=$((future_date - current_date))
days=$((difference / 86400)) # 86400 secondi in un giorno
echo "La differenza è di $days giorni."Bash Sleep
sleep 5: sospende l'esecuzione per 5 secondi. sleep 1m: sospende l'esecuzione per 1 minuto. sleep 2h: sospende l'esecuzione per 2 ore.
#!/bin/bash
echo "Questo è il punto A"
sleep 5 # Sospende l'esecuzione per 5 secondi
echo "Cinque secondi dopo, questo è il punto B"In Bash, puoi eseguire operazioni aritmetiche utilizzando diversi operatori. Ecco alcuni degli operatori aritmetici comuni:
-
Addizione
+:risultato=$((5 + 3)) echo $risultato # Output: 8
-
Sottrazione
-:risultato=$((10 - 4)) echo $risultato # Output: 6
-
Moltiplicazione
*:risultato=$((3 * 7)) echo $risultato # Output: 21
-
Divisione
/:risultato=$((20 / 4)) echo $risultato # Output: 5
-
Modulo
%(Resto della divisione):risultato=$((15 % 4)) echo $risultato # Output: 3
-
Incremento
++:numero=5 ((numero++)) echo $numero # Output: 6
-
Decremento
--:numero=8 ((numero--)) echo $numero # Output: 7
-
Assegnazione combinata
+=,-=,*=,/=:valore=10 ((valore += 5)) echo $valore # Output: 15
-
Espressioni aritmetiche con
$((...)): Puoi utilizzare questa sintassi per eseguire espressioni aritmetiche più complesse:risultato=$(( (10 + 5) * 2 - 4 )) echo $risultato # Output: 22
In Bash, le stringhe sono una sequenza di caratteri e possono essere assegnate utilizzando singoli apici (') o doppi apici (").
stringa_singola='Questo è un esempio con apici singoli.'
stringa_doppia="Questo è un esempio con apici doppi."nome="John"
cognome="Doe"
nome_completo="$nome $cognome"
echo $nome_completo # Output: John Doestringa="Hello, World!"
lunghezza=${#stringa}
echo $lunghezza # Output: 13stringa="Hello, World!"
sottostringa=${stringa:0:5}
echo $sottostringa # Output: Hellosaluto="Ciao, "
nome="Alice"
saluto_completo=$saluto$nome
echo $saluto_completo # Output: Ciao, Alicefrase="I love programming in Java."
nuova_frase=${frase/Java/Bash}
echo $nuova_frase # Output: I love programming in Bash.testo="Hello World"
testo_maiuscolo=${testo^^}
testo_minuscolo=${testo,,}
echo $testo_maiuscolo # Output: HELLO WORLD
echo $testo_minuscolo # Output: hello worldUsa la variabile IFS (Internal Field Separator) insieme al comando read per dividere una stringa in un array:
stringa="Ciao,Mondo,Come,Stai"
IFS=',' read -ra array <<< "$stringa"
# Stampa ogni elemento dell'array
for elemento in "${array[@]}"; do
echo $elemento
doneusa la costruzione [[ ... ]] insieme al carattere jolly * per verificare se una stringa contiene una sottostringa:
stringa="Ciao, Mondo!"
sottostringa="Mondo"
if [[ $stringa == *$sottostringa* ]]; then
echo "La stringa contiene la sottostringa."
else
echo "La stringa non contiene la sottostringa."
fistringa="Buongiorno, Mondo!"
sottostringa=${stringa:12:5}
echo $sottostringa # Output: Mondola sottostringa viene estratta dalla posizione 12, con una lunghezza di 5 caratteri.
-
Uguaglianza (
==):numero1=10 numero2=20 if [ $numero1 == $numero2 ]; then echo "I numeri sono uguali." else echo "I numeri non sono uguali." fi
-
Diversità (
!=):stringa1="Hello" stringa2="World" if [ "$stringa1" != "$stringa2" ]; then echo "Le stringhe sono diverse." else echo "Le stringhe sono uguali." fi
-
Maggiore (
-gt):numero1=30 numero2=20 if [ $numero1 -gt $numero2 ]; then echo "Il primo numero è maggiore del secondo." else echo "Il primo numero non è maggiore del secondo." fi
-
Minore (
-lt):numero1=15 numero2=25 if [ $numero1 -lt $numero2 ]; then echo "Il primo numero è minore del secondo." else echo "Il primo numero non è minore del secondo." fi
-
Maggiore o Uguale (
-ge):numero1=20 numero2=20 if [ $numero1 -ge $numero2 ]; then echo "Il primo numero è maggiore o uguale al secondo." else echo "Il primo numero non è maggiore o uguale al secondo." fi
-
Minore o Uguale (
-le):numero1=25 numero2=30 if [ $numero1 -le $numero2 ]; then echo "Il primo numero è minore o uguale al secondo." else echo "Il primo numero non è minore o uguale al secondo." fi
Esempio di elif
#!/bin/bash
num=10
if [ $num -eq 10 ]; then
echo "Il numero è uguale a 10"
elif [ $num -gt 10 ]; then
echo "Il numero è maggiore di 10"
else
echo "Il numero è minore di 10"
fi
#!/bin/bash
numero=15
if [ $numero -gt 10 ] && [ $numero -lt 20 ]; then
echo "Il numero è maggiore di 10 e minore di 20."
else
echo "Il numero non soddisfa la condizione."
fi#!/bin/bash
giorno="Lunedì"
if [ "$giorno" == "Sabato" ] || [ "$giorno" == "Domenica" ]; then
echo "È un giorno del fine settimana."
else
echo "Non è un giorno del fine settimana."
fiIl blocco di codice nell'istruzione if verrà eseguito se la variabile $giorno è uguale a "Sabato" o "Domenica".
#!/bin/bash
flag=true
if ! $flag; then
echo "La variabile flag è falsa."
else
echo "La variabile flag è vera."
fi#!/bin/bash
numero=25
if [ $numero -lt 10 ] || [ $numero -gt 20 ]; then
echo "Il numero è minore di 10 o maggiore di 20."
else
echo "Il numero non soddisfa la condizione."
fiif [ condition ]; then
# Blocco di codice da eseguire se la condizione è vera
else
# Blocco di codice da eseguire se la condizione è falsa
fi#!/bin/bash
numero=5
if [ $numero -eq 5 ]; then
echo "Il numero è 5."
else
echo "Il numero non è 5."
fi#!/bin/bash
nome="Alice"
età=25
if [ "$nome" == "Alice" ] && [ $età -eq 25 ]; then
echo "Il nome è Alice e l'età è 25."
else
echo "Condizione non soddisfatta."
fi#!/bin/bash
punteggio=75
if [ $punteggio -ge 90 ]; then
echo "Voto A"
elif [ $punteggio -ge 80 ]; then
echo "Voto B"
elif [ $punteggio -ge 70 ]; then
echo "Voto C"
else
echo "Voto insufficiente"
fiIstruzione Case
L'istruzione case in Bash è utilizzata per eseguire una serie di comandi in base al valore di una variabile o espressione.
È spesso utilizzata come alternativa a una serie di istruzioni if-elif-else quando è necessario eseguire diverse azioni in base al valore di una variabile.
case valore in
pattern1)
# Comandi da eseguire se il valore corrisponde a pattern1
;;
pattern2)
# Comandi da eseguire se il valore corrisponde a pattern2
;;
pattern3)
# Comandi da eseguire se il valore corrisponde a pattern3
;;
*)
# Comandi da eseguire se nessun pattern corrisponde
;;
esacIn questo esempio, l'istruzione case valuta la variabile $giorno rispetto ai vari pattern specificati e esegue il blocco di comandi corrispondente al primo pattern che trova. L'uso di | (pipe) all'interno di un pattern indica un'alternativa, permettendo di corrispondere a più valori. Se nessun pattern corrisponde, viene eseguito il blocco *) (asterisco), che funge da "altro" o "default".
#!/bin/bash
giorno="Lunedì"
case $giorno in
Lunedì)
echo "Primo giorno della settimana."
;;
Martedì|Mercoledì|Giovedì|Venerdì)
echo "Giorni lavorativi."
;;
Sabato|Domenica)
echo "Fine settimana!"
;;
*)
echo "Non riconosco questo giorno."
;;
esacIl ciclo for in Bash è utilizzato per iterare attraverso una sequenza di elementi,
come una lista di valori o gli elementi di un array.
for variabile in valore1 valore2 valore3
do
# Comandi da eseguire per ogni valore
done#!/bin/bash
echo "Stampo numeri da 1 a 5:"
for i in {1..5}
do
echo $i
done#!/bin/bash
frutta="mela pera banana fragola"
for frutto in $frutta
do
echo "Ho una $frutto"
done#!/bin/bash
colori=("rosso" "verde" "blu")
for colore in "${colori[@]}"
do
echo "Il colore è $colore"
done#!/bin/bash
echo "Lista dei file nella directory corrente:"
for file in *
do
echo $file
done#!/bin/bash
echo "Stampo numeri da 0 a 10 con incrementi di 2:"
for ((i=0; i<=10; i+=2))
do
echo $i
donewhile
while [ condizione ]
do
# Comandi da eseguire fintanto che la condizione è vera
done#!/bin/bash
contatore=1
while [ $contatore -le 5 ]
do
echo "Iterazione $contatore"
contatore=$((contatore + 1))
doneIl ciclo until in Bash è simile al ciclo while, ma esegue un blocco di comandi fintanto che una condizione specificata è falsa.
until [ condizione ]
do
# Comandi da eseguire fintanto che la condizione è falsa
done#!/bin/bash
contatore=1
until [ $contatore -gt 5 ]
do
echo "Iterazione $contatore"
contatore=$((contatore + 1))
doneLe funzioni in Bash sono porzioni di codice riutilizzabili che possono essere definite e chiamate all'interno di uno script o di un programma Bash.
nome_funzione() {
# Comandi da eseguire all'interno della funzione
echo "Questa è una funzione."
}# Chiamata alla funzione
nome_funzione#!/bin/bash
# Definizione di una funzione
saluta() {
echo "Ciao, benvenuto!"
}
# Chiamata alla funzione
saluta#!/bin/bash
# Funzione con parametri
saluta_persona() {
nome=$1
echo "Ciao, $nome! Benvenuto!"
}
# Chiamata alla funzione con un parametro
saluta_persona "Alice"Una funzione in Bash può restituire un valore tramite l'istruzione return:
#!/bin/bash
# Funzione con valore restituito
moltiplica() {
risultato=$(( $1 * $2 ))
return $risultato
}
# Chiamata alla funzione e ottenere il valore restituito
moltiplicazione=$(moltiplica 3 4)
echo "Il risultato della moltiplicazione è: $moltiplicazione"In Bash, gli array sono utilizzati per memorizzare più valori in una singola variabile.
# Forma 1
frutta=("Mela" "Pera" "Banana")
# Forma 2
frutta[0]="Mela"
frutta[1]="Pera"
frutta[2]="Banana"# Accesso a un singolo elemento
echo ${frutta[1]} # Output: Pera
# Accesso a tutti gli elementi dell'array
echo ${frutta[@]} # Output: Mela Pera Banana
# Accesso a tutti gli indici dell'array
echo ${!frutta[@]} # Output: 0 1 2
# Accesso alla lunghezza dell'array
echo ${#frutta[@]} # Output: 3# Iterazione attraverso gli elementi
for elemento in "${frutta[@]}"
do
echo $elemento
done# Modifica di un elemento
frutta[1]="Uva"
# Aggiunta di un nuovo elemento
frutta+=( "Ciliegia" )
# Rimozione di un elemento
unset frutta[2]Bash supporta anche array associativi, che utilizzano stringhe come chiavi invece di indici numerici. Ecco un esempio:
# Dichiarazione di un array associativo
declare -A studente
studente=( ["nome"]="Alice" ["età"]=25 ["corso"]="Informatica" )
# Accesso agli elementi di un array associativo
echo ${studente["nome"]} # Output: Alice
echo ${studente["età"]} # Output: 25
echo ${studente["corso"]} # Output: Informatica