Shell Basics
1.1 Shell turlari
Nazariya
Shell - bu operatsion tizim va foydalanuvchi o'rtasidagi interfeys bo'lib, buyruqlarni qabul qiladi va bajaradi. Shell terminal orqali ishlaydi va scriptlar yozish imkonini beradi.
Asosiy shell turlari:
- Bash (Bourne Again Shell) - Eng keng tarqalgan, Linux va macOS da default
- Zsh (Z Shell) - Zamonaviy imkoniyatlar, auto-complete, theming
- Fish (Friendly Interactive Shell) - Yangi boshlovchilar uchun qulay
- Dash (Debian Almquist Shell) - Tez va minimal, system scriptlar uchun
- Ksh (Korn Shell) - Unix tizimlarda keng qo'llaniladi
- Tcsh - C shell ning yaxshilangan versiyasi
Amaliyot
# Hozirgi shell ni aniqlash
echo $SHELL
# Natija: /bin/bash
# Shell versiyasini bilish
bash --version
# yoki
$SHELL --version
# Mavjud shell larni ko'rish
cat /etc/shells
# Hozirda qaysi shell ishlatayotganini bilish
ps -p $$
# Shell o'zgartirish (doimiy)
chsh -s /bin/zsh
# Vaqtincha boshqa shell ga o'tish
zsh # zsh ga o'tish
exit # orqaga qaytish
Real hayotdagi misol:
# Har xil shell larda script ishlatish
#!/bin/bash # Bash uchun
#!/bin/zsh # Zsh uchun
#!/bin/sh # POSIX uchun (portable)
1.2 Script yaratish
Nazariya
Script - bu ketma-ket bajariladigan buyruqlar to'plami. Har bir script shebang (#!) bilan boshlanishi kerak, bu qaysi interpreterni ishlatishni belgilaydi.
Script ning tuzilishi:
- Shebang qatori
- Sharhlar (ixtiyoriy)
- O'zgaruvchilar (ixtiyoriy)
- Asosiy kod
- Xato bilan ishlash (ixtiyoriy)
Amaliyot
Birinchi script yaratish:
#!/bin/bash
# Fayl nomi: first_script.sh
# Maqsad: Birinchi shell script
echo "===== Tizim Ma'lumotlari ====="
echo "Bugungi sana: $(date)"
echo "Joriy foydalanuvchi: $USER"
echo "Uy katalogi: $HOME"
echo "Joriy katalog: $(pwd)"
echo "Tizim: $(uname -s)"
echo "============================="
Script ni ishga tushirish:
# 1. Script yaratish
nano first_script.sh
# 2. Kodni yozish (yuqoridagi kod)
# 3. Execute huquqi berish
chmod +x first_script.sh
# 4. Ishga tushirish
./first_script.sh
# Yoki to'liq path bilan
bash first_script.sh
Murakkab script misoli:
#!/bin/bash
# Fayl nomi: system_info.sh
# Maqsad: Tizim haqida batafsil ma'lumot
clear
echo "╔══════════════════════════════════════╗"
echo "║ TIZIM MA'LUMOTLARI ║"
echo "╚══════════════════════════════════════╝"
echo
echo "📅 Sana va vaqt:"
date "+%Y-%m-%d %H:%M:%S"
echo
echo "👤 Foydalanuvchi ma'lumotlari:"
echo " Foydalanuvchi: $USER"
echo " UID: $(id -u)"
echo " Guruhlar: $(groups)"
echo
echo "💾 Tizim resurslari:"
echo " RAM: $(free -h | awk '/^Mem:/ {print $3 "/" $2}')"
echo " Disk: $(df -h / | awk 'NR==2 {print $3 "/" $2 " (" $5 " ishlatilgan)"}')"
echo
echo "🖥️ Tizim ma'lumotlari:"
echo " OS: $(uname -o)"
echo " Kernel: $(uname -r)"
echo " Arxitektura: $(uname -m)"
echo
echo "📊 Jarayonlar:"
echo " Jami jarayonlar: $(ps aux | wc -l)"
echo " Ishga tushirgan jarayonlar: $(ps -u $USER | wc -l)"
1.3 Comments (Sharhlar)
Nazariya
Sharhlar kod ichida tushuntirish va hujjatlash uchun ishlatiladi. Ular bajarilmaydi va faqat kodni o'qish uchun mo'ljallangan.
Sharh turlari:
- Bir qatorli sharh:
# - Ko'p qatorli sharh:
: '...'yoki<<COMMENT ... COMMENT
Amaliyot
#!/bin/bash
# Bu script sharhlar haqida
# =====================================
# SHARH TURLARI
# =====================================
# Bu bir qatorli sharh
echo "Salom" # Bu ham sharh (qator oxirida)
# Ko'p qatorli sharh - 1-usul
: '
Bu yerda ko'p qatorli
sharh yozish mumkin.
Bir nechta qator
'
# Ko'p qatorli sharh - 2-usul
<<COMMENT
Bu ham ko'p qatorli sharh.
COMMENT bloki ichida
har qanday matn yozish mumkin
COMMENT
# =====================================
# YAXSHI SHARH YOZISH QOIDALARI
# =====================================
# ✅ YAXSHI: Aniq va qisqa
# Foydalanuvchi nomini o'qish
read -p "Ismingizni kiriting: " username
# ✅ YAXSHI: Murakkab qismni tushuntirish
# Parolni hash qilish (SHA-256)
password_hash=$(echo -n "$password" | sha256sum | cut -d' ' -f1)
# ❌ YOMON: Aniq bo'lgan narsani takrorlash
# Echo buyrug'i bilan salom chiqarish
echo "Salom"
# =====================================
# FUNKSIONAL SHARHLAR
# =====================================
# TODO: Bu qismni keyinroq yaxshilash kerak
# FIXME: Bu yerda xato bo'lishi mumkin
# HACK: Vaqtincha yechim
# NOTE: Muhim eslatma
# =====================================
# HEADER COMMENT NAMUNASI
# =====================================
Professional script header misoli:
#!/bin/bash
#
# Script nomi: backup_system.sh
# Versiya: 1.2.0
# Muallif: Ahmad Karimov
# Sana: 2024-06-24
# Tavsif: Tizim fayllarini backup qilish uchun script
#
# Foydalanish:
# ./backup_system.sh [options]
#
# Options:
# -h, --help Yordam ko'rsatish
# -v, --verbose Batafsil chiqarish
# -d, --dir Backup katalogi
#
# Misol:
# ./backup_system.sh --dir /backup --verbose
#
# Talablar:
# - Bash 4.0+
# - tar buyrug'i
# - 1GB bo'sh joy
#
# Litsenziya: MIT
#
# Script sozlamalari
set -euo pipefail # Xatolar bo'lganda to'xtatish
# Global o'zgaruvchilar
readonly SCRIPT_NAME=$(basename "$0")
readonly SCRIPT_VERSION="1.2.0"
readonly BACKUP_DATE=$(date +%Y%m%d_%H%M%S)
Debugging uchun sharhlar:
#!/bin/bash
# Debug rejimi yoqish
# set -x # Har bir buyruqni ko'rsatish
echo "Script boshlandi"
# Vaqtincha o'chirilgan kod
# echo "Bu qator hozir ishlamaydi"
echo "Asosiy kod"
# Test uchun shart
DEBUG=true
if [ "$DEBUG" = true ]; then
echo "DEBUG: O'zgaruvchi qiymatlari"
echo "DEBUG: USER=$USER"
echo "DEBUG: PWD=$PWD"
fi
echo "Script tugadi"
Kod blokini sharhga olish:
#!/bin/bash
echo "Bu qism ishlaydi"
: '
Bu butun blok sharh hisoblanadi.
Bir nechta qatorni
vaqtincha o'chirish uchun qulay.
echo "Bu ishlamaydi"
if [ 1 -eq 1 ]; then
echo "Bu ham ishlamaydi"
fi
'
echo "Bu yana ishlaydi"
Script ichida documentation:
#!/bin/bash
# Funksiya: file_exists
# Maqsad: Fayl mavjudligini tekshirish
# Parametr: $1 - fayl yo'li
# Qaytarish: 0 - mavjud, 1 - mavjud emas
# Misol: file_exists "/etc/passwd" && echo "Mavjud"
file_exists() {
local file_path="$1"
# Fayl mavjudligini tekshirish
if [[ -f "$file_path" ]]; then
return 0 # Mavjud
else
return 1 # Mavjud emas
fi
}
# Asosiy dastur
main() {
# Dastur boshlandi
echo "Fayl tekshirgich"
# Foydalanuvchidan fayl yo'lini so'rash
read -p "Fayl yo'lini kiriting: " file_path
# Tekshirish va natija
if file_exists "$file_path"; then
echo "✅ Fayl mavjud: $file_path"
else
echo "❌ Fayl topilmadi: $file_path"
fi
}
# Scriptni ishga tushirish
main "$@"
Bu 1-bob bo'yicha to'liq qo'llanma. Har bir qism nazariya va real amaliy misollar bilan to'ldirilgan. Keyingi bob uchun Variables haqida yozamanmi?