10 Bash For Loop примери с обяснения

For Loop е неразделна част от всеки език за програмиране. Той позволява на програмите да преминават през определен брой елементи.

Например, ако искате да преминете през списък или масив от ‘n’ елемента, ще използвате for Loop. Да вземем прост пример:

1Виолетово2Индиго3Синьо4ЗеленоДъгова таблица

За да извършим някакви действия или да повторим елементите в горната таблица, ни е необходим For Loop.

Bash за цикъл

В bash скрипт синтаксисът на For Loop е както следва:

#!/bin/bash

for VAR in 1 2 3 4 5.....N

do

 ACTION 1

 ACTION 2

 .....

done

Bash For Loop е доста ясен. Първият ред #!/bin/bash показва, че кодът е bash скрипт. VAR означава временната променлива, използвана за цикъл. N показва максималния брой повторения. ‘do’ и ‘done’ стартират и спират цикъла съответно. Действията са командите, които се изпълняват в цикъла.

Можем да изпълним Bash For Loop с различни променливи, като списък, низове, цели числа и масиви. Тази статия ще покаже няколко общи примера за Bash For Loop.

Можете директно да изпълните тези програми на командния ред bash или да ги запишете във файл и да изпълните файла с помощта на командата Bash filename.sh.

Четене на статичен списък

Помислете за следния списък – rainbowColorList = виолетово, индигово, синьо, зелено, жълто, оранжево, червено

Можем да отпечатаме горния списък с низове, като използваме Bash For Loop, както следва:

#! /bin/sh

# Define the list

rainbowColorList=Violet,Indigo,Blue,Green,Yellow,Orange,Red

# Comma separator pattern using //,/

for colors in ${rainbowColorList//,/ }

do

   echo $colors

done

Резултатът ще бъде списъкът с елементи в нов ред.

#Output

Violet
Indigo
Blue
Green
Yellow
Orange
Red

Четене на масив

Синтаксисът за деклариране на масив е различен. Използвайте скоби за всеки елемент (низ).

rainbowArray=("Violet" "Indigo" "Blue" "Green" "Yellow" "Orange" "Red")

for colors in "${rainbowArray[@]}"; do

     echo "I like $colors"

done

‘@’ се използва за итерация през всеки елемент в масива.

#Output

I like Violet
I like Indigo
I like Blue
I like Green
I like Yellow
I like Orange
I like Red

Можем също да използваме For Loop за отпечатване на индексите и елементите на масива.

#Printing with index

rainbowArray=("Violet" "Indigo" "Blue" "Green" "Yellow" "Orange" "Red")

for i in "${!rainbowArray[@]}";

do

  echo "Color at index " $i " : " "${rainbowArray[$i]}"

  i=$((i+1));

done
#Output

Color at index 0 : Violet
Color at index 1 : Indigo
Color at index 2 : Blue
Color at index 3 : Green
Color at index 4 : Yellow
Color at index 5 : Orange
Color at index 6 : Red

Обърнете внимание, че използваме „!“ в цикъла, за да получите индекса на елемента.

  Създавайте цветови палитри на вашия iPhone и синхронизирайте с вашия Mac

Итерационен диапазон от числа

Можем да използваме Bash For Loop за итерация в диапазон от числа.

#iterating over range of numbers

echo "Countdown begins..."

for N in {10..0}

do

    echo "$N"

done

„..“ показва диапазон от числа.

#Output

10
9
8
7
6
5
4
3
2
1
0

Можем също да пропуснем числата за броене, като посочим диапазона.

В примера по-долу прескачаме броенето с 3.

#iterating with skip counting

echo "Countdown begins..."

for N in {30..0..3}

do

    echo "$N"

done

Програмата по-горе започва с 30 като първо число и отброява до 0. Последният параметър във for цикъла ‘3’ указва броя на пропусканията.

#Output

30
27
24
21
18
15
12
9
6
3
0

Низове и знаци

Можем да правим много интересни операции с низове с Bash For Loop.

Например, можем да прочетем всеки знак от низ, като използваме оператора ‘seq’ в For Loop:

#read characters of a string

myword="welcome"

for i in $(seq 1 ${#myword})

do

 echo "${myword:i-1:1}"

done

Имайте предвид, че ‘seq’ трябва да започва с 1, за да получите първия знак първи.

#Output

W
e
l
c
o
m
e

Можем също да отпечатаме низовете, разделени с интервал един по един:

#read each word from a sentence

mysentence="Welcome to pctechbg.net. One stop hub for all techies"

for word in $mysentence; do

    echo $word

done
#Output

Welcome 
to 
pctechbg.net. 
One 
stop 
hub 
for 
all 
techies

Изрази

Подобно на всеки друг език за програмиране като Java, можем да поставим изрази в Bash For Loop.

for (( var=10; var>=0; var-- ))

do 

  echo "Counting down...$var"

done
#Output

Counting down...10
Counting down...9
Counting down...8
Counting down...7
Counting down...6
Counting down...5
Counting down...4
Counting down...3
Counting down...2
Counting down...1
Counting down...0

Четене на аргументи от командния ред

За да четем от аргументите на командния ред, използваме командата ‘read’. В примера по-долу ще получим няколко числа от потребителя и ще отпечатаме сумата с помощта на Bash For Loop. Използваме променливата total, за да съхраним междинния и крайния сбор или сумата на числата.

read -a array -p "Enter the numbers you want to add:"

total=0

for i in ${array[@]}; do

  let total+=$i

done

echo "Sum of the numbers is: $total"

Резултатът е:

#Output

Enter the numbers you want to add: 3 4 66
Sum of the numbers is: 73

Намиране на четни и нечетни числа

За да намерим нечетни и четни числа между 1 до 10 (или произволно число N), трябва да използваме условието if заедно с Bash for Loop. За да определим четно число, ще разделим числото на 2 и ако остатъкът е 0, тогава ще го категоризираме като четно или нечетно.

#declare the list where the even and odd numbers will be sorted and kept

evennum=""

oddnum=""

for (( i=1; i<=10; i++ ))

do

remainder=$(( $i % 2 ))

if [ $remainder -eq 0 ]; then

 evennum="$evennum $i "

else

 oddnum="$oddnum $i "

fi

done

echo "Even numbers are: "$evennum

echo "Odd numbers are: "$oddnum

Обърнете внимание, че ние даваме диапазона като 10 в горния пример. Можем да променим това число, за да получим четни и нечетни числа между всеки диапазон. Можете също да опитате да прочетете номера от потребителя, като използвате командата ‘read’, която научихме в предишния раздел.

#Output

Even numbers are: 2 4 6 8 10
Odd numbers are: 1 3 5 7 9

Безкраен цикъл

Безкраен или безкраен цикъл е цикъл, който не спира да се изпълнява и програмата трябва да бъде принудена да спре с помощта на Ctrl+C. Можем лесно да създадем безкраен цикъл с помощта на ‘; ;’ оператор вътре в цикъла for:

for (( ; ; ))

do

  echo "Welcome to pctechbg.net"

done
#Output

Welcome to pctechbg.net
Welcome to pctechbg.net
Welcome to pctechbg.net
Welcome to pctechbg.net
Welcome to pctechbg.net
Welcome to pctechbg.net
Welcome to pctechbg.net
Welcome to pctechbg.net
Welcome to pctechbg.net
Welcome to pctechbg.net
^C
$

Изявление за прекъсване

Инструкциите за прекъсване се използват за излизане от цикъла, когато е изпълнено условие „if“.

for color in Violet Indigo Blue Green Yellow Orange Red

do

  if [[ "$color" == 'Green' ]]; then

    break

  fi

  echo "Searching for Green, the color now is $color"

done

echo "I found my color $color"

В този пример се опитваме да намерим зеления цвят. For-Loop преминава през всеки цвят и след като бъде намерен зеленият цвят, програмата излиза от Loop поради командата break.

#Output

Searching for Green, the color now is Violet
Searching for Green, the color now is Indigo
Searching for Green, the color now is Blue
I found my color Green

Продължете изявление

Продължаване се използва за пропускане на текущия цикъл и преминаване към следващия въз основа на определено условие. Например, ако не искате да отпечатате цвета „Зелен“ от предишната ни програма, можем да поставим продължи и всички други цветове с изключение на Зеленото ще бъдат показани.

for color in Violet Indigo Blue Green Yellow Orange Red

do

  if [[ "$color" == 'Green' ]]; then

    continue

  fi

  echo "$color"

done
#Output

Violet
Indigo
Blue
Yellow
Orange
Red

Заключителни думи

Покрихме най-често срещаните употреби на Bash For Loop, използвайки низове, цели числа, масиви и списък. Ако изучавате Linux, но имате машина с Windows 10, можете да използвате функцията WSL и да инсталирате Linux на вашата машина с Windows.

  Използвайте скрипт на Google като алтернатива на Unroll.me с отворен код

След това можете да използвате терминала на Linux по подобен начин на CMD.

След това можете да проверите Как да стартирате bash скриптове с помощта на Python?