Bosh sahifa Wiki Bash

Bash

Bash — GNU loyihasi doirasida yaratilgan buyruq qatori interpreteri va skript tilidir. Uning nomi Bourne Again Shell iborasidan olingan. Bash foydalanuvchi kiritgan buyruqlarni tahlil qiladi, dasturlarni ishga tushiradi, quvur va yo‘naltirishlarni tashkil etadi hamda ketma-ket amallarni skript faylida avtomatlashtirishga imkon beradi. U ko‘plab Linux distributivlarida keng tarqalgan.

Buyruqni qayta ishlash

Shell satrni tokenlarga ajratadi, o‘zgaruvchi va buyruq almashtirishlarini bajaradi, wildcardlarni fayl nomlariga kengaytiradi, so‘ng built-in yoki tashqi dasturni ishga tushiradi. Qo‘shtirnoq bu bosqichlarga ta’sir qiladi. Ikki tirnoq ichida $HOME kengayadi, bir tirnoq ichida esa matn odatda literal saqlanadi.

name="UzbekDevs"
printf '%s\n' "$name"

O‘zgaruvchini tirnoqsiz ishlatish word splitting va globbingga sabab bo‘lishi mumkin. Shu bois fayl yo‘li yoki foydalanuvchi qiymati ko‘pincha qo‘shtirnoq ichida uzatiladi.

Quvur va yo‘naltirish

> standart chiqishni faylga yozadi, >> oxiriga qo‘shadi, < esa standart kirishni fayldan oladi. Pipe operatori | chap buyruq chiqishini o‘ng buyruq kirishiga ulaydi:

printf '%s\n' *.log | sort | uniq

Har pipeline komponenti alohida jarayonda ishlashi mumkin. Chiqish kodi odatda oxirgi buyruqdan olinadi; set -o pipefail ishlatilsa, oldingi komponent xatosi ham pipeline natijasiga ta’sir qiladi.

Skript tuzilishi

Skriptning birinchi qatoridagi shebang qaysi interpreter ishlatilishini ko‘rsatadi, masalan #!/usr/bin/env bash. Funksiya takroriy mantiqni ajratadi, if, case, for va while boshqaruv oqimini tashkil etadi. Positional parametrlar $1, $2, argumentlar soni $#, barcha argumentlar esa "$@" orqali olinadi.

Array, associative array, arithmetic expression va process substitution Bashning Bourne shellga nisbatan kengaytmalaridir. Faqat POSIX sh muhiti uchun yozilgan skriptda bu imkoniyatlardan foydalanish portativlikni buzishi mumkin.

Jarayon va muhit

Shell variable faqat joriy shellga tegishli; export qilinganda u child processga environment variable sifatida uzatiladi. Child process ota shell muhitini bevosita o‘zgartira olmaydi. cd kabi buyruq shellning o‘z holatini o‘zgartirgani uchun built-in sifatida bajariladi.

Xatolar va xavfsizlik

Buyruq chiqish kodi 0 bo‘lsa muvaffaqiyat, boshqa qiymat esa xatoni anglatadi. set -e ayrim xatolarda chiqishni faollashtiradi, ammo uning istisnolari bor; aniq tekshiruvlar baribir zarur. Ishonchsiz matnni evalga yoki shell buyruq satriga qo‘shish command injection keltirib chiqarishi mumkin. Argumentlar matnli buyruq yasash o‘rniga alohida parametr sifatida uzatiladi.

Subshell va guruhlash

Qavs ichidagi buyruqlar (cd /tmp; do_work) subshellda bajariladi. Undagi katalog yoki o‘zgaruvchi o‘zgarishi ota shellga qaytmaydi. Jingalak qavs { command; } esa odatda joriy shellda guruhlaydi va sintaksisda ajratuvchi talab qiladi. Pipeline komponenti ham implementatsiya va optionga qarab subshellda ishlashi mumkin; shu sababli while read ichida o‘zgartirilgan o‘zgaruvchining keyin saqlanmasligi uchraydi. Process substitution yoki input redirection oqimni boshqa tuzilishda berishi mumkin. Bu xususiyatlar skriptning holat boshqaruvi va parallel jarayonlar bilan ishlashida muhimdir.

Trap va signal

trap shellga signal yoki chiqish hodisasida funksiya bajarishni belgilaydi. Vaqtinchalik faylni tozalash uchun EXIT trap ishlatilishi mumkin. SIGKILL ushlab qolinmaydi, shu sababli cleanup mutlaq kafolat emas. Bir nechta trap qayta yozilsa, avvalgi amal yo‘qolishi mumkin; murakkab skript tozalash vazifalarini bitta boshqariladigan handlerda jamlaydi. Signal kelgan paytdagi child processlar holati ham alohida nazorat qilinadi.

Bog‘liq tushunchalar

shell, GNU, POSIX, Zsh, environment variable, pipe, command line