Döngə üçün "BASH" yazmaq üçün necə

Qabıq skriptlərindəki loop üçün "BASH" a necə istifadə etmək olar

BASH (Bourne Again Shell üçün nəzərdə tutulan) çoxu Linux və UNIX-based əməliyyat sistemləri tərəfindən istifadə edilən bir scripting dili.

BASH əmrlərini bir terminal pəncərəsi içərisində bir-birindən sonra çalıştıra bilər və ya bir kabuk skripti yaratmaq üçün əmrləri mətn faylına əlavə edə bilərsiniz.

Shell skriptləri yazmaqla bağlı ən böyük şey onları yenidən və yenidən idarə edə bilərsiniz. Məsələn, sistemə bir istifadəçi əlavə etməlisiniz, icazələrini təyin edin və başlanğıc mühitini idarə etməliyik. Bir kağız parçası üzərində əmrləri yaza və onları yeni istifadəçilər əlavə etdikdə və ya bir skript yaza və parametrləri həmin skriptə daxil edə bilərsiniz.

BASH kimi scripting dilləri digər dillərdə olduğu kimi proqramlaşdırma quruluşlarına malikdir. Məsələn, klaviaturadan giriş almaq və dəyişənlər kimi saxlamaq üçün idxal parametrlərindən istifadə edə bilərsiniz. Daha sonra , giriş parametrlərinin dəyərinə əsaslanaraq müəyyən bir fəaliyyət göstərmək üçün skripti əldə edə bilərsiniz.

Hər hansı bir proqramlaşdırma və scripting dilinin əsas hissəsi təkrarlanan eyni kod parçasını işləmək qabiliyyətidir.

Kodları təkrarlamaq üçün bir sıra yollar var (loops kimi də bilinir). Bu təlimatlarda "for" formasını yazmaq üçün necə göstəriləcəksiniz.

Döngü üçün kodun müəyyən bir hissəsini təkrarlayır. Bir sıra əmrlər müəyyən bir şərt yerinə yetirildikdən sonra davam edə biləcəkləri üçün faydalı olurlar, bundan sonra onlar dayandırılacaqlar.

Bu təlimatda, BASH skripti içərisində üçün formanı istifadə etmək üçün beş yol göstəriləcəkdir.

Başlamadan əvvəl

Döngü nümunələri ilə başlamadan əvvəl bir terminal pəncərəsi açmalı və aşağıdakıları yerinə yetirməlisiniz:

  1. Mkdir skriptlərini daxil edin ( burada mkdir haqqında daha çox məlumat əldə edin )
  2. Cd scripts daxil edin (bu kataloqları skriptlərə dəyişir )
  3. Nano examplen.sh daxil edin ( n burada çalışdığınız nümunədir)
  4. Ssenari daxil edin
  5. Çıxmaq üçün CTRL + O düyməsini basın və CTRL + X çıxın
  6. Bash examplen.sh (yenidən işlədiyiniz nümunə ilə n )

Siyahı vasitəsilə necə döngə çəkmək olar?

#! / bin / bash
ədəd üçün 1 2 3 4 5
etmək
echo $ sayı
həyata keçirilir
çıxış 0

"For" loops istifadə BASH yolu ən çox digər proqramlaşdırma və scripting dilləri "for" loops idarə etmək üçün bir qədər fərqlidir. Ssenari aşağı salın ...

Bir BASH "for" loop bütün, dogörülən arasında olan ifadələr siyahısı hər bir maddə üçün bir dəfə həyata keçirilir.

Yuxarıda göstərilən nümunədə siyahı sözündən sonra gələn hər şey (yəni 1 2 3 4 5).

Döngənin yinelediği hər dəfə, siyahıda növbəti dəyər "for" sözündən sonra göstərilən dəyişənə daxil edilir. Yuxarıdakı loopda dəyişən nömrə adlanır.

Eko bəyanatı ekrana məlumat göstərmək üçün istifadə olunur.

Buna görə də, bu nümunə 1-dən 5-ə qədər nömrələri alır və onları bir-birinə ekranda verir:

Bir başlanğıc və son nöqtə arasındakı döngə necə

Yuxarıdakı nümunə ilə bağlı olan problem, daha böyük bir siyahı (1-dən 500-ə qədər) işləmək istəyirsinizsə, ilk növbədə bütün nömrələri yazmaq üçün əsr olardı.

Bu, bizə bir başlanğıc və son nöqtəni necə göstərəcəyini göstərən ikinci nümunəyə gətirir:

#! / bin / bash
{1..10} sayı içərisində
etmək
yankı "$ sayı"
həyata keçirilir
çıxış 0

Qaydalar əsasən eynidır. " In" sözündən sonra verilən dəyərlər təkrarlamaq üçün siyahıdan ibarətdir və siyahıda hər bir dəyər dəyişəndə ​​(yəni nömrə) yerləşdirilir və hər dəfə loop yinelenerek yapılır və yapılır.

Əsas fərq, siyahının formalaşmasıdır. Bu əyri mötərizələr {} əsasən bir sıra nəzərdə tutur və bu halda, bu vəziyyət 1 ilə 10 arasındadır (iki nöqtə bir sıra başlanğıcını və sonunu ayırır).

Buna görə bu nümunə 1 və 10 arasında hər bir ədədlə işləyir və ədədi ekrana aşağıdakı kimi verir:

Eyni loop bu kimi yazılmış ola bilərdi, ilk nümunəyə sintaksis eyni idi:

ədəd üçün 1 2 3 4 5 6 7 8 9 10

Nömrələri bir aralığa keçmək üçün necə

Əvvəlki nümunə bir başlanğıc və son nöqtə arasındakı loopun necə göstərildiyini göstərdi, buna görə indi biz aralığında nömrələri necə atlayacağımıza baxacağıq.

Təsəvvür edin, 0 ilə 100 arasında loop istəyirik, ancaq hər onuncu nömrəsini göstərin. Aşağıdakı skript yalnız bunu necə göstərir:

#! / bin / bash
{0..100..10} sayı içərisində
etmək
yankı "$ sayı"
həyata keçirilir
çıxış 0

Qaydalar əsasən eynidır. Siyahısı, dəyişən və birləşmə ilə həyata keçiriləcək bir sıra bəyanatlar var. Siyahı bu dəfə belə görünür: {0..100..10}.

İlk nömrə 0, son nömrəni isə 100 təşkil edir. Üçüncü nömrə (10) siyahıda atılan maddələrin sayıdır.

Yuxarıda göstərilən nümunə bu səbəbdən aşağıdakı çıxışı göstərir:

Loop üçün ənənəvi axtarır

Döngüler üçün yazma üsulu digər proqramlaşdırma dilləri ilə müqayisədə bir az qəribədir.

Bununla belə, C proqramlaşdırma dilinə bənzər bir üslubda for loop yaza bilərsiniz:

#! / bin / bash
((sayı = 1; sayı <100; nömrə + +))
{
əgər (($ number% 5 == 0))
sonra
echo "$ sayı 5-ə bölünür"
fi
}
çıxış 0

Döngü, dəyişən sayını 1 -ə (sayı = 1 ) təyin etməklə başlayır. Bir sıra dəyərinin 100-dən az olmasına baxmayaraq loop yinelenerek davam edəcək ( sayı <100 ). Hər bir təkrarlama ( sayı ++ ) sonra 1 nömrə əlavə edərək nömrənin dəyəri dəyişir.

Kıvırcık köklər arasında hər şey loopun hər təkrarlanması ilə həyata keçirilir.

Qoşmalar arasındakı bit bir sayının dəyərini yoxlayır, 5-ə bölər və qalıqı 0-a müqayisə edir. Qalanı 0-dürsə, ədəd 5-ə bölünür və sonra ekranda göstərilir.

Misal üçün:

İtermanın addım ölçüsünü dəyişdirmək istəyirsinizsə, sayı + sayı + 2 , nömrə = nömrə + 5 və ya nömrə = nömrə + 10 və s

Bu, sayı + = 2 və ya + = 5 sayına qədər azalda bilər.

Praktiki bir nümunə

Döngüler üçün ədəd siyahılarını təkrarlamaqdan daha çox şey edə bilərsiniz. Siz, həqiqətən, digər əmrlərin çıxışını siyahı kimi istifadə edə bilərsiniz.

Aşağıdakı misalda audio faylları MP3- dan WAV-ə necə çevirmək olar:

#! / bin / bash

Bu misaldakı siyahı, mövcud qovluqda .MP3 uzantısı olan hər bir fayldır və dəyişən bir fayldır .

Mpg əmri MP3 faylını WAV-ə çevirir. Bununla belə, ehtimal ki, bunu əvvəlcə paket menecerinizdən istifadə etmək lazımdır.