AXV

Shart operatorlari

if/elif/else, test, [[ ]] va arifmetik amallar

10-sinfDevOps4-hafta ยท 11-dars

Bugungi dars maqsadlari

Chiqish kodi

Har buyruq 0 (muvaffaqiyat) yoki boshqa son qaytaradi: $?.

if / elif / else

Skript qaror qabul qiladi: test, [ ], [[ ]].

Arifmetika

$(( )) va (( )): qo'shish, bo'lish, qoldiq.

Dars raqamlarda

0
chiqish kodi 0: muvaffaqiyat
0
tekshiruv: son, matn, fayl
0
son operatorlari: -eq -ne -lt -le -gt -ge
Qo'llanmada: apt update && apt upgrade -y, ikkinchi buyruq birinchisi muvaffaqiyatli bo'lsa ishlaydi.
01

Chiqish kodi va test

Shart aslida nimani tekshiradi?

Chiqish kodi: buyruqning "hisoboti"

buyruqls /tmpbajariladi0 = OKmuvaffaqiyat1, 2... = xatoNatija: echo $?

Qismlar ustiga bosing.

$? ni ko'ramiz

Terminal
$ ls /tmp
$ echo $?
0
$ ls /yoq_papka
ls: /yoq_papka: No such file or directory
$ echo $?
1
$? faqat oxirgi buyruq kodini beradi. Keyingi buyruqdan keyin u o'zgaradi.

Uch yozuv, bir ma'no

[ "$A" -eq 5 ][ ... ]sodda, hamma shellda[[ ... ]]Bash kengaytmasitest ...asl buyruqQavs ichida va atrofida BO'SH JOY shart!

Ustiga bosing yoki olib boring.

Operatorlar: uch guruh

Son

bosing

-eq -ne -lt -le -gt -ge
teng, teng emas, kichik, kichik/teng, katta, katta/teng

Matn

bosing

= (==) != -z -n
-z bo'sh, -n bo'sh emas

Fayl

bosing

-e -f -d -r -w -x
bor, fayl, papka, o'qish, yozish, bajarish

Misollar

[ "$S" -gt 10 ] && echo "katta"
[ "$S" -eq 0 ] && echo "nol"
[ "$ISM" = "Ali" ] && echo "salom, Ali"
[ -z "$X" ] && echo "X bo'sh"
[ -f /etc/hosts ] && echo "fayl bor"
[ -d /tmp ] && echo "papka bor"

Tezkor bilim sinovi

Qaysi yozuv to'g'ri?

[ alohida buyruq, shuning uchun uning atrofida bo'sh joy shart.
02

if / elif / else

Skript yo'l tanlaydi

Tarmoqlanish sxemasi

if shart 1?ha1-blokelif shart 2?2-blokelsehech biri emas

Shartlar yuqoridan pastga tekshiriladi.

son.sh


#!/bin/bash
read -p "Son: " S
if [ "$S" -lt 0 ]; then
  echo "manfiy"
elif [ "$S" -eq 0 ]; then
  echo "nol"
else
  echo "musbat"
fi
then alohida qatorda yoki ; dan keyin. Blok fi bilan yopiladi.

Tipik xato: o'zgaruvchi bo'sh bo'lsa


A=""
if [ $A -eq 5 ]; then
  echo "besh"
fi

Natija: [: -eq: unary operator expected

Tipik xato: o'zgaruvchi bo'sh bo'lsa


A=""
if [ "$A" -eq 5 ]; then
  echo "besh"
fi

Tirnoq bilan xato kamayadi; [[ ]] da esa tirnoq shart emas.

[ ] va [[ ]]

[ ]

Hamma shellda ishlaydi. O'zgaruvchi atrofida tirnoq kerak. -a, -o o'rniga ikkita qavs.
VS

[[ ]]

Bash kengaytmasi. &&, || ichida ishlaydi, naqsh: == *.txt.

Pastga bosing: misol.

Qo'shimcha: naqsh bilan solishtirish

F="hisobot.txt"
[[ $F == *.txt ]] && echo "matn fayl"
[[ $F == a* || $F == h* ]] && echo "a yoki h"

&& va ||: qisqa zanjirlar

Abuyruq 1&&ha: BAbuyruq 1||yo'q: Bapt update && apt upgrade -y[ -f x ] || echo yo'q

Ustiga bosing.

Idempotent skript

Oddiy

mkdir backup
2-marta ishga tushsa: File exists xatosi.
VS

Shart bilan

[ -d backup ] || mkdir backup
Necha marta ishga tushirsangiz ham natija bir xil.
03

Arifmetik amallar

Bash da hisob-kitob

Bo'lish butun songa bo'linadi

echo $(( 7 / 2 ))7son 12son 23butun bo'lish+ - * / % **7/2=3 7%2=1 2**5=32

Natijani bosing.

Hisob-kitob kodi


A=17
B=5
echo $((A + B))      # 22
echo $((A / B))      # 3
echo $((A % B))      # 2
(( A % 2 == 0 )) && echo juft || echo toq
$(( )) ichida o'zgaruvchiga $ shart emas. (( )) shartda ishlatiladi.

Odatiy xatolar

  • [$A -eq 5]: qavs atrofida bo'sh joy yo'q.
  • [ $A -eq 5 ] da A bo'sh: tirnoq unutilgan.
  • Son uchun = yoki matn uchun -eq.
  • fi unutilgan yoki then yo'q.
  • $((7/2)) dan 3.5 kutish.

Tezkor bilim sinovi

echo $((17 % 5)) nima chiqaradi?

% bo'lishdan qoldiq: 17 = 3*5 + 2, qoldiq 2.

Amaliy topshiriq 25 daqiqa

Osonjuft.sh: son kiriting, juft yoki toqligini ayting.
O'rtatekshir.sh: argument fayl, papka yoki yo'qligini aytsin; argument bo'lmasa yordam matni.
Qiyinbaho.sh: ball bo'yicha 5/4/3/2 baho; 0-100 dan tashqarisi xato.

Bugungi dars xulosasi

O'rgandik

$?, [ ], [[ ]], if/elif/else, &&, ||, $(( )).

Uyga vazifa

tekshir.sh: fayl turi va ruxsatlar (uyga-vazifa.md).

Keyingi dars

Sikllar: for, while, until.