Variabilele te ajută să nu repeți aceleași valori în tot scriptul. În loc să scrii de cinci ori calea unui folder, numele unui serviciu sau pragul de spațiu pe disc, definești valoarea o singură dată și o reutilizezi. Scriptul devine mai ușor de citit, modificat și verificat.
În Bash, o variabilă se creează printr-o atribuire fără spații în jurul semnului =:
SERVER_NAME="web01"
BACKUP_DIR="/srv/backups"
DISK_LIMIT=80
Următoarea formă este greșită:
SERVER_NAME = "web01"
Bash va interpreta SERVER_NAME ca pe o comandă, nu ca pe numele unei variabile.
Cum citești valoarea unei variabile
Pentru a folosi valoarea, adaugi $ înaintea numelui:
SERVER_NAME="web01"
printf 'Server verificat: %s\n' "$SERVER_NAME"
Forma cu acolade este utilă atunci când variabila este lipită de alt text:
DATE_NOW="2026-07-15"
REPORT_FILE="raport-${DATE_NOW}.log"
printf 'Fișier: %s\n' "$REPORT_FILE"
Fără acolade, Bash ar putea încerca să interpreteze un nume de variabilă mai lung decât cel intenționat. GNU Bash definește această operațiune ca parameter expansion, mecanismul prin care valoarea unui parametru este introdusă într-o comandă.
Pune aproape întotdeauna variabilele între ghilimele
Una dintre cele mai frecvente greșeli este folosirea unei variabile fără ghilimele:
FILE="/home/ion/Raport lunar.txt"
cat $FILE
Bash poate împărți valoarea în două argumente: /home/ion/Raport și lunar.txt. Varianta corectă este:
cat "$FILE"
Ghilimelele duble păstrează valoarea ca un singur argument, inclusiv când conține spații sau caractere speciale. ShellCheck avertizează asupra variabilelor neprotejate deoarece pot produce word splitting și extinderea accidentală a caracterelor wildcard.
Salvează rezultatul unei comenzi
Poți introduce rezultatul unei comenzi într-o variabilă folosind $(...):
HOST_NAME="$(hostname)"
CURRENT_USER="$(whoami)"
DISK_USED="$(df / | awk 'NR==2 {print $5}')"
printf 'Host: %s\n' "$HOST_NAME"
printf 'Utilizator: %s\n' "$CURRENT_USER"
printf 'Disc ocupat: %s\n' "$DISK_USED"
Forma aceasta rulează comanda și salvează ieșirea ei standard. Nu scrie:
HOST_NAME=hostname
Aceasta salvează textul literal hostname, nu rezultatul comenzii. ShellCheck recomandă explicit var=$(command) când vrei să capturezi ieșirea unei comenzi.
Folosește valori implicite
Un script bun trebuie să gestioneze și situația în care o variabilă nu este definită. Sintaxa următoare folosește o valoare implicită:
BACKUP_DIR="${BACKUP_DIR:-/srv/backups}"
Dacă BACKUP_DIR există și are valoare, este păstrată. În caz contrar, scriptul folosește /srv/backups.
Poți opri scriptul dacă lipsește o variabilă obligatorie:
SERVER_IP="${SERVER_IP:?Variabila SERVER_IP nu este setata}"
La rulare:
SERVER_IP="192.168.1.20" ./verificare.sh
Aceste forme sunt utile pentru scripturi executate pe mai multe servere, deoarece poți schimba configurația fără să editezi codul.
Marchează constantele importante
Dacă o valoare nu trebuie schimbată după inițializare, folosește readonly:
readonly LOG_DIR="/var/log/verificare-server"
readonly DISK_LIMIT=85
O încercare ulterioară de modificare va produce eroare:
DISK_LIMIT=90
Această metodă este utilă pentru căi fixe, praguri sau nume de configurare care nu trebuie rescrise accidental.
Primește valori din linia de comandă
Argumentele oferite scriptului sunt disponibile în variabile poziționale:
#!/usr/bin/env bash
SERVICE="${1:-nginx}"
ACTION="${2:-status}"
systemctl "$ACTION" "$SERVICE"
Rulezi:
./serviciu.sh nginx status
./serviciu.sh ssh restart
În acest exemplu, $1 este primul argument, iar $2 este al doilea. $0 conține numele scriptului, $# numărul argumentelor și "$@" toate argumentele păstrate separat. GNU Bash precizează că parametrii poziționali sunt atribuiți din argumentele oferite la lansarea scriptului.
Exemplu practic complet
#!/usr/bin/env bash
readonly DISK_LIMIT=80
PARTITION="${1:-/}"
REPORT_DIR="${REPORT_DIR:-$HOME/rapoarte}"
DATE_NOW="$(date +%Y-%m-%d_%H-%M-%S)"
REPORT_FILE="${REPORT_DIR}/disk-${DATE_NOW}.log"
mkdir -p "$REPORT_DIR"
DISK_USED="$(df --output=pcent "$PARTITION" | tail -n 1 | tr -dc '0-9')"
printf 'Partitie: %s\n' "$PARTITION" | tee "$REPORT_FILE"
printf 'Utilizare: %s%%\n' "$DISK_USED" | tee -a "$REPORT_FILE"
if (( DISK_USED >= DISK_LIMIT )); then
printf 'ATENTIE: pragul de %s%% a fost depasit.\n' "$DISK_LIMIT" |
tee -a "$REPORT_FILE"
else
printf 'OK: spatiul este sub prag.\n' | tee -a "$REPORT_FILE"
fi
Testează-l cu:
chmod u+x verificare-disc.sh
./verificare-disc.sh /
shellcheck verificare-disc.sh
Variabilele bine numite, protejate prin ghilimele și validate înainte de folosire transformă un șir de comenzi într-un script ușor de întreținut. Alege nume descriptive, evită valori repetate și nu presupune că o variabilă există sau conține exact ce te aștepți.
Surse folosite
GNU Bash Reference Manual — variabile, parametri poziționali și parameter expansion.
GNU Bash Reference Manual — parametri speciali precum $@, $# și $?.
ShellCheck — verificarea variabilelor fără ghilimele și a atribuirilor din comenzi.

















































