Windows.  Viruslar.  Noutbuklar.  Internet.  Idora.  Utilitalar.  Haydovchilar

uchun VAR ichida 1 2 3...N qil bajarildi yoki bitta qatorda: uchun VAR ichida 1 2 3...N; qil ; bajarildi
O'zgaruvchiga raqamli qiymatlarni ham, ASCII belgilarini ham almashtirish mumkin.
Misol: $ for i in 1 2 A B Abc ; echo $i qilish; bajarildi 1 2 A B Abc Videoni transkodlash uchun oʻzgaruvchidagi fayllarni “maska” orqali roʻyxatga olish misoli: uchun i ichida*.avi; qil ; bajarildi

2. Boshqa buyruq natijalarini almashtirish

uchun VAR ichida $(); qil ; bajarildi
Seq buyrug'i natijalaridan foydalanishga misol: uchun i ichida$(seq [KEY]); qil echo $i; bajarildi$ i uchun $$(3-qator); echo $i qilish; bajarildi 1 2 3 $ i uchun $(seq 3 5); echo $i qilish; bajarildi 3 4 5 $ i uchun $(seq 2 2 6); echo $i qilish; bajarildi 2 4 6 ls buyrug'i natijalaridan foydalanishga misol: $ for i in $(ls /$HOME/Video); echo $i qilish; bajarildi 001.avi 002.avi 003.avi

3. C-uslubi (C-uslubi) yordamida almashtirish

uchun((EXPR1; EXPR2; EXPR3)) qil <список команд> bajarildi uchun((i=1; i<=3 ; i++)); qil echo $i; bajarildi$ uchun ((i=1; i<=3 ; i++)); do echo $i; done 1 2 3 Подробнее о применении C-style в Bash

4. Jingalak qavslar yordamida sanash (..)

(START..END) sintaksisi bash 3.0+ versiyasidan boshlab qoʻllab-quvvatlanadi va (START..END..INCREMENT) sintaksisi bash 4.0+ versiyasidan boshlab qoʻllab-quvvatlanadi:

uchun VAR ichida {..} qil bajarildi yoki uchun VAR ichida {....} qil bajarildi Misollar: $ for i in (1..3); echo $i qilish; i uchun 1 2 3 yoki $ bajarildi (4..8..2); echo $i qilish; bajarildi 4 6 8 Hisoblash qiymatlarni oshirish va kamaytirish uchun ham mumkin: i uchun $ (6..-4..3); echo $i qilish; 6 3 0 -3 bajarildi

5. Parametrlarni almashtirish ( ichida "$@")

Skriptga o'tkazilgan har bir parametr uchun buyruqlarni bajaradi. uchun VAR ichida $@ qil bajarildi yoki bitta qatorda: uchun VAR ichida $@; qil ; bajarildi
Shunday qilib, agar siz test.sh skriptini yaratsangiz #!/bin/sh uchun VAR ichida $@ qil aks-sado$VAR bajarildi keyin uni parametrlar bilan ishga tushirganingizda: $ ./test.sh param1 param2 param3 param1 param2 param3 qism ichida$@ qoldirilishi mumkin. Keyin test.sh skripti qayta yoziladi: #!/bin/sh uchun VAR qil aks-sado$VAR bajarildi
Sizga bir nechta misol keltiraman (bilan ichida va holda): $ FUNC_1 (VAR uchun $@; echo $VAR; bajarildi; ) $ FUNC_1 param1 param2 param3 param1 param2 param3 $ funksiya FUNC_2 (VAR uchun; $VAR echo; bajarildi; ) $ FUNC_2 param1 param2 param3 param1 param2 param3

6. For tsiklida davom etish va break dan foydalanish

Yuqoridagi barcha konstruksiyalar uchun siklning keyingi elementiga o‘tish uchun “davom etish” yoki sikldan chiqish uchun “uzilish” buyruqlaridan foydalanish mumkin.

Misol (i=6 bo'lganda to'ldiriladi va i=3 va i=5 bo'lganda bajarilmaydi): uchun i in (1..8); qil agar[ $i -eq 6 ]; keyin sindirish; fi agar[ $i -eq 3 ] || [ $i -ekv 5 ]; keyin davom ettirish; fi echo $i bajarildi Bajarish natijasi: i uchun $ $ (1..8); do \ > if [ $i -eq 6 ]; keyin sindirish; fi; \ > agar [ $i -eq 3 ] || [ $i -ekv 5 ]; keyin davom eting; fi; \ > echo $i; \ > bajarildi 1 2 4

Loop turlaridagi farqning qisqacha tavsifi:

for - bajariladigan ob'ektlar mavjud ekan, amalni bajaradi (masalan, stdin, fayl yoki funksiyadan oqimni o'qish);
while - qadar harakatni bajaradi holat haqiqat;
qadar - qancha vaqtgacha bajariladi holat haqiqatga aylanmaydi, ya'ni. Hozircha bu yolg'on.

FOR Loop

Keling, skriptning ushbu versiyasini tsikl bilan ko'rib chiqaylik:

$ cat loop.sh #!/bin/bash `ls -1` oʻzgaruvchisi uchun “$variable” echo bajarildi

Sintaksis juda oddiy va misolda juda aniq ko'rsatilgan:

for (siklni boshlash) o'zgaruvchisi (biz amal qiladigan o'zgaruvchini e'lon qilish) (siklga oqim yuborish) `ls -1` (bajarish va $variable o'zgaruvchisiga o'tkazish buyrug'i). Bajarildi va bajarildi - bu siklning "tanasi" bo'lib, uning doirasida qabul qilingan ma'lumotlar bo'yicha asosiy harakatlar bajariladi va echo "$variable" - bu tsikl tomonidan amalga oshiriladigan haqiqiy harakat.

Keling, misolni biroz o'zgartiramiz va buyruqni aniq ko'rsatish o'rniga biz ikkinchi o'zgaruvchidan foydalanamiz:

$ cat loop.sh #!/bin/bash ls=`ls -1` $ls dagi oʻzgaruvchi uchun “$variable” aks-sadosi bajarildi

Endi ls -1 buyrug'i alohida o'zgaruvchiga uzatiladi, bu esa sikl bilan yanada moslashuvchan ishlash imkonini beradi. Loopdagi o'zgaruvchi o'rniga siz funktsiyadan ham foydalanishingiz mumkin:

$ cat loop.sh #!/bin/bash lsl () ( ls -1 ) `lsl` ichidagi oʻzgaruvchi uchun “$variable” echo bajarildi

For siklining asosiy sharti shundan iboratki, unga berilgan buyruq amal qilish uchun ob'ektlarni o'z ichiga olgan holda bajariladi. Yuqoridagi misolga asoslanib - ls -1 da ko'rsatish uchun fayllar mavjud ekan - tsikl ularni o'zgaruvchiga uzatadi va "loop tanasi" ni bajaradi. Katalogdagi fayllar ro'yxati tugashi bilan sikl o'z bajarilishini yakunlaydi.

Keling, misolni biroz murakkablashtiraylik.

Katalogda fayllar ro'yxati mavjud:

$ ls -1 fayl1 fayl2 fayl3 fayl4 fayl5 loop.sh nofile1 nofile2 nofile3 nofile4 nofile5

Biz ulardan faqat so'zi bo'lmaganlarini tanlashimiz kerak " yo'q«:

$ cat loop.sh #!/bin/bash lsl=`ls -1` oʻzgaruvchi uchun $lsl do echo "$variable" | grep -v "yo'q" bajarildi $ ./loop.sh fayl1 fayl2 fayl3 fayl4 fayl5 loop.sh

Siz tsiklda shartli ifodalardan ham foydalanishingiz mumkin ( shartli ifodalar) […] shartlarni tekshirish va agar shart ishga tushirilsa, tsiklni uzish uchun break iborasi.

Ushbu misolni ko'rib chiqing:

$ cat loop.sh #!/bin/bash lsl=`ls -1` $lsl dagi oʻzgaruvchi uchun bajaring if [ $variable != "loop.sh" ] keyin "$variable" echo | grep -v "yo'q" boshqa to'xtash fi tugadi

Loop.sh fayliga duch kelmaguncha tsikl davom etadi. Loopning bajarilishi ushbu faylga yetib borishi bilan, tsikl break buyrug'i bilan to'xtatiladi:

$ ./loop.sh fayl1 fayl2 fayl3 fayl4 fayl5

Yana bir misol, tsiklning tanasini bajarishdan oldin arifmetik amallardan foydalanish:

$ cat loop.sh #!/bin/bash for ((count=1; count<11; count++)) do echo "$count" done

Bu erda biz uchta boshqaruv buyrug'ini o'rnatamiz - count=1, nazorat qilish sharti - count 11 dan kichik bo'lsa va bajarish uchun buyruq - count +1:

WHILE va UNTIL tsikllari

while tsikli qanday ishlashini aniq ko'rsatadigan oddiy misol:

$ cat loop.sh #!/bin/bash count=0 [ $count -lt 10 ] bajarilganda ((count++)) echo $count bajarildi

Biz $count oʻzgaruvchisini nolga qoʻyamiz, soʻngra “$count oʻndan kam boʻlsa, tsiklni bajaring” sharti bilan whi le siklini ishga tushiramiz. Loopning tanasida biz bajaramiz postfiks ortishi$count o'zgaruvchisiga +1 va natija stdout-ga chop etiladi.

Amalga oshirish natijasi:

$ ./loop.sh 1 2 3 4 5 6 7 8 9 10

$count o'zgaruvchisining qiymati 10 ga yetishi bilan tsikl to'xtadi.

while qanday ishlashini ko'rsatadigan "cheksiz" halqaning yaxshi namunasi:

$ cat loop.sh #!/bin/bash count=10 esa [ 1 = 1 ] do ((count++)) echo $count bajarildi $ ./loop.sh ... 5378 5379 5380 5381 5382 5383 ^C

Qabul qilish davri xuddi shunday ishlaydi, lekin teskari yo'nalishda:

$ cat loop.sh #!/bin/bash count=0 [ $count -gt 10 ] bajarilguncha ((count++)) echo $count bajarildi

Bu erda biz shunga o'xshash shartni o'rnatamiz, lekin "o'zgaruvchi 10 dan kichik bo'lsa" o'rniga "o'zgaruvchi 10 dan katta bo'lguncha" ni belgilaymiz. Amalga oshirish natijasi:

$ ./loop.sh 1 2 3 4 5 6 7 8 9 10 11

Agar yuqoridagi “cheksiz sikl” misoli qadar yordamida bajarilsa, while dan farqli ravishda hech narsa chiqarmaydi:

$ cat loop.sh #!/bin/bash count=10 [ 1 = 1 ] bajarilgunga qadar ((count++)) echo $count bajarildi $ ./loop.sh $

Chunki " holat» dastlab « rost"— tsiklning tanasi bajarilmaydi.

Xuddi for tsiklidagi kabi, while va qadar funksiyalaridan foydalanishingiz mumkin. Masalan, server holatini tekshiradigan real skriptdan olingan tsikl Tomcat(PID tizimdan olingan SLES, boshqa tizimlarda farq qilishi mumkin), biroz soddalashtirilgan versiya:

$ cat loop.sh #!/bin/bash check_tomcat_status () ( RUN=`ps aux | grep tomcat | grep -v grep | grep java | awk "(chop $2)"` ) esa check_tomcat_status agar [ -n "$ boʻlsa, bajaring. RUN" ] keyin printf "DIQQAT: Tomcat hali ham PID $RUN bilan ishlaydi." else printf "Tomcat to'xtadi, davom etmoqda...nn" uzilish fi tugadi

Amalga oshirish natijasi:

$ ./loop.sh OGOHLANTIRISH: Tomcat hali ham PID 14435 26548 bilan ishlamoqda. OGOHLANTIRISH: Tomcat hali ham PID 14435 26548 bilan ishlamoqda. OGOHLANTIRISH: Tomcat hali ham PID 14435 26548 bilan ishlamoqda. OGOHLANTIRISH: Tomcat hali ham PID1645.5 bilan ishlaydi. PID 14435 26548 bilan ishlaydi. OGOHLANTIRISH: Tomcat hali ham PID 14435 26548 bilan ishlaydi. OGOHLANTIRISH: Tomcat hali ham PID 14435 26548 bilan ishlamoqda. OGOHLANTIRISH: Tomcat hali ham PID 14435 bilan ishlamoqda

To'liq versiya:

Check_tomcat_status () ( RUN=`ps aux | grep tomcat | grep -v grep | grep java | awk "(2$ chop etish)"` ) check_tomcat_status paytida; agar [ -n "$RUN" ] bo'lsa, printf "DIQQAT: Tomcat hali ham PID $RUN bilan ishlayapti. To'xtatingmi? " javobi "Tomcat to'xtatilmoqda..." "O'rnatish davom etmoqda..." && $CATALINA_HOME/bin/shutdown sh 2&>1 /dev/null || agar [ -n "$RUN" ] bo'lsa, 2 uyquni buzing, keyin printf "Tomcat ishlayapti. Uni o'ldirasizmi? " javobi "Tomcat o'ldirilmoqda..." "O'rnatish davom etmoqda...n" && $RUN || break uyqu 2 fi else printf "Tomcat to'xtadi, davom etmoqda...nn" break fi bajarildi

Javob funktsiyasi maqolada tasvirlangan, ammo bu erda biroz takomillashtirilgan versiya qo'llaniladi:

Javob () (javobni o'qiyotganda; aks-sadosi $javobni | ichida bajaring) printf "$1n" 0 tanaffusni qaytaradi;; |) printf "$2n" 1 tanaffusni qaytarish;; *) printf "Iltimos, Y(ha) yoki N(no) kiriting!" esac bajarildi )

Bu erda while va qadar dan foydalanish mumkin edi - lekin for tsikli emas, chunki for bir marta ishlagan bo'lardi (PID ni oldi va tugadi).

Va endi tsiklning beshinchi mavzusiga navbat keldi. Unda men bash buyrug'i tarjimonining boshqaruv tuzilmalarini ko'rib chiqishni davom ettiraman. Oldingi postda shartli bayonotlar muhokama qilindi. Endi navbat loop operatorlari kabi integral til tuzilmalariga keldi. Looplar ham shartlar kabi buyruqlarni bajarish tartibini nazorat qilishni ta'minlovchi vositalardir.
Bash for, while, qadar va tanlash sikllarini qo'llab-quvvatlaydi. Endi ularning har birini batafsil ko'rib chiqishga o'tamiz.

for tsikli operatori

for bayonotining umumiy sintaksisi:

o'zgaruvchi uchun
qil
buyruqlar ro'yxati
bajarildi

Bash-dagi for tsikli C yoki PHP kabi dasturlash tillaridagi for tsiklidan sezilarli darajada farq qiladi. Shunday qilib, agar siz C tilida dastur qilsangiz, chalkashmaslik uchun bu farqlarga ko'nikishingiz kerak bo'ladi.
Naqshni almashtirish natijasida so'zlar ro'yxati olinadi. Har bir iteratsiyada o'zgaruvchi ushbu ro'yxatning har bir keyingi qiymatini oladi va bajarish va bajarilish orasidagi buyruqlar bajariladi. Roʻyxatdagi soʻzlar tugashi bilan takrorlashlar toʻxtaydi.
$ kun uchun dushanba, chorshanba pays, juma “Bugun $day” deb aks-sado qiling
Oldingi postda if operatori uchun bo'lgani kabi for operatorining zahiralangan so'zlari ham bir qatorda yozilishi mumkin. Buning uchun siz ";" ni qo'yishingiz kerak. Keling, ushbu imkoniyatni hisobga olgan holda oldingi misolni qayta yozamiz:
$ kun uchun dushanba, chorshanba, juma; echo "Bugun $day"; bajarildi
Konstruksiyaning yo'qligi $@ bilan yozishga teng. $@ parametri muhokama qilindi.

While sikl operatori

while iborasining umumiy sintaksisi:

ro'yxat 1 esa
qil
ro'yxat 2
bajarildi

List1 birinchi bo'lib bajariladi. Agar u muvaffaqiyatli bo'lsa, ya'ni nol kodini qaytarsa, boshqaruv ro'yxat 2 ga o'tadi. Takrorlashlar list1 ni bajarish natijasi nolga teng bo'lmaguncha davom etadi. Masalan:
i=10 esa [ $i –gt 0 ]; echo $i i=$(($i-1)) bajarildi; echo "oxiri"

Loop bayonotigacha

qadar iborasining umumiy sintaksisi:

1 ro'yxatigacha
qil
ro'yxat 2
bajarildi

List1 birinchi bo'lib bajariladi. Agar u muvaffaqiyatsiz bo'lsa, ya'ni nolga teng bo'lmagan qaytarish kodi bilan boshqaruv ro'yxat 2 ga o'tadi. Takrorlashlar list1 bajarilish natijasi nolga aylanmaguncha davom etadi. Masalan:
i=10 [ $i –lt 0 ] gacha; echo $i i=$(($i-1)) bajarildi; echo "oxiri"

Loop bayonotini tanlang

Tanlash bayonotining umumiy sintaksisi:

o'zgaruvchini tanlang
qil
ro'yxati
bajarildi

Naqshni almashtirish natijasida so'zlar ro'yxati olinadi. Operator ushbu so'zlarga tartib raqamlarini qo'shadi va butun to'plamni standart xato oqimiga chiqaradi. Konstruksiyaning yo'qligi $@ bilan yozishga teng. Shundan so'ng, so'rov ko'rsatiladi va standart kirishdan chiziq o'qiladi. Agar qatorda ro'yxatdagi istalgan so'zga mos keladigan raqam bo'lsa, o'zgaruvchi uni qiymat sifatida qabul qiladi. Agar mos so'z topilmasa, o'zgaruvchining qiymati bo'sh qatorga aylanadi. Shundan so'ng, buyruqlar ro'yxati bajariladi va takrorlashlar kiritish satrida fayl oxiri belgisiga duch kelmaguncha yoki buyruqlar ro'yxatida tanaffus yoki qaytishga duch kelmaguncha davom etadi.
Tanaffus va qaytish buyruqlari tsiklning borishini nazorat qiladi. Tanaffus buyrug'i tsiklning bajarilishini to'xtatadi, return esa natija kodini qaytaradi (nol yoki nolga teng).
Tanlash bayonoti raqamlangan menyularni yaratish uchun foydalidir. Masalan, ~/temp katalogida 3 ta fayl mavjud: proto.txt, file.txt va readme. Ulardan istalganini tezda ko'rish imkonini beruvchi skript fragmentiga misol.
echo "Ko'rish uchun faylni tanlang:" ~/temp/* ichida faylni tanlang Chiqish; agar [-f $fayl] bajaring; keyin cat $file; boshqa sindirish; bajarildi
Ushbu skriptni ishga tushirish orqali biz ekranda ko'ramiz:
Ko'rish uchun faylni tanlang:
1) /home/istergul/temp/file.txt
2) /home/istergul/temp/proto.txt
3) /home/istergul/temp/readme
4) Chiqish

Keyingi mavzu shartli parametrlarni almashtirishni ko'rib chiqadi. Fikrlaringizni kutaman.

Looplar har qanday dastur yoki skriptlarni yozishda juda qulay narsa, hatto zarur. Ular bizga kodning ma'lum bir qismini ma'lum bir necha marta bajarishga imkon beradi. Tabiiyki, bash bir necha turdagi looplarga ega. Biz tsikllarni tasvirlab beramiz uchun, uchun, davomida, qadar. In va for bir xil gapning turli sintaksisi hisoblansa-da, menimcha, ular bir-biridan while dan to gacha ko'proq farq qiladi.

In uchun hisoblagich bilan aylanish:

Velosiped uchun Bu hisoblagichga ega bo'lgan pastadir. Loopning tanasida joylashgan kod bloki for in operatori ro'yxatidagi qiymatlar qancha bo'lsa, shuncha takrorlanadi va har bir takrorlashda hisoblagich o'zgaruvchisi (bu erda u var deb ataladi, lekin, albatta,). uni xohlaganingizcha chaqirishingiz mumkin) ro'yxatning keyingi elementining qiymatiga ega.
Agar do kalit so'zi for so'zi bilan bir qatorda bo'lsa, argumentlar ro'yxatidan keyin (do dan oldin) nuqta-vergul qo'yish kerak.
Elementlarning har biri<список>bir nechta argumentlarni o'z ichiga olishi mumkin. Bu parametrlar guruhlarini qayta ishlashda foydalidir. Bunday holda, argumentlarning har birini tahlil qilishga majburlash<списке>, siz o'rnatilgan yo'riqnomadan foydalanishingiz kerak
Siz o'zgaruvchidan for tsiklida ro'yxat sifatida foydalanishingiz mumkin.
IN<списке>For tsikli fayl nomlaridan foydalanishi mumkin, ular o'z navbatida joker belgilarni o'z ichiga olishi mumkin. Bu ko'p sonli fayllar bilan ishlashda juda foydali bo'lishi mumkin.
Agar<список>for tsiklida ko'rsatilmagan bo'lsa, u holda $@ o'zgaruvchisi ishlatiladi - buyruq qatori argumentlari ro'yxati.
Argumentlar ro'yxatini yaratishda siz for tsiklida buyruqlarni almashtirishdan foydalanishingiz mumkin.
Loopning chiqishi stdout'dan faylga yoki boshqa joyga yo'naltirilishi mumkin (bu haqida ko'proq I/U qayta yo'naltirishni ko'rib chiqish orqali bilib olishingiz mumkin).

Sintaksis:
uchun var in<список>
qil
<выполняемые команды>
bajarildi

Misol:
nomdagi nomlar uchun1 nom2 nom3 nom4
qil
echo $nomlari
bajarildi

Loop operatori uchun boshqa yozish usuli bor - C tilidagi for operatorining sintaksisiga juda o'xshash, bu holda hisoblagichlarni ishga tushirishda o'zgaruvchilar yoki bitta o'zgaruvchining boshlang'ich qiymatlari o'rnatiladi va tsiklning har bir o'tishidan keyin shart. tekshiriladi, agar tekshirish rost bo'lsa, tsiklning keyingi o'tishi boshlanadi. Blokda<приращение счётчиков>o'zgaruvchi hisoblagichlarimizning qiymati shartli ravishda o'zgarishi kerak (yuqoriga qarab emas), shuning uchun shartni tekshirganda, ertami-kechmi biz "false" qiymatini olamiz, aks holda tsikl hech qachon tugamaydi. Har qanday operatsiyani ma'lum bir necha marta takrorlash kerak bo'lsa, juda qulay va eng muhimi tanish variant.

Shunga o'xshash sintaksis bilan:
uchun ((<инициализация счётчиков>; <проверка условия>; <приращение счётчиков>))
qil
<выполняемые команды>
bajarildi

Misol:
uchun ((var=1; var<= LIMIT ; var++))
qil
echo $var
bajarildi

while tsikli:

Bu operator orqasidagi holatni tekshiradigan juda oddiy qurilish esa va agar bu shart rost bo'lsa, u do va done so'zlari o'rtasida joylashgan buyruqlar blokini bajaradi va keyin yana shartni tekshirishga o'tadi. Agar tekshirish noto'g'ri bo'lsa, tsikl tugaydi va quyidagi buyruqlar bajarila boshlaydi: bajarildi. Buni ta'minlash zarur<проверка условия>tsiklda ishlaydigan kodga bog'liq, aks holda, agar tekshirish natijasi o'zgarmasa, siz cheksiz tsiklga ega bo'lasiz;
Vaqt oralig'i uchun standart kiritish qurilmasi qayta yo'naltirish buyrug'i yordamida faylga yo'naltirilishi mumkin< в конце цикла.

Sintaksis:
esa<Проверка условия>
qil
<Блок команд, обязательно меняющий переменные влияющие на проверку условия>
bajarildi

Misol:
esa [ $var0 -eq 100 ]
qil
echo $var
var++
bajarildi

Operator esa bir qancha shartlarga ega bo‘lishi mumkin. Ammo ulardan faqat oxirgisi tsiklni davom ettirish imkoniyatini aniqlaydi. Bunday holda, sikl operatorining sintaksisi odatdagidan farq qiladi.
Sintaksis(Yana bir bor takror aytamanki, faqat oxirgi shart tsiklning bajarilishiga ta'sir qiladi) :
esa
<условие1>
<условие2>

<условиеN>
qil
<выполняемые команды - тело цикла>
bajarildi

Loopgacha:

Operator qadar while ga juda o'xshaydi, u shartni ham baholaydi, lekin agar hisoblash natijasi noto'g'ri bo'lsa, tsiklning tanasini bajaradi. Bu g'ayrioddiy tuyulishi mumkin, ammo tsiklning birinchi o'tishidan oldingi holatni baholamaguncha, undan keyin emas, balki while. For/in sikllarida bo'lgani kabi, do kalit so'zini tsikl deklaratsiyasi bilan bir qatorga qo'yishda siz ";" belgisini kiritishingiz kerak. qilishdan oldin.
Oldingi holatda bo'lgani kabi, shart loop tanasidagi operatsiyalarga bog'liq bo'lishi kerakligini yodda tutish kerak, aks holda bizning skriptimiz hech qachon tugamaydi.

Sintaksis:
qadar<Проверка условия>
qil
<Блок команд, обязательно меняющий переменные влияющие на проверку условия>
bajarildi

Misol:
[ $var0 -gt 100] gacha # Shart iteratsiya boshida tekshiriladi.
qil
echo $var
var--
bajarildi

Hozircha bu yetarli bo‘lsa kerak. :)

  • Orqaga
  • Oldinga

Yangi maqolalar:

  • Windows 7/8/2008/2012 da tarmoqni aniqlash yoqilmaydi
  • Xato: Ushbu ilova ishga tushmadi, chunki u Qt platformasi plaginini "windows" ni topa olmadi yoki yuklamadi.
  • 1C 8.3 serverida rphost.exe ishchi jarayonlarini avtomatik qayta ishga tushirishni sozlash
  • MS SQL 2008/20012 da tranzaksiya jurnali (.ldf) hajmini qanday kamaytirish mumkin

    MS SQL, har qanday munosib sanoat ma'lumotlar bazasi kabi, ma'lumotlar bazasi bilan birga, davlatni orqaga qaytarish imkonini beruvchi tranzaksiya jurnallarini saqlaydi...

Ushbu ma'ruzada biz tanishishni davom ettiramiz bash. Sizga shuni eslatib o'tmoqchimanki, biz ushbu elementlarni ko'rib chiqmoqdamiz bash, bu bizga operatsion tizim skriptlarini tushunishga yordam beradi. Bunday elementlar, albatta, looplar va funktsiyalardir. Agar kimdir dasturlashni o'rgangan bo'lsa, unda bu savollarni tushunishda hech qanday qiyinchiliklar bo'lmaydi.

loop uchun

Velosiped uchun V bash ikki turga ega. Avval klassik versiyani ko'rib chiqaylik uchun. Umumiy ko'rinish quyidagicha:

Elementlar o'rtasida uchun Va ichida o'zgaruvchi o'rnatiladi, bu esa o'z navbatida o'rtasida ko'rsatilgan qiymatlar ketma-ketligidan qiymat oladi ichida Va qil. Orasida qil Va bajarildi o'zgaruvchi har safar qiymatini o'zgartirganda bajariladigan buyruqlar mavjud. O'zgaruvchi ketma-ketlikdan oxirgi qiymatni olganda, tsikl to'xtaydi. Ketma-ketlikdagi qiymatlar bo'shliqlar bilan ajratilgan.

Mana amaliy misol:

Qiymatlar ketma-ketligi turli yo'llar bilan belgilanishi mumkin. Aniq - yuqoridagi misolda bo'lgani kabi yoki boshqa o'zgaruvchilardan foydalanish yoki maxsus buyruqlar yordamida. Keling, ba'zi misollarni ko'rib chiqaylik. Qiymatlar bo'shliqlar bilan ajratilganligi sababli, bunday qiymatlar bo'sh joyli qatorni o'z ichiga olgan har qanday o'zgaruvchi bo'lishi mumkin:

Natija birinchi misoldagi kabi bo'ladi.

Agar siz raqamlar ketma-ketligini ko'rsatishingiz kerak bo'lsa, buyruqdan foydalanishingiz mumkin seq va almashtirish mexanizmi. Jamoa seq ekranga raqamli qiymatlar ketma-ketligini qaytaradi. Sintaksis oddiy va quyidagi misoldan aniq bo'ladi:

Natija:

Keling, ikkinchi turga qaytaylik uchun. Ko'pincha skriptlarda siz C-ga o'xshash variantni topishingiz mumkin uchun, bu raqamga asoslangan tsikllar uchun ishlatiladi. Keling, bir misolni ko'rib chiqaylik:

Ifodada tekshirilayotgan shart rost ekan, tsikl ishlaydi. Ifoda noto'g'ri qaytarilishi bilan, tsiklning bajarilishi to'xtaydi.

Amaliy misol:

#!/bin/bash
i=1
esa [ $i -lt 7 ]
qil
echo $i
i=i+1 bo'lsin
bajarildi

Bizning misolimizda biz o'zgaruvchini tekshiramiz i(-lt) 7 raqamidan kichik va agar shunday bo'lsa, ekranda o'zgaruvchining qiymati ko'rsatiladi. Ifoda i=i+1 bo'lsin, o'zgaruvchini bittaga oshiradi, yana tekshiradi va hokazo. let tarjimonga argumentlar raqamli qiymatlar sifatida tan olinishi kerakligini aytadi. Bu qatorni shunday yozish mumkin qilaylik ++(c-ga o'xshash variant). Agar raqam birdan ortiq ortsa, u quyidagicha yozilishi mumkin: i+=2 bo‘lsin- Ushbu holatda i 2 ga oshib boradi. O'zgaruvchini oshirishning yana bir varianti o'rnatilgan kalkulyatordan foydalanishdir (faqat butun sonlar bilan ishlaydi). Kalkulyatorga ikkita qavs orqali kirish mumkin: i=$(($i+1)) yoki kvadratlar orqali: i=$[$i+1] Kalkulyatordan buyruq satrida ham foydalanishingiz mumkin:

Cheksiz pastadir bilan tugamaslik uchun siz looplar bilan ehtiyot bo'lishingiz kerak. Aytgancha, disk raskadrovka uchun bash birinchi qatorni o'zgartirishingiz mumkin bo'lgan skriptlar #!/bin/bash -x yoki buyruq bilan skriptni ishga tushiring bash -x:

igor@ubuntu:~/linux$ bash -x ./testfor.sh
+ i=1
+ ‘[‘ 1 -gt 5 ‘]’
+ echo i=1
i=1
+ i=i+1 bo‘lsin
+ ‘[‘ 2 -gt 5 ‘]’
+ echo i=2
i=2
+ i=i+1 bo‘lsin
+ ‘[‘ 3 -gt 5 ‘]’
+ echo i=3
i=3
+ i=i+1 bo‘lsin
+ ‘[‘ 4 -gt 5 ‘]’
+ echo i=4
i=4
+ i=i+1 bo‘lsin
+ ‘[‘ 5 -gt 5 ‘]’
+ echo i=5
i=5
+ i=i+1 bo‘lsin
+ ‘[‘ 6 -gt 5 ‘]’

Looplar qanday ishlashini tushunishingizni mustahkamlash uchun kichik skriptlarni yozishni mashq qiling bash.

Bash-dagi funktsiyalar

Funktsiyalar ichida qo'llaniladi bash juda keng. Funktsiyalar ikki shaklda tavsiflanadi: kalit so'z bilan funktsiyasi, va usiz.

Birinchi usul:

funktsiya funksiya_nomi
{
funktsiya tanasi
}

Ikkinchi usul:

function_name()
{
funktsiya tanasi
}

Funktsiya skriptning istalgan joyida nom bilan chaqiriladi, lekin faqat funksiyaning o'zini tavsiflagandan keyin. Funktsiyalar funksiya chaqiruvidan (nomi) keyin bo'sh joy bilan ajratilgan parametrlarni ham o'tkazish mumkin. Keling, misol skriptini ko'rib chiqaylik bash:

#!/bin/bash
funktsiya primeri
{
agar [ $# -ne 0 ]
keyin
mahalliy a=1
echo "O'tkazilgan parametrlar soni - $#"
men uchun $@
qil
echo "$a-inchi parametr $i"
++ bo'lsin
bajarildi
0 qaytaring
boshqa
echo "Parametrlar o'tkazilmadi"
qaytish 1
fi
}
echo "Parametrli funktsiyani chaqirish:"
primer a b c
echo $?
echo "Funksiyani parametrsiz chaqirish:"
primer
echo $?

Ushbu misolda funksiya nomli primer. Parametrlar bilan funktsiyani chaqirish: primer a b c va parametrlarsiz: primer. Funktsiyaning tanasida barcha konstruktsiyalar sizga tanish bo'lishi kerak, bundan mustasno $# , $i Va $@ .$# — funksiyaga berilgan parametrlar sonini qaytaradi. Bizning misolimizda bu raqam bo'ladi 3 .$@ barcha parametrlarni bitta satrda qaytaradi. Misolda shunday bo'ladi a b c. Va orqali $1 , $2 , $3 va hokazo. Har bir parametrga alohida kirishingiz mumkin. $? — oxirgi buyruqning bajarilish kodini o'z ichiga oladi. Bizning misolimizda funktsiyani bajarish kodi.

Funktsiya raqamli qiymatni kalit so'z orqali ham qaytarishi mumkin qaytish. Odatda, agar funktsiya xatosiz bajarilgan bo'lsa, ular 0 ni yoki biror narsa noto'g'ri bo'lsa, nolga teng bo'lmagan qiymatni qaytaradi. Misolda, agar funksiya parametrlar bilan chaqirilsa, 0 qiymati, agar funksiya parametrlarsiz chaqirilgan bo'lsa, 1 kodi qaytariladi.

Funktsiyaga parametrlarni o'tkazish bilan bog'liq hamma narsa skript uchun xuddi shunday ishlaydi. Shuningdek, siz parametrlarni skriptga o'tkazishingiz va ularni xuddi shu tarzda boshqarishingiz mumkin $#, $@, $N. Xuddi shu toifadagi variant - $0 - bu skriptni ishga tushirgan buyruq nomini qaytaradi. Agar skript buyruq bilan bajarilgan bo'lsa ./script.sh, keyin aks-sado $0 qiymatni qaytaradi ./script.sh, va agar buyruq bo'lsa /home/igor/linux/script.sh, keyin qiymat qaytariladi /home/igor/linux/script.sh.

Agar xatolikni sezsangiz, matn qismini tanlang va Ctrl+Enter tugmalarini bosing
ULOSING: