AXV

Bash skripting asoslari

O'zgaruvchilar, argumentlar va kiritish/chiqarish: read, echo, printf

10-sinfDevOps4-hafta ยท 10-dars

Bugungi dars maqsadlari

Birinchi skript

Buyruqlarni faylga yozamiz, #!/bin/bash va chmod +x bilan ishga tushiramiz.

O'zgaruvchilar

NOM="qiymat", $NOM, tirnoqlar va $(buyruq).

Argument va kiritish

$1, $#, read, echo, printf.

Dars raqamlarda

0
shell o'zgaruvchilari: local, environment, system
0
shebang: skriptning birinchi qatori
0
asosiy belgi: $0, $1, $#, $@
Qo'llanmaga ko'ra, shell scripting Linuxda jarayonlarni avtomatlashtirishga yordam beradi.
01

Skript nima?

Buyruqlar ketma-ketligi fayl ichida

Skript qanday ishlaydi?

script.shbuyruqlar fayliBashinterpretatorKernelyadroSkript = fayl ichidagi buyruqlar ketma-ketligi

Qismlar ustiga bosing.

Qo'lda yoki skript bilan?

Qo'lda

Har safar 4 ta buyruqni qayta yozasiz. Bir qadam unutilsa, natija boshqacha.

VS

Skript

Bir marta yozasiz, istalgancha ishga tushirasiz. Natija har safar bir xil.

qo'llanmadagi imperativ misol
apt update
apt install -y nginx
cp nginx.conf /etc/nginx/nginx.conf
systemctl restart nginx

Skript fayli anatomiyasi

#!/bin/bashshebang# salom.sh - birinchi skriptizohISM="Ali"o'zgaruvchiecho "Salom, $ISM!"buyruq

Har qatorni bosing yoki ustiga olib boring.

Birinchi skript


#!/bin/bash
# salom.sh - birinchi skript
ISM="Ali"
echo "Salom, $ISM!"
echo "Papka: $PWD"
echo "Foydalanuvchi: $USER"
$PWD va $USER shell o'zgaruvchilari (qo'llanma, 1.1-1.3 jadvallar).

Skriptni ishga tushirish: 4 qadam

1. Yozing

nano salom.sh bilan faylni yarating.

2. Ruxsat bering

chmod +x salom.sh (yoki chmod 755 salom.sh).

3. Ishga tushiring

./salom.sh: nuqta-slesh joriy papkani bildiradi.

4. Natijani tekshiring

Chiqishni ko'ring, kerak bo'lsa nano da tuzating.

Ishga tushirish va tipik xato

Terminal
$ ./salom.sh
bash: ./salom.sh: Permission denied
$ chmod +x salom.sh
$ ./salom.sh
Salom, Ali!
Papka: /home/ali
Foydalanuvchi: ali
$ bash salom.sh
Salom, Ali!
Permission denied chiqsa: faylda x (execute) ruxsati yo'q. 1-haftadagi chmod ni eslang.
02

O'zgaruvchilar

Qiymatni nom bilan saqlaymiz

O'zgaruvchi = yorlig'i bor quti

ISMnom"Ali"qiymatecho $ISMAlichiqishISM="Ali"bo'sh joysiz!
Quti ustidagi yorliq - nom, ichidagi narsa - qiymat. $ qutini ochadi.

Tenglik atrofida bo'sh joy yo'q


ISM = "Ali"
echo "Salom, $ISM"

Natija: ISM: command not found

Tenglik atrofida bo'sh joy yo'q


ISM="Ali"
echo "Salom, $ISM"

Natija: Salom, Ali

Uch xil o'zgaruvchi (qo'llanma)

Local

bosing

Faqat joriy shellda. NOM="Ali". Quyi jarayonga o'tmaydi.

Environment

bosing

Quyi jarayonlarga ham ochiq: export PORT=8080. Ko'rish: printenv, env.

Shell (system)

bosing

Shellning o'zi yaratadi, katta harfda: USER, HOME, PWD.

Tirnoqlar: farq katta

$ ishlaydi

ISM="Ali"
echo "Salom, $ISM"
# Salom, Ali

Matn o'zgarmaydi

ISM="Ali"
echo 'Salom, $ISM'
# Salom, $ISM

Buyruq natijasini o'zgaruvchiga


YIL=$(date +%Y)
echo "Yil: $YIL"
FAYLLAR=$(ls | wc -l)
    

Pastga bosing: ${} haqida.

Qo'shimcha: ${NOM}

SON=5
echo "$SONta"      # bo'sh: SONta degan o'zgaruvchi yo'q
echo "${SON}ta"    # 5ta
03

Argument va kiritish

Skript tashqaridan ma'lumot oladi

Argumentlar: skriptga berilgan qiymatlar

./arg.sh Ali 16$0./arg.sh$1Ali$216$#2$@ = Ali 16 (hamma argumentlar)

arg.sh


#!/bin/bash
echo "Skript nomi: $0"
echo "1-argument: $1"
echo "2-argument: $2"
echo "Argumentlar soni: $#"
echo "Hammasi: $@"
Terminal
$ ./arg.sh Ali 16
Skript nomi: ./arg.sh
1-argument: Ali
2-argument: 16
Argumentlar soni: 2
Hammasi: Ali 16

Kiritish va chiqarish: echo, printf, read

echo

Matnni qatorga chiqaradi. echo -n qator o'tkazmaydi.

printf

Formatli chiqish: %s matn, %d butun son, \n yangi qator.

read

Klaviaturadan (stdin) qiymat oladi. -p savol matni, -s yashirin.

kirish.sh


#!/bin/bash
read -p "Ismingiz: " ISM
read -p "Yoshingiz: " YOSH
printf "%s, siz %d yoshdasiz\n" "$ISM" "$YOSH"
printf "Keyingi yil: %d\n" $((YOSH + 1))
$((...)) ichida arifmetik amal bajariladi. Keyingi darsda batafsil.

Tezkor bilim sinovi

./hisob.sh 5 9 2 ishga tushirilganda $# nimaga teng?

$# argumentlar sonini beradi: 5, 9 va 2 - jami 3 ta. $0 esa skript nomi.

Odatiy xatolar

  • NOM = "Ali": tenglik atrofida bo'sh joy.
  • Shebang yo'q yoki #! /bin/bsh kabi imloviy xato.
  • chmod +x unutilgan: Permission denied.
  • Bitta tirnoq ichida $NOM kutish.
  • O'zgaruvchini qo'shtirnoqsiz ishlatish: bo'sh joyli qiymat bo'laklanadi.

Amaliy topshiriq 25 daqiqa

Osontanishuv.sh: ismni read bilan so'rab, salomlashing.
O'rta$1 va $2 dagi ikki ismni printf bilan chiroyli chiqaring.
Qiyininfo.sh: $USER, $HOME, $(date +%F) va $(ls | wc -l) ni bitta hisobotga yig'ing.

Bugungi dars xulosasi

O'rgandik

Shebang, chmod +x, o'zgaruvchi, tirnoq, $(...), $1, read, printf.

Uyga vazifa

profil.sh skriptini yozing (uyga-vazifa.md).

Keyingi dars

Shart operatorlari: if, test, [[ ]].