echo — ispis teksta i promenljivih
echo ispisuje tekst na ekran. Deluje kao komanda bez
svrhe — dok ne shvatiš da je to alat kojim proveravaš šta je u promenljivoj,
gradiš izlaz skripte i puniš fajlove.
Uz to, na njemu se najlakše uči jedna stvar koja zbunjuje sve početnike: kako shell tumači navodnike.
Oblik komande
echo [opcije] [tekst]
- opcije — menjaju način ispisa (
-n,-e) - tekst — ono što se ispisuje; može biti običan tekst, promenljiva ili rezultat druge komande
Osnovno
$ echo Zdravo Zdravo $ echo "Zdravo, svete" Zdravo, svete
Bez navodnika radi, ali ne uvek isto:
$ echo Zdravo svete Zdravo svete
Razmaci su nestali. Shell je tekst razdvojio na argumente, a
echo ih je spojio jednim razmakom. Sa navodnicima ostaje
tačno onako kako si napisao:
$ echo "Zdravo svete" Zdravo svete
Zato je navika da tekst uvek staviš u navodnike — ne kozmetika nego zaštita.
Promenljive
Ovde echo postaje koristan. Znak $ ispred imena
vraća vrednost:
$ broj=42 $ echo "Vrednost promenljive broj je $broj" Vrednost promenljive broj je 42
Dodela i ispis moraju biti u dva odvojena reda. U jednom redu ne
radi, jer shell zameni $broj pre nego što dodela stupi na
snagu:
$ broj=42 echo "Vrednost je $broj" Vrednost je
Sistemske promenljive postoje same od sebe:
$ echo $HOME /home/alen $ echo $USER alen $ echo $PWD /home/alen/vezba $ echo $SHELL /bin/bash
Ovako proveravaš i PATH, kad ti sistem tvrdi da komanda ne
postoji iako je instalirana:
$ echo $PATH /usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/alen/.local/bin
Dvotačka razdvaja direktorijume u kojima shell traži komande. Ako program nije ni u jednom od njih, moraš mu navesti punu putanju.
I izlazni kod prethodne komande:
$ ls /etc > /dev/null $ echo $? 0
Nula znači uspeh. Detaljnije u prvom delu bash serije.
Navodnici — jedina stvar koju treba zapamtiti
Tri načina, tri različita ponašanja:
$ ime="Alen" $ echo "Zdravo, $ime" Zdravo, Alen $ echo 'Zdravo, $ime' Zdravo, $ime $ echo Zdravo, $ime Zdravo, Alen
| Zapis | Ponašanje |
|---|---|
"dvostruki" | promenljive se zamenjuju, razmaci se čuvaju |
'jednostruki' | sve doslovno, ništa se ne tumači |
| bez navodnika | promenljive se zamenjuju, razmaci nestaju, džokeri se šire |
Praktično: dvostruki po pravilu, jednostruki kad hoćeš da se ništa ne tumači.
Jednostruki su nezamenljivi kad tekst sadrži znakove koji shell-u nešto znače:
$ echo 'Cena je $100' Cena je $100 $ echo "Cena je $100" Cena je 00
U drugom slučaju je $1 protumačeno kao promenljiva, koja je
prazna, pa je ostalo samo 00. Ista zamka pogađa i lozinke i
regularne izraze.
Opcije
-n — bez preloma reda
$ echo -n "Ovo je tekst " $ echo "bez novog reda između." Ovo je tekst bez novog reda između.
Koristi se kad skripta nešto pita, pa treba da prompt i unos ostanu u istom redu:
$ echo -n "Unesi ime: " Unesi ime: $
-e — specijalni znaci
$ echo -e "Prvi red\nDrugi red" Prvi red Drugi red $ echo -e "Ime\tPrezime" Ime Prezime
| Znak | Značenje |
|---|---|
\n | novi red |
\t | tabulator |
\\ | obrnuta kosa crta |
Bez -e ovi znaci se ispisuju doslovno:
$ echo "Prvi\nDrugi" Prvi\nDrugi
Rezultat komande
Zapis $( ) izvršava komandu i ubacuje njen izlaz:
$ echo "Danas je $(date +%F)" Danas je 2026-08-21 $ echo "Prijavljen si na $(hostname) kao $(whoami)" Prijavljen si na lab01 kao alen $ echo "Fajlova u direktorijumu: $(ls -1 | wc -l)" Fajlova u direktorijumu: 14
Ovo je osnova za pravljenje imena fajlova sa datumom, poruka u logu i sličnog.
Upis u fajl
$ echo "prva linija" > fajl.txt prepisuje $ echo "druga linija" >> fajl.txt dodaje na kraj
Jedna strelica briše postojeći sadržaj bez pitanja. Ovo je čest način da se nenamerno isprazni konfiguracija — proveri strelicu pre nego što pritisneš Enter.
Praktična upotreba na sistemu:
# echo "192.168.1.50 baza.local" >> /etc/hosts # echo "Test server" > /etc/motd
Pažnja kod pisanja u sistemske fajlove sa sudo:
$ sudo echo "tekst" >> /etc/hosts -bash: /etc/hosts: Permission denied
Zvuči nelogično, ali je tačno: sudo se odnosi na
echo, dok preusmeravanje radi shell, koji je i dalje
običan korisnik. Rešenje je tee:
$ echo "tekst" | sudo tee -a /etc/hosts
Više o strelicama u lekciji Piping i redirekcija.
echo u skriptama
Ovo je njegova glavna namena:
#!/usr/bin/env bash echo "=== Provera sistema ===" echo "Datum: $(date)" echo "Server: $(hostname)" echo echo "Zauzeće diska:" df -h /
Prazan echo ispisuje prazan red i razdvaja celine.
Poruke o greškama treba slati na standardni izlaz za greške, da se ne pomešaju sa rezultatom:
echo "Greška: fajl ne postoji" >&2
Zašto je to bitno, objašnjeno je u četvrtom delu bash serije.
Kako doći do pomoći
echo je ugrađen u bash, nije zaseban program. Zato
uobičajene opcije za pomoć ne rade:
$ echo --help --help
Ispisao je doslovno ono što si tražio. Za ugrađene komande pomoć se dobija ovako:
$ help echo $ type echo echo is a shell builtin
Isto važi za cd, export, alias i
druge ugrađene komande. Kad ti --help ili
man ne daju ništa, prvo proveri sa
type da li je uopšte reč o programu.
Česte greške
Zvezdica se pretvori u spisak fajlova
$ echo * Documents Downloads beleske.txt $ echo "*" *
Bez navodnika džoker proširuje shell, pre nego što echo
uopšte vidi argument.
Navodnik ostane otvoren
$ echo "zdravo >
Shell čeka da zatvoriš navodnik. Zatvori ga i pritisni Enter, ili prekini
sa Ctrl+C.
-e ne radi svuda isto
Ponašanje se razlikuje između shell-ova i između echo kao
ugrađene komande i onog iz /usr/bin. Ako ti je bitna
predvidivost — u skriptama koristi printf:
$ printf "Prvi red\nDrugi red\n"
printf ne dodaje prelom reda sam, pa ga pišeš izričito. Za
sve što ide u produkciju to je pouzdaniji izbor.
echo pokazuje lozinku u istoriji
Sve što otkucaš ostaje u ~/.bash_history. Nikad ne piši
lozinke kroz echo — završe i u istoriji i u spisku procesa, gde
ih vide i drugi korisnici.
Vežba
- Ispiši svoje korisničko ime i home direktorijum u jednom redu
- Uporedi
echo "$HOME"iecho '$HOME' - Ispiši rečenicu koja sadrži znak
$doslovno - Napravi fajl sa tri reda, koristeći
>pa dvaput>> - Ispiši trenutni datum unutar rečenice, kroz
$( ) - Vidi šta radi
echo *u direktorijumu punom fajlova - Proveri sa
typekoje su od ovih ugrađene, a koje pravi programi:echo,ls,cd,grep
Sledeći korak → history
Povezano: Piping i redirekcija · tee · Bash skripte 2 — promenljive i argumenti · Linux osnove
Comments
Post a Comment