Cos'è un file .sh? Guida agli shell script, Bash & Linux
- 4 novembre 2025
- 22:51
- Tutorial

Introduzione
Gli script shell sono fondamentali per l'amministrazione di sistemi Linux e Unix, offrendo potenti capacità di automazione che migliorano notevolmente produttività ed efficienza nella gestione dei sistemi. Un file .sh è uno script scritto in linguaggio shell — un linguaggio specializzato per interpretare comandi e automatizzare attività ripetitive di sistema.
Che tu sia un sysadmin che gestisce centinaia di server, uno sviluppatore che automatizza pipeline di deployment o un appassionato di Linux che vuole migliorare le proprie competenze tecniche, capire gli script shell è essenziale. Questa guida completa spiega cosa sono i file .sh, come funzionano, le diverse implementazioni di shell ed esempi pratici di scripting nel mondo reale.
Cos'è un file .sh?
Definizione
A .sh file is a plain text file containing a series of shell commands executed sequentially by a shell interpreter. The .sh extension indicates the file is a shell script, though many shell scripts omit this extension in practice.
Gli shell script rappresentano il ponte tra l'uso interattivo della riga di comando e la programmazione completa. Consentono di:
-
Automatizzare attività ripetitive
-
Combinare più comandi in workflow complessi
-
Creare strumenti di amministrazione riutilizzabili
-
Schedulare operazioni di manutenzione automatizzate
-
Distribuire applicazioni programmaticamente
Caratteristiche
Plain Text Format: Unlike compiled programs requiring compilation, shell scripts are human-readable text interpreted directly by the shell.
Interpreter-Based: Execution depends on the specified shell interpreter (Bash, Ksh, etc.), not the underlying system architecture.
Riga shebang: La maggior parte degli script shell inizia con uno shebang (#!/bin/bash) che specifica quale interprete shell utilizzare.
Multipiattaforma: Gli script shell vengono eseguiti in modo coerente su diversi sistemi Unix/Linux (presupponendo che siano installate le shell appropriate).
Applicazioni reali
-
Script di avvio e spegnimento del sistema
-
Automazione di backup e ripristino
-
Monitoring e alerting dei server
-
Pipeline di deployment delle applicazioni
-
Elaborazione e analisi dei file di log
-
Provisioning di account utente
-
Automazione della configurazione di rete
-
Attività di manutenzione database
Fondamenti dello shell scripting
Cos'è una shell?
Una shell è un interprete di comandi che fornisce un'interfaccia tra utenti e il kernel del sistema operativo. Accetta comandi dall'utente, li interpreta ed esegue i programmi corrispondenti.
Funzioni della shell:
-
Leggere e analizzare i comandi utente
-
Cercare programmi eseguibili
-
Eseguire programmi con argomenti appropriati
-
Gestire la redirezione di input/output
-
Gestire il controllo dei processi
-
Implementare costrutti di programmazione (loop, condizionali)
Perché usare gli shell script?
Automation: Execute complex sequences automatically without manual intervention.
Efficiency: Complete in seconds what might take hours manually.
Coerenza: Garantisci operazioni identiche su più sistemi.
Documentazione: I commenti dello script documentano le procedure per riferimento futuro.
Scalability: Scale operations from one server to hundreds without additional effort.
Recovery: Rebuild systems quickly using existing scripts.
Implementazioni di shell popolari
Bash (Bourne-Again Shell)
Market Share: ~95% of Linux systems
Creator: Brian Fox (GNU Project)
Features: Complete feature set, scripting capabilities
Sintassi: Compatibile con la shell Bourne originale
Caso d'uso: Predefinito nella maggior parte delle distribuzioni Linux
Bash è lo standard de facto per gli script shell su Linux. Bilancia la compatibilità con le shell originali con funzionalità moderne.
Ksh (Korn Shell)
Creator: David Korn (AT&T Bell Labs)
Features: Avanzato programming capabilities, faster execution
Syntax: Superset of Bourne shell
Use Case: Preferred on Unix systems (Solaris, AIX)
Advantages: Migliore performance for compute-intensive operations
Ksh resta diffuso negli ambienti Unix enterprise, in particolare sui sistemi Unix commerciali.
Sh (Bourne Shell)
Original POSIX Standard Shell
Creator: Stephen Bourne (AT&T Bell Labs)
Features: Minime, standardized functionality
Modern Status: Largely historical; contemporary shells provide compatibility
Sh rappresenta lo standard POSIX, garantendo compatibilità di base su tutti i sistemi Unix-like.
Zsh (Z Shell)
Creator: Paul Falstad
Features: Interactive features, scripting capabilities
Modern Focus: Enhanced user experience over pure scripting
Use Case: Growing in popularity among developers
Zsh rappresenta l'evoluzione moderna della shell, bilanciando la potenza di scripting con funzionalità interattive user-friendly.
Tcsh/Csh
Csh Creator: Bill Joy (Berkeley)
Modern Version: Tcsh (enhanced csh)
Features: C-like syntax
Status: Declining usage, maintained primarily for compatibility
Le derivate di Csh sopravvivono su alcuni sistemi ma offrono vantaggi in diminuzione rispetto a Bash/Ksh.
Bash vs Ksh vs altre shell
Tabella comparativa
| Feature | Bash | Ksh | Zsh | Sh |
|---|---|---|---|---|
| Cronologia comandi | Yes | Yes | Yes | No |
| Completamento dei comandi | Basic | Basic | Avanzato | No |
| Array | Indicizzati | Indicizzati + Associativi | Yes | No |
| Corrispondenza di pattern | Pattern glob | Avanzato | Avanzato | Limitato |
| Funzioni | Yes | Yes | Yes | Yes |
| Aritmetica | $(()) |
(()) |
$(()) |
Limitato |
| Conformità POSIX | ~95% | 100% | ~90% | 100% |
| Prestazioni | Good | Migliore | Good | Più veloce |
| Funzionalità di scripting | Complete | Più avanzate | Le più avanzate | Minime |
| Compatibilità | Eccellente | Eccellente | Good | Universale |
| Curva di apprendimento | Moderata | Moderata | Più ripida | La più facile |
| Uso tipico | Linux predefinito | Unix aziendale | Scelta degli sviluppatori | Compatibility |
When to Choose Each Shell
Scegliere Bash quando:
-
Massima compatibilità con i sistemi Linux
-
Lavorare con strumenti che si aspettano la sintassi Bash
-
Familiarità del team con Bash
-
Ambienti focalizzati su Linux
Scegliere Ksh quando:
-
Operazioni critiche per le prestazioni
-
Unix aziendale environments
-
Che richiedono funzionalità di programmazione avanzate
-
Supportare sistemi Unix legacy
Scegliere Zsh quando:
-
Uso interattivo della shell prioritario
-
Avanzato user experience desired
-
Ambienti focalizzati sugli sviluppatori
-
Distribuzioni Linux moderne
Scegliere Sh quando:
-
Massima portabilità POSIX richiesta
-
Supportare diverse piattaforme Unix
-
Ridurre al minimo le dipendenze
-
Esecuzione leggera essenziale
Creare ed eseguire script shell
Creating a Basic Shell Script
Step 1: Create Filetouch myscript.sh
Step 2: Edit Filenano myscript.sh
Step 3: Add Shebang and Commands#!/bin/bash
echo "Hello, World!"
date
Step 4: Make Executablechmod +x myscript.sh
Step 5: Execute./myscript.sh
Execution Methods
Direct Execution (requires executable permissions)./myscript.sh
Explicit Interpreterbash myscript.sh
Source Command (executes in current shell)source myscript.sh
or
. myscript.sh
Understanding the Shebang
The shebang (#!) specifies which interpreter executes the script:#!/bin/bash # Use Bash
#!/bin/ksh # Use Ksh
#!/usr/bin/env bash # Use Bash via environment (more portable)
#!/usr/bin/python # Use Python interpreter
Sintassi di base degli script shell
Variables
# Variable assignment (no spaces around =)
name="John"
age=30
# Using variables
echo "Name: $name"
echo "Age: $age"
# Command substitution
current_date=$(date)
file_count=$(ls -1 | wc -l)
# Arrays (Bash)
fruits=("Apple" "Banana" "Cherry")
echo ${fruits} # Access first element
Conditional Statements
# If-else
if [ $age -gt 18 ]; then
echo "Adult"else
echo "Minor"
fi
# Case statement
case $day in
Monday)
echo "Start of week"
;;
Friday) echo "End of week"
;;
*)
echo "Midweek"
;;esac
Loops
# For loopfor i in 1 2 3 4 5; do echo "Number: $i"done# While loop
count=0
while [ $count -lt 5 ]; do echo "Count: $count" ((count++))
done
# Until loop
until [ $count -eq 10 ]; do
echo "Count: $count" ((count++))
done
Functions
# Function definitiongreet() {echo "Hello, $1!"}# Function with return valueadd() {return $(($1 + $2))}# Function calls
greet "Alice"add 5 3echo "Sum: $?" # $? holds return valueConcetti avanzati di scripting
Error Handling
#!/bin/bashset -e # Exit on error# Check command successif ! command_name; then echo "Command failed" exit 1fi# Trap errorstrap 'echo "Error on line $LINENO"' ERR
File Operations
# File existence checkingif [ -f "/path/to/file" ]; then echo "File exists"fi# Directory operationsif [ -d "/path/to/dir" ]; thenecho "Directory exists"fi# Read file line-by-linewhile IFS= read -r line; doecho "Line: $line"done < filename.txt
User Input
# Read from userread -p "Enter your name: " name
# Read multiple valuesread -p "Enter values: " val1 val2 val3
# Read into arrayread -a array_nameEsempi pratici
System Backup Script
#!/bin/bash# Backup important directoriesBACKUP_DIR="/backup"TIMESTAMP=$(date +%Y%m%d_%H%M%S)echo "Starting backup..."# Create backup directorymkdir -p "$BACKUP_DIR"# Backup home directorytar -czf "$BACKUP_DIR/home_$TIMESTAMP.tar.gz" /home
# Backup system configurationtar -czf "$BACKUP_DIR/etc_$TIMESTAMP.tar.gz" /etc
echo "Backup complete: $BACKUP_DIR/home_$TIMESTAMP.tar.gz"
Disk Space Monitor
#!/bin/bashTHRESHOLD=80ALERT_EMAIL="[email protected]"# Check disk usagedisk_usage=$(df / | awk 'NR==2 {print $5}' | cut -d'%' -f1)if [ $disk_usage -gt $THRESHOLD ]; thenecho "Disk usage critical: $disk_usage%" | mail -s "Alert" $ALERT_EMAILecho "Alert sent to $ALERT_EMAIL"fi
User Account Provisioning
#!/bin/bashread -p "Enter username: " usernameread -p "Enter email: " email
# Create useruseradd -m -s /bin/bash "$username"# Set password (prompt method recommended)echo "Set password for $username:"passwd "$username"# Add to groupsusermod -aG sudo "$username"echo "User $username created successfully"Perché la gestione remota dei server usa script shell
Gli amministratori di sistema che gestiscono server remoti tramite connessioni RDP o SSH eseguono frequentemente script shell per:
-
Distribuzioni automatizzate: Distribuisci applicazioni su più server contemporaneamente
-
Manutenzione del sistema: Pianifica ed esegui attività di manutenzione di routine
-
Monitoring: Continuously monitor system health and log anomalies
-
Backup Operations: Automate critical data backup procedures
-
Aggiornamenti di sicurezza: Distribuisci patch di sicurezza sull'infrastruttura
Professional remote desktop management platforms like RDP.Monster enable shell script execution across enterprise infrastructure:
Gestione dell'infrastruttura Linux con RDP.Monster
Gestione Linux aziendale
-
Accesso SSH per esecuzione remota di script shell
-
Capacità di distribuzione automatizzata
-
Operazioni in batch su più server
-
Monitoraggio e avvisi in tempo reale
Soluzioni VPS per l'infrastruttura di script
-
Risorse dedicate per script ad alta intensità di calcolo
-
Pianificazione persistente dei cron job
-
Tempo di attività affidabile per operazioni pianificate
-
Infrastruttura scalabile per la crescente complessità degli script
Deploy enterprise Linux infrastructure for sophisticated shell script operations with RDP.Monster
Conclusione
Shell scripts represent a powerful automation tool essential for Linux system administration and development. Understanding .sh files, shell implementations, and scripting techniques enables IT professionals to dramatically increase productivity, ensure consistency, and manage complex infrastructure efficiently.
Che si utilizzi Bash su Linux, Ksh su Unix aziendale o Zsh per lo sviluppo interattivo, padroneggiare lo scripting shell distingue gli amministratori capaci da quelli meramente competenti. L'investimento nello sviluppo di solide competenze di scripting offre rendimenti per decenni di gestione di sistemi Linux.
Managing complex Linux infrastructure requiring sophisticated automation? RDP.Monster provides SSH access and VPS infrastructure optimized for running mission-critical shell scripts at scale. Explore Linux-friendly VPS solutions today.
Hosting VPS Linux potente
Vivi pieno controllo e prestazioni fulminee con i nostri VPS Linux. Perfetti per ospitare applicazioni, gestire server e ottimizzare il tuo workflow.
Server dedicati ad alte prestazioni
Hai bisogno di massimo controllo e potenza? I nostri server dedicati offrono prestazioni senza pari per i carichi più impegnativi.
Domande frequenti
Qual è la differenza tra script .sh e bash?
Uno script bash funziona come .sh, ma non tutti gli script .sh sono bash.
Meglio #!/bin/bash o #!/usr/bin/env bash?
Perché i miei script falliscono quando vengono eseguiti da cron?
Usa percorsi assoluti, imposta esplicitamente le variabili d'ambiente e specifica il percorso completo dell'interprete nello shebang.
Come rendo eseguibile uno script?
Posso eseguire script shell su Windows?
Su Windows nativo si preferisce PowerShell per l'automazione.
Qual è la differenza tra i comandi . e source?
source è più esplicito; . è compatibile con shell più datate.
Come faccio il debug di uno script shell?
Usa bash -x scriptname.sh per il trace di esecuzione riga per riga, oppure aggiungi set -x nello script.
Posso passare argomenti agli script shell?
Usa i parametri posizionali: $1 (primo argomento), $2 (secondo), ecc. $@ contiene tutti gli argomenti.
Articoli correlati




