Global nomi: Variables and Data Types
O'zbek nomi: O'zgaruvchilar va ma'lumot turlari
O'zgaruvchi - bu ma'lumotni saqlaydigan konteyner (idish). Xuddi qutiga nom yozib, ichiga biror narsani solib qo'yganingiz kabi.
Hayotiy misol: Telefon kontaktlari ro'yxati - har bir nom (o'zgaruvchi) telefon raqamini (qiymat) saqlaydi.
# Oddiy o'zgaruvchi
ism="Sardor"
yosh=25
shahar="Toshkent"
# Bo'sh joy bo'lmasligi kerak!
# NOTO'G'RI: ism = "Sardor"
# TO'G'RI: ism="Sardor"# $ belgisi bilan
echo $ism
# Natija: Sardor
# Xavfsizroq usul (qavslar bilan)
echo "${ism}"
# Matn ichida
echo "Mening ismim ${ism}, yoshim ${yosh}"
# Natija: Mening ismim Sardor, yoshim 25Nima uchun qavslar?
fayl="hujjat"
echo "$fayl_nusxa" # Bo'sh (fayl_nusxa o'zgaruvchisi yo'q)
echo "${fayl}_nusxa" # hujjat_nusxa (to'g'ri)✅ TO'G'RI:
ism="Ali"
ism123="Vali"
_maxsus="qiymat"
ISM="KATTA" # Katta-kichik harflar farq qiladi❌ NOTO'G'RI:
123ism="Ali" # Raqam bilan boshlanmasligi kerak
ism-familiya="Ali" # Defis ishlatilmaydi
ism familiya="Ali" # Bo'sh joy bo'lmasligi kerak# Qo'shtirnoq ichida
salom="Assalomu alaykum"
# Yoki birtirnoq
salom='Assalomu alaykum'
# Farqi:
ism="Sardor"
# Qo'shtirnoqda - o'zgaruvchi ishlaydi
echo "Salom, $ism!" # Salom, Sardor!
# Birtirnoqda - aynan matn
echo 'Salom, $ism!' # Salom, $ism!Ko'p qatorli matn:
xabar="Birinchi qator
Ikkinchi qator
Uchinchi qator"
echo "$xabar"Heredoc usuli:
xabar=$(cat << EOF
Birinchi qator
Ikkinchi qator
Uchinchi qator
EOF
)
echo "$xabar"yosh=25
narx=15000
soni=0
# Raqamlar bilan ishlash
echo $yosh
echo $narxHayotiy misol:
# Mahsulot narxi
mahsulot_narxi=50000
soni=3
jami=$((mahsulot_narxi * soni))
echo "Jami: ${jami} so'm"
# Natija: Jami: 150000 so'mBash da true va false mavjud:
aktiv=true
yopiq=false
if $aktiv; then
echo "Aktiv!"
fiYoki raqamlar bilan:
# 0 = true (muvaffaqiyat)
# 1 yoki boshqa = false (xato)
holat=0
if [ $holat -eq 0 ]; then
echo "Muvaffaqiyatli!"
fi#!/bin/bash
funksiya() {
local mahalliy="Bu faqat funksiya ichida"
echo $mahalliy
}
funksiya
echo $mahalliy # Bo'sh (funksiyadan tashqarida ko'rinmaydi)#!/bin/bash
global="Hamma joyda ko'rinadi"
funksiya() {
echo $global # Ishlaydi
}
funksiya
echo $global # Ishlaydi# Export qilish - barcha child processlarda ko'rinadi
export MENING_OZGARUVCHIM="Qiymat"
# Tizim o'zgaruvchilari
echo $HOME # Uy katalogi
echo $USER # Foydalanuvchi nomi
echo $PATH # Dasturlar yo'llari
echo $PWD # Hozirgi katalog
echo $SHELL # Ishlatilayotgan shell
echo $LANG # Til sozlamalariEnvironment o'zgaruvchilarni ko'rish:
# Barchasi
env
# yoki
printenv
# Ma'lum birini
printenv HOMEDoimiy qilish (.bashrc ga qo'shish):
echo 'export MENING_DASTURIM="/opt/dastur"' >> ~/.bashrc
source ~/.bashrcism="Sardor"
echo $ism # Sardor
unset ism
echo $ism # Bo'shreadonly PI=3.14159
echo $PI # 3.14159
PI=3.14 # Xato! O'zgartirib bo'lmaydi# $(buyruq) usuli (tavsiya etiladi)
bugun=$(date +%Y-%m-%d)
echo $bugun # 2025-10-22
# Backtick usuli (eski)
bugun=`date +%Y-%m-%d`
# Fayllar soni
fayllar_soni=$(ls | wc -l)
echo "Katalogda ${fayllar_soni} ta fayl bor"
# Hozirgi katalog
joriy=$(pwd)
echo "Siz $joriy da turibsiz"# Agar o'zgaruvchi bo'sh bo'lsa, default qiymat
ism=${FOYDALANUVCHI:-"Mehmon"}
echo $ism
# Bo'sh bo'lsa, qiymat berish va saqlash
PORT=${PORT:=8080}
echo $PORT
# Bo'sh bo'lsa, xato berish
fayl=${1:?"Fayl nomi kiritilmadi!"}Hayotiy misol:
#!/bin/bash
# Server portini sozlash
PORT=${PORT:-3000} # Default 3000
echo "Server $PORT portida ishga tushmoqda..."# Mavjudligini tekshirish
if [ -z "$ism" ]; then
echo "O'zgaruvchi bo'sh"
fi
# Bo'sh emasligini tekshirish
if [ -n "$ism" ]; then
echo "O'zgaruvchi to'ldirilgan"
fi
# Qiymatni solishtirish
if [ "$yosh" -eq 25 ]; then
echo "Yosh 25 ga teng"
fimatn="Salom Dunyo"
echo ${#matn} # 11 (belgilar soni)
massiv=(bir ikki uch)
echo ${#massiv[@]} # 3 (elementlar soni)matn="Salom Dunyo!"
# Birinchi 5 belgi
echo ${matn:0:5} # Salom
# 6-pozitsiyadan boshlab
echo ${matn:6} # Dunyo!
# Oxirgi 6 belgi
echo ${matn: -6} # Dunyo!fayl="hujjat.txt"
# Birinchi uchraganini almashtirish
echo ${fayl/txt/pdf} # hujjat.pdf
# Barcha uchraganlarini almashtirish
matn="aaa bbb aaa"
echo ${matn//aaa/xxx} # xxx bbb xxx
# Boshidan o'chirish
url="https://example.com"
echo ${url#https://} # example.com
# Oxiridan o'chirish
fayl="arxiv.tar.gz"
echo ${fayl%.gz} # arxiv.tar
echo ${fayl%%.*} # arxiv (barcha kengaytmalar)Hayotiy misol:
# Fayl kengaytmasini o'zgartirish
for fayl in *.txt; do
yangi="${fayl%.txt}.md"
mv "$fayl" "$yangi"
echo "$fayl → $yangi"
donematn="Salom Dunyo"
# Katta harflarga
echo ${matn^^} # SALOM DUNYO
# Kichik harflarga
echo ${matn,,} # salom dunyo
# Birinchi harfni katta
echo ${matn^} # Salom dunyo
# Har bir so'zning birinchisini katta
matn="salom dunyo"
echo ${matn^^[sd]} # Salom Dunyo#!/bin/bash
# Foydalanuvchidan ma'lumot so'rash
echo "=== Ro'yxatdan o'tish ==="
read -p "Ismingiz: " ism
read -p "Yoshingiz: " yosh
read -p "Shahringiz [Toshkent]: " shahar
# Default qiymat
shahar=${shahar:-"Toshkent"}
# Ma'lumotlarni saqlash
readonly SANA=$(date +%Y-%m-%d)
fayl="foydalanuvchi_${ism}_${SANA}.txt"
# Faylga yozish
cat > "$fayl" << EOF
Ism: $ism
Yosh: $yosh
Shahar: $shahar
Ro'yxatdan o'tgan: $SANA
EOF
echo "Ma'lumotlar $fayl ga saqlandi"
cat "$fayl"#!/bin/bash
# $0 - skript nomi
echo "Skript: $0"
# $1, $2, ... - argumentlar
echo "Birinchi argument: $1"
echo "Ikkinchi argument: $2"
# $# - argumentlar soni
echo "Jami argumentlar: $#"
# $@ - barcha argumentlar (alohida)
echo "Barcha argumentlar: $@"
# $* - barcha argumentlar (bitta satr)
echo "Argumentlar satri: $*"
# $? - oxirgi buyruq natijasi (0 = muvaffaqiyat)
ls /mavjud_emas
echo "Xato kodi: $?"
# $$ - hozirgi process ID
echo "Process ID: $$"
# $! - oxirgi background process ID
sleep 10 &
echo "Background process: $!"Hayotiy misol:
#!/bin/bash
# Fayl nusxalash skripti
if [ $# -ne 2 ]; then
echo "Foydalanish: $0 <manba> <nusxa>"
exit 1
fi
manba="$1"
nusxa="$2"
if [ ! -f "$manba" ]; then
echo "Xato: $manba topilmadi!"
exit 1
fi
cp "$manba" "$nusxa"
if [ $? -eq 0 ]; then
echo "✓ Nusxalandi: $manba → $nusxa"
else
echo "✗ Xato yuz berdi!"
exit 1
fi- Vazifa 1: Uchta o'zgaruvchi yarating (ism, yosh, shahar) va ularni echo bilan ekranga chiqaring
- Vazifa 2: Bugungi sanani
$(date)bilan oling va faylga yozing - Vazifa 3: Skript yozing: 2 ta raqam kiritilsin, ularning yig'indisini hisoblasin
- Vazifa 4: PATH o'zgaruvchisini ekranga chiqaring va qancha yo'l borligini sanang
- Vazifa 5: Fayl nomini olib, kengaytmasini almashtiruvchi skript yozing (txt → md)