Global nomi: Loops (for, while, until, select)
O'zbek nomi: Takrorlash sikllari
Sikl - bu bir xil amalni qayta-qayta bajarish mexanizmi. Masalan, 100 ta faylni qayta nomlash yoki 1 dan 50 gacha raqamlarni chop etish.
Hayotiy misol: Zinadan chiqish - har bir pog'onada bir xil harakat takrorlanadi (oyoq ko'tarish, qo'yish), faqat raqam o'zgaradi.
for - ro'yxatdagi har bir element uchun amallarni bajaradi.
for o'zgaruvchi in ro'yxat; do
# amallar
doneOddiy misol:
#!/bin/bash
for son in 1 2 3 4 5; do
echo "Son: $son"
done
# Natija:
# Son: 1
# Son: 2
# Son: 3
# Son: 4
# Son: 5Ismlar bilan:
#!/bin/bash
for ism in Ali Vali Sardor Olim; do
echo "Salom, $ism!"
done
# Natija:
# Salom, Ali!
# Salom, Vali!
# Salom, Sardor!
# Salom, Olim!# 1 dan 10 gacha
for i in {1..10}; do
echo $i
done
# 0 dan 100 gacha, 10 tadan
for i in {0..100..10}; do
echo $i
done
# Harflar
for harf in {a..z}; do
echo $harf
doneHayotiy misol: Papkalar yaratish
#!/bin/bash
# 2024 yil oylarini yaratish
for oy in {01..12}; do
mkdir -p "2024-$oy"
echo "✓ 2024-$oy yaratildi"
donefor ((i=0; i<10; i++)); do
echo "Hisob: $i"
doneTushuntirish:
i=0- boshlang'ich qiymati<10- shart (10 gacha)i++- har safar 1 ga oshir
Misol: Ulushlar jadvali
#!/bin/bash
read -p "Sonni kiriting: " son
echo "=== $son ning ko'paytma jadvali ==="
for ((i=1; i<=10; i++)); do
natija=$((son * i))
echo "$son × $i = $natija"
done# Hozirgi katalogdagi barcha .txt fayllar
for fayl in *.txt; do
echo "Fayl: $fayl"
done
# Barcha .jpg rasmlarni qayta nomlash
hisoblagich=1
for rasm in *.jpg; do
yangi_nom="photo_$(printf "%03d" $hisoblagich).jpg"
mv "$rasm" "$yangi_nom"
echo "$rasm → $yangi_nom"
((hisoblagich++))
doneHayotiy misol: Backup yaratish
#!/bin/bash
BACKUP_DIR="/backup"
SANA=$(date +%Y-%m-%d)
mkdir -p "$BACKUP_DIR/$SANA"
for fayl in *.txt *.pdf *.doc; do
if [ -f "$fayl" ]; then
cp "$fayl" "$BACKUP_DIR/$SANA/"
echo "✓ $fayl nusxalandi"
fi
done
echo "Backup tugadi: $BACKUP_DIR/$SANA"while - shart true bo'lguncha davom etadi.
while [ shart ]; do
# amallar
doneOddiy misol:
#!/bin/bash
i=1
while [ $i -le 5 ]; do
echo "Hisob: $i"
((i++))
done
# Natija:
# Hisob: 1
# Hisob: 2
# Hisob: 3
# Hisob: 4
# Hisob: 5Fayldan o'qish:
#!/bin/bash
# Faylning har bir qatorini o'qish
while read qator; do
echo "Qator: $qator"
done < fayl.txtHayotiy misol: Parol so'rash (3 urinish)
#!/bin/bash
PAROL="secret123"
urinish=0
max_urinish=3
while [ $urinish -lt $max_urinish ]; do
read -sp "Parolni kiriting: " kiritilgan
echo ""
if [ "$kiritilgan" = "$PAROL" ]; then
echo "✓ Kirish muvaffaqiyatli!"
exit 0
else
((urinish++))
qolgan=$((max_urinish - urinish))
if [ $qolgan -gt 0 ]; then
echo "✗ Noto'g'ri! $qolgan ta urinish qoldi"
fi
fi
done
echo "✗ Kirish bloklandi!"
exit 1Cheksiz sikl:
#!/bin/bash
while true; do
echo "Bu cheksiz sikl. Ctrl+C bosing to'xtatish uchun"
sleep 1
doneuntil - while ning teskarisi. Shart false bo'lguncha ishlaydi.
until [ shart ]; do
# amallar
doneMisol:
#!/bin/bash
i=1
until [ $i -gt 5 ]; do
echo "Hisob: $i"
((i++))
doneHayotiy misol: Fayl kutish
#!/bin/bash
FAYL="data.txt"
echo "⏳ $FAYL kutilmoqda..."
until [ -f "$FAYL" ]; do
echo "Hali yo'q... (Ctrl+C - bekor qilish)"
sleep 2
done
echo "✓ $FAYL topildi!"Server kutish:
#!/bin/bash
HOST="example.com"
PORT=80
echo "⏳ $HOST:$PORT ga ulanish kutilmoqda..."
until nc -z "$HOST" "$PORT" 2>/dev/null; do
echo "Server hali tayyor emas..."
sleep 5
done
echo "✓ Server tayyor!"select - foydalanuvchiga tanlov menyusini ko'rsatadi.
select o'zgaruvchi in variant1 variant2 variant3; do
# tanlovga qarab amallar
break # Sikldan chiqish
doneOddiy misol:
#!/bin/bash
echo "Sevimli mevasini tanlang:"
select meva in Olma Nok Uzum "O'rik" Chiqish; do
case $meva in
Olma|Nok|Uzum|"O'rik")
echo "✓ Siz ${meva}ni tanladingiz"
break
;;
Chiqish)
echo "Xayr!"
break
;;
*)
echo "✗ Noto'g'ri tanlov!"
;;
esac
doneNatija:
Sevimli mevasini tanlang:
1) Olma
2) Nok
3) Uzum
4) O'rik
5) Chiqish
#? 3
✓ Siz Uzmni tanladingiz
Hayotiy misol: Fayl boshqaruv
#!/bin/bash
PS3="Tanlovingiz: " # Prompt matni
select amal in "Fayl yaratish" "Fayl o'chirish" "Fayllarni ko'rish" "Chiqish"; do
case $REPLY in
1)
read -p "Fayl nomi: " nom
touch "$nom"
echo "✓ $nom yaratildi"
;;
2)
read -p "O'chiriladi fayl: " nom
rm -i "$nom"
;;
3)
echo "Fayllar:"
ls -lh
;;
4)
echo "Xayr!"
break
;;
*)
echo "✗ Noto'g'ri tanlov!"
;;
esac
echo "" # Bo'sh qator
done#!/bin/bash
for i in {1..10}; do
if [ $i -eq 5 ]; then
echo "5 ga yetdik, to'xtaymiz!"
break
fi
echo "Son: $i"
done
# Natija:
# Son: 1
# Son: 2
# Son: 3
# Son: 4
# 5 ga yetdik, to'xtaymiz!Ichma-ich siklda:
#!/bin/bash
for i in {1..3}; do
for j in {1..3}; do
if [ $j -eq 2 ]; then
break # Faqat ichki sikldan chiqadi
fi
echo "$i-$j"
done
done#!/bin/bash
for i in {1..5}; do
if [ $i -eq 3 ]; then
continue # 3 ni o'tkazib yuborish
fi
echo "Son: $i"
done
# Natija:
# Son: 1
# Son: 2
# Son: 4
# Son: 5Hayotiy misol: Faqat .txt fayllarni qayta ishlash
#!/bin/bash
for fayl in *; do
# Agar .txt bo'lmasa, o'tkazib yuborish
if [[ ! $fayl ==
*.txt ]]; then
continue
fi
# Faqat .txt fayllar uchun
echo "Qayta ishlanmoqda: $fayl"
# Bu yerda faylni qayta ishlash kodi
done#!/bin/bash
echo "Yuklanmoqda..."
for i in {1..100}; do
# Progress bar chizish
printf "\r["
# To'ldirilgan qism
for ((j=0; j<i/2; j++)); do
printf "="
done
# Bo'sh qism
for ((j=i/2; j<50; j++)); do
printf " "
done
printf "] %d%%" $i
sleep 0.05
done
echo ""
echo "✓ Tayyor!"#!/bin/bash
echo "=== FAYL STATISTIKASI ==="
jami_fayllar=0
jami_kataloglar=0
jami_hajm=0
for element in *; do
if [ -f "$element" ]; then
((jami_fayllar++))
hajm=$(stat -f%z "$element" 2>/dev/null || stat -c%s "$element" 2>/dev/null)
((jami_hajm += hajm))
elif [ -d "$element" ]; then
((jami_kataloglar++))
fi
done
echo "Fayllar: $jami_fayllar"
echo "Kataloglar: $jami_kataloglar"
echo "Umumiy hajm: $(echo "scale=2; $jami_hajm/1024/1024" | bc) MB"#!/bin/bash
MANBA_DIR="$HOME/Documents"
BACKUP_DIR="$HOME/Backups"
SANA=$(date +%Y-%m-%d_%H-%M-%S)
LOG_FAYL="$BACKUP_DIR/backup_$SANA.log"
mkdir -p "$BACKUP_DIR"
echo "=== BACKUP BOSHLANMOQDA ===" | tee "$LOG_FAYL"
echo "Sana: $(date)" | tee -a "$LOG_FAYL"
echo "Manba: $MANBA_DIR" | tee -a "$LOG_FAYL"
echo "" | tee -a "$LOG_FAYL"
nusxalandi=0
xato=0
for fayl in "$MANBA_DIR"/*; do
if [ -f "$fayl" ]; then
fayl_nomi=$(basename "$fayl")
if cp "$fayl" "$BACKUP_DIR/${fayl_nomi}_$SANA"; then
echo "✓ $fayl_nomi" | tee -a "$LOG_FAYL"
((nusxalandi++))
else
echo "✗ $fayl_nomi - XATO!" | tee -a "$LOG_FAYL"
((xato++))
fi
fi
done
echo "" | tee -a "$LOG_FAYL"
echo "=== NATIJA ===" | tee -a "$LOG_FAYL"
echo "Nusxalandi: $nusxalandi" | tee -a "$LOG_FAYL"
echo "Xatolar: $xato" | tee -a "$LOG_FAYL"#!/bin/bash
INTERVAL=5 # Tekshirish oralig'i (soniya)
LOG_FAYL="system_monitor.log"
echo "=== TIZIM MONITORING BOSHLANDI ===" | tee "$LOG_FAYL"
echo "Interval: ${INTERVAL}s" | tee -a "$LOG_FAYL"
echo "Log: $LOG_FAYL" | tee -a "$LOG_FAYL"
echo "" | tee -a "$LOG_FAYL"
hisoblagich=1
while true; do
VAQT=$(date "+%Y-%m-%d %H:%M:%S")
# CPU yuklanishi
CPU=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}' | cut -d'%' -f1)
# RAM
RAM=$(free | grep Mem | awk '{printf "%.1f", $3/$2 * 100}')
# Disk
DISK=$(df -h / | awk 'NR==2 {print $5}' | cut -d'%' -f1)
# Log ga yozish
echo "[$VAQT] #$hisoblagich - CPU: ${CPU}% | RAM: ${RAM}% | Disk: ${DISK}%" | tee -a "$LOG_FAYL"
# Ogohlantirish
CPU_INT=${CPU%.*}
if [ $CPU_INT -gt 80 ] || [ ${RAM%.*} -gt 85 ] || [ $DISK -gt 90 ]; then
echo " ⚠️ DIQQAT: Yuqori yuklanish!" | tee -a "$LOG_FAYL"
fi
((hisoblagich++))
sleep $INTERVAL
done#!/bin/bash
#sudo apt update
#sudo apt install imagemagick -y
echo "=== RASMLARNI OPTIMIZATSIYA ===="
if ! command -v convert &> /dev/null; then
echo "✗ ImageMagick o'rnatilmagan!"
echo "O'rnatish: sudo apt install imagemagick"
exit 1
fi
read -p "Sifat (1-100, tavsiya 85): " sifat
sifat=${sifat:-85}
mkdir -p optimized
jami=0
muvaffaqiyatli=0
for rasm in *.jpg *.png *.jpeg; do
if [ -f "$rasm" ]; then
((jami++))
echo -n "[$jami] $rasm ... "
asl_hajm=$(stat -f%z "$rasm" 2>/dev/null || stat -c%s "$rasm")
if convert "$rasm" -quality $sifat "optimized/$rasm"; then
yangi_hajm=$(stat -f%z "optimized/$rasm" 2>/dev/null || stat -c%s "optimized/$rasm")
# Hajm farqi
farq=$((asl_hajm - yangi_hajm))
foiz=$((farq * 100 / asl_hajm))
if [ $farq -gt 0 ]; then
echo "✓ -${foiz}% ($(echo "scale=1; $farq/1024" | bc)KB)"
((muvaffaqiyatli++))
else
echo "○ O'zgarmadi"
fi
else
echo "✗ Xato!"
fi
fi
done
if [ $jami -eq 0 ]; then
echo "Rasmlar topilmadi!"
else
echo ""
echo "=== NATIJA ==="
echo "Jami: $jami"
echo "Optimizatsiya qilindi: $muvaffaqiyatli"
fi#!/bin/bash
echo "=== KALKULATOR ==="
echo "Buyruqlar: +, -, *, /, ^, %, clear, exit"
echo ""
natija=0
while true; do
echo "Hozirgi natija: $natija"
echo ""
# Amal tanlash
PS3="Amal tanlang: "
select amal in "Qo'shish (+)" "Ayirish (-)" "Ko'paytirish (*)" "Bo'lish (/)" "Daraja (^)" "Qoldiq (%)" "Tozalash" "Chiqish"; do
case $REPLY in
1) oper="+"; break ;;
2) oper="-"; break ;;
3) oper="*"; break ;;
4) oper="/"; break ;;
5) oper="^"; break ;;
6) oper="%"; break ;;
7)
natija=0
echo "✓ Tozalandi"
break 2 # Tashqi siklga qaytish
;;
8)
echo "Xayr!"
exit 0
;;
*)
echo "✗ Noto'g'ri tanlov!"
continue
;;
esac
done
read -p "Son kiriting: " son
case $oper in
"+")
natija=$((natija + son))
;;
"-")
natija=$((natija - son))
;;
"*")
natija=$((natija * son))
;;
"/")
if [ $son -eq 0 ]; then
echo "✗ 0 ga bo'lib bo'lmaydi!"
continue
fi
natija=$(echo "scale=2; $natija / $son" | bc)
;;
"^")
natija=$((natija ** son))
;;
"%")
natija=$((natija % son))
;;
esac
echo ""
echo "━━━━━━━━━━━━━━━━━━━━"
done#!/bin/bash
echo "Ko'paytma jadvali:"
echo ""
for i in {1..10}; do
for j in {1..10}; do
natija=$((i * j))
printf "%4d" $natija
done
echo ""
doneYulduzcha uchburchak:
#!/bin/bash
read -p "Qatorlar soni: " n
for ((i=1; i<=n; i++)); do
for ((j=1; j<=i; j++)); do
echo -n "* "
done
echo ""
done
# Natija (n=5):
# *
# * *
# * * *
# * * * *
# * * * * *- Vazifa 1: 1 dan 100 gacha bo'lgan sonlarning yig'indisini hisoblovchi for sikli yozing
- Vazifa 2: Foydalanuvchidan raqam so'rab, uning faktorialini (5! = 5×4×3×2×1) hisoblovchi while sikli
- Vazifa 3: Katalogdagi barcha .txt fayllarni sanab, har birining qator sonini chiqaruvchi skript
- Vazifa 4: 1 dan 50 gacha bo'lgan juft sonlarni ekranga chiqaruvchi dastur (continue dan foydalaning)
- Vazifa 5: Select bilan dastur yozing: Foydalanuvchi operatsiya tanlaydi va 2 ta son kiritadi, natija chiqadi