Bash Pagina 119
Exerciții recapitulative elementare Bash
Această pagină wiki conține o serie de exerciții pentru a recapitula sintaxa și conceptele esențiale în Bash. Fiecare exercițiu se concentrează pe utilizarea diferitelor structuri de control, cum ar fi if, while, for, și altele. Exercițiile variază de la afișarea numerelor până la identificarea numerelor prime.
1. Afișarea numerelor pare
#!/bin/bash
for ((i=1; i<=20; i++)); do
if ((i % 2 == 0)); then
echo "$i"
fi
done
2. Afișarea numerelor impare
#!/bin/bash
for ((i=1; i<=20; i++)); do
if ((i % 2 != 0)); then
echo "$i"
fi
done
3. Afișarea numerelor prime
#!/bin/bash
for ((num=2; num<=100; num++)); do
is_prime=1
for ((i=2; i*i<=num; i++)); do
if ((num % i == 0)); then
is_prime=0
break
fi
done
if ((is_prime)); then
echo "$num"
fi
done
4. Afișarea factorialului unui număr
#!/bin/bash read -p "Introduceți un număr: " n factorial=1 for ((i=1; i<=n; i++)); do factorial=$((factorial * i)) done echo "Factorialul lui $n este $factorial"
5. Afișarea tabloului de înmulțire
#!/bin/bash
for ((i=1; i<=10; i++)); do
for ((j=1; j<=10; j++)); do
echo -n "$((i * j)) "
done
echo
done
6. Afișarea numerelor Fibonacci
#!/bin/bash a=0 b=1 echo "Numerele Fibonacci:" for ((i=0; i<10; i++)); do echo "$a" fn=$((a + b)) a=$b b=$fn done
7. Verificarea dacă un număr este par sau impar
#!/bin/bash read -p "Introduceți un număr: " num if ((num % 2 == 0)); then echo "$num este par." else echo "$num este impar." fi
8. Afișarea numerelor de la 1 la 50 folosind while
#!/bin/bash i=1 while ((i <= 50)); do echo "$i" ((i++)) done
9. Numărarea vocale în șir
#!/bin/bash
read -p "Introduceți un șir: " str
count=0
for ((i=0; i<${#str}; i++)); do
char="${str:i:1}"
if [[ $char =~ [aeiouAEIOU] ]]; then
((count++))
fi
done
echo "Numărul de vocale în șirul dat este: $count"
10. Afișarea zilelor săptămânii
#!/bin/bash
days=("Luni" "Marți" "Miercuri" "Joi" "Vineri" "Sâmbătă" "Duminică")
for day in "${days[@]}"; do
echo "$day"
done
11. Afișarea inversă a unui șir
#!/bin/bash
read -p "Introduceți un șir: " str
rev_str=""
for ((i=${#str}-1; i>=0; i--)); do
rev_str+="${str:i:1}"
done
echo "Șirul inversat este: $rev_str"
12. Verificarea unui număr prim
#!/bin/bash
read -p "Introduceți un număr: " num
is_prime=1
if ((num < 2)); then
is_prime=0
else
for ((i=2; i*i<=num; i++)); do
if ((num % i == 0)); then
is_prime=0
break
fi
done
fi
if ((is_prime)); then
echo "$num este prim."
else
echo "$num nu este prim."
fi
13. Afișarea pătratelor numerelor de la 1 la 10
#!/bin/bash for ((i=1; i<=10; i++)); do echo "$i^2 = $((i * i))" done
14. Afișarea tabelului de împărțire
#!/bin/bash
for ((i=1; i<=10; i++)); do
for ((j=1; j<=10; j++)); do
echo -n "$((j / i)) "
done
echo
done
15. Afișarea numerelor de la 1 la 100 care sunt divizibile cu 3
#!/bin/bash
for ((i=1; i<=100; i++)); do
if ((i % 3 == 0)); then
echo "$i"
fi
done
16. Afișarea numerelor de la 1 la 100 care sunt divizibile cu 5
#!/bin/bash
for ((i=1; i<=100; i++)); do
if ((i % 5 == 0)); then
echo "$i"
fi
done
17. Afișarea numerelor de la 1 la 100 care sunt atât pare, cât și divizibile cu 4
#!/bin/bash
for ((i=1; i<=100; i++)); do
if ((i % 2 == 0 && i % 4 == 0)); then
echo "$i"
fi
done
18. Afișarea numerelor de la 1 la 100 care sunt atât impare, cât și divizibile cu 3
#!/bin/bash
for ((i=1; i<=100; i++)); do
if ((i % 2 != 0 && i % 3 == 0)); then
echo "$i"
fi
done
19. Afișarea numărului de linii dintr-un fișier
#!/bin/bash read -p "Introduceți calea către fișier: " file if [[ -f $file ]]; then lines=$(wc -l < "$file") echo "Numărul de linii din fișier este: $lines" else echo "Fișierul nu există." fi
20. Afișarea numerelor de la 1 la 50 folosind until
#!/bin/bash i=1 until ((i > 50)); do echo "$i" ((i++)) done
Aceste exerciții elementare acoperă diferite structuri de control și concepte în Bash, oferind o bază solidă pentru aprofundarea cunoștințelor în scriptingul Bash.
Exercitii recapitulative avansate Bash
Această pagină wiki conține exerciții avansate pentru a recapitula utilizarea unor instrumente și concepte avansate în Bash, inclusiv sed, awk, trap, procesarea JSON, și utilizarea curl pentru interacțiunea cu API-uri. Exercițiile sunt proiectate să te ajute să îți îmbunătățești abilitățile de scripting și manipulare a datelor.
21. Procesarea unui fișier text cu sed
Afișează toate liniile dintr-un fișier care conțin un anumit cuvânt, utilizând sed.
#!/bin/bash read -p "Introduceți numele fișierului: " file read -p "Introduceți cuvântul căutat: " word sed -n "/$word/p" "$file"
22. Extrage informații folosind awk
Afișează al doilea câmp dintr-un fișier CSV.
#!/bin/bash
read -p "Introduceți numele fișierului CSV: " file
awk -F',' '{print $2}' "$file"
23. Utilizarea trap pentru gestionarea semnalelor
Afișează un mesaj atunci când scriptul este întrerupt (CTRL+C).
#!/bin/bash trap 'echo "Scriptul a fost întrerupt."; exit' SIGINT while true; do echo "Scriptul rulează..." sleep 1 done
24. Procesarea fișierelor JSON cu jq
Extrage un anumit câmp dintr-un fișier JSON folosind jq.
#!/bin/bash read -p "Introduceți numele fișierului JSON: " file read -p "Introduceți calea către câmpul dorit (ex: .nume): " field jq "$field" "$file"
25. Utilizarea curl pentru a verifica statusul unui API
Verifică dacă un API returnează un cod de status 200.
#!/bin/bash
read -p "Introduceți URL-ul API-ului: " url
response=$(curl -o /dev/null -s -w "%{http_code}" "$url")
if [[ $response -eq 200 ]]; then
echo "API-ul este disponibil."
else
echo "API-ul a returnat un cod de status: $response"
fi
26. Afișarea utilizatorilor care au acces la sistem folosind awk
Afișează toți utilizatorii din /etc/passwd care au un shell specificat.
#!/bin/bash
read -p "Introduceți shell-ul căutat (ex: /bin/bash): " shell
awk -F':' -v shell="$shell" '$7 == shell {print $1}' /etc/passwd
27. Afișarea numărului de fișiere dintr-un director
Utilizează find și wc pentru a număra fișierele dintr-un director specificat.
#!/bin/bash read -p "Introduceți calea directorului: " dir num_files=$(find "$dir" -type f | wc -l) echo "Numărul de fișiere din directorul $dir este: $num_files"
28. Utilizarea sed pentru a înlocui text într-un fișier
Înlocuiește un cuvânt cu altul într-un fișier specificat.
#!/bin/bash read -p "Introduceți numele fișierului: " file read -p "Introduceți cuvântul de înlocuit: " old_word read -p "Introduceți cuvântul nou: " new_word sed -i "s/$old_word/$new_word/g" "$file"
29. Afișarea primelor 10 linii dintr-un fișier folosind head
#!/bin/bash read -p "Introduceți numele fișierului: " file head -n 10 "$file"
30. Afișarea ultimele 10 linii dintr-un fișier folosind tail
#!/bin/bash read -p "Introduceți numele fișierului: " file tail -n 10 "$file"
31. Verificarea existenței unui fișier folosind test
#!/bin/bash read -p "Introduceți numele fișierului: " file if test -e "$file"; then echo "Fișierul există." else echo "Fișierul nu există." fi
32. Afișarea utilizatorului curent
#!/bin/bash echo "Utilizatorul curent este: $USER"
33. Afișarea directorului curent
#!/bin/bash echo "Directorul curent este: $(pwd)"
34. Afișarea datei curente
#!/bin/bash echo "Data curentă este: $(date)"
35. Afișarea memoriei disponibile
#!/bin/bash
free -h | awk 'NR==2{print "Memorie disponibila: "$7}'
36. Rularea unui script în fundal
#!/bin/bash sleep 60 & echo "Scriptul rulează în fundal."
37. Afișarea PID-ului procesului curent
#!/bin/bash echo "PID-ul procesului curent este: $$"
38. Afișarea statisticilor CPU
#!/bin/bash top -bn1 | grep "Cpu(s)"
39. Verificarea proceselor curente, sortat dupa utilizare CPU
#!/bin/bash ps aux | sort -k3r
40. Afisarea numărului de procesoare
#!/bin/bash echo "Număr de procesoare: $(( $(cut -d'-' -f2 /sys/devices/system/cpu/present) + 1 ))"
41. Generarea unui fișier de ieșire
#!/bin/bash echo "Aceasta este o ieșire de test." > output.txt
Fișier data.json de test, util pentru exercițiu
{
"users": [
{
"name": "Ion Popescu",
"age": 30,
"email": "ion.popescu@example.com",
"hobbies": ["fotbal", "citit", "programare"],
"address": {
"street": "Strada Principală 12",
"city": "București",
"postal_code": "010101"
}
},
{
"name": "Maria Ionescu",
"age": 25,
"email": "maria.ionescu@example.com",
"hobbies": ["gătit", "călătorii", "muzică"],
"address": {
"street": "Strada Florilor 45",
"city": "Cluj-Napoca",
"postal_code": "400000"
}
},
{
"name": "George Vasilescu",
"age": 35,
"email": "george.vasilescu@example.com",
"hobbies": ["pictură", "jogging", "tehnologie"],
"address": {
"street": "Bulevardul Revoluției 10",
"city": "Timișoara",
"postal_code": "300000"
}
}
]
}
Utilizare:
jq '.users[].address' data.json
sau
jq '.users[] | select(.name == "Ion Popescu") | .address' data.json
sau
jq '.users[].name' data.json
Aceste exerciții avansate acoperă o gamă largă de concepte și instrumente din Bash, inclusiv manipularea textului, procesarea fișierelor JSON, gestionarea semnalelor, și interacțiunea cu API-uri. Acestea te ajută să îți dezvolți abilitățile și să te familiarizezi cu utilizarea diverselor comenzi și structuri în scriptingul Bash.