This is an old revision of the document!
Dorim să dezvoltăm scripturi cât mai practice (desprinse din situații reale).
if
și for
. Poate fi compus doar din comenzi agregate.
În listing-ul de mai jos aveți un output de rulare nmap
:
Nmap scan report for 172.19.7.21 Host is up (0.0025s latency). MAC Address: 94:57:A5:CE:78:02 (Hewlett Packard) Nmap scan report for 172.19.7.31 Host is up (-0.099s latency). MAC Address: 50:65:F3:1C:F1:1A (Hewlett Packard) Nmap scan report for 172.19.7.52 Host is up (0.063s latency). MAC Address: 50:65:F3:36:B2:9E (Hewlett Packard) Nmap scan report for 172.19.7.62 Host is up (0.0020s latency). MAC Address: AC:87:A3:07:43:31 (Apple) Nmap scan report for 172.19.7.70 Host is up (-0.098s latency). MAC Address: 50:65:F3:26:95:FC (Hewlett Packard) Nmap scan report for 172.19.7.250 Host is up (-0.099s latency). MAC Address: 00:50:56:B7:5E:3C (VMware) Nmap scan report for 172.19.7.254 Host is up (0.0011s latency). MAC Address: 00:50:56:B7:3A:82 (VMware)
Acest listing face asociere între adrese MAC și adrese IP curente.
Mai jos este o asociere între adrese MAC și nume de stații, folosind ca separator TAB (folosiți construcția '$\t'
pentru filtre de text):
94:57:A5:CE:78:02 mihaic-pc 50:65:F3:1C:F1:1A cristina-pc 50:65:F3:36:B2:9E lucian-pc AC:87:A3:07:43:31 macmini 50:65:F3:26:95:FC debian-708 00:50:56:B7:5E:3C flavius-pc 00:50:56:B7:3A:82 mihait-pc
Rulați cât mai puține comenzi pentru a obține o asociere între nume de stații și adrese IP curente în forma de mai jos, folosind ca separator virgulă (,
):
hostname1,IP_adddress1 hostname2,IP_adddress2 hostname3,IP_adddress3 [...]
Adică să aveți în final ceva de forma:
mihaic-pc,172.19.7.21 cristina-pc,172.19.7.31
Dorim să realizăm un script care să automatizeze rescalarea dimensiunii unor fișiere imagine.
În arhiva de aici aveți un set de fișiere imagine. Descărcați arhiva și dezarhivați-o folosind comenzile
wget http://koala.cs.pub.ro/shell-scripting/res/arc/media.zip unzip media.zip
Dorim să scalăm dimensiunea acestor fișiere. Pe un fișier oarecare folosiți comanda convert
pentru a-i schimba dimensiunea. De exemplu, comanda
convert -resize 50% input.jpg output.jpg
convertește fișierul input.jpg
în fișierul output.jpg
.
Dorim să convertim fișierele din directorul media/
. Vrem ca numele noului fișier să se încheie cu .2
. Astfel, dacă în variabila f
avem numele fișierul inițial, comanda de conversie va fi
convert -resize 50% "$f" "$f.2"
Realizați un script numit convert-scale-images
care să convertească toate fișierele din directorul media/
în fișiere noi care să se încheie cu .2
. Folosiți for f in * ...
pentru parcurgerea fișierelor.
Actualizați scriptul pentru a primi un parametru care indică scalarea conversiei. Adică dacă parametrul este 25%
atunci se scalează imaginea la 25%
. Să fie afișat mesaj de
Actualizați scriptul pentru a primi ca argument directorul de intrare (în care se găsesc fișierele) și directorul de ieșire (în care se vor găsi fișierele convertite). Dacă directorul de ieșire nu există va fi creat.
Actualizați scriptul să afișeze mesaje de eroare dacă directorul de intrare nu există.
Bonus: Actualizați scriptul ca să valideze dacă argumentul de scalare este în forma XY%
unde X
și Y
sunt cifre. Puteți folosi pentru validare o construcție de forma
echo "$1" | grep <suitable-regex> > /dev/null 2>&1