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
Обърнете внимание, че използваме „!“ в цикъла, за да получите индекса на елемента.
Итерационен диапазон от числа
Можем да използваме 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.
След това можете да използвате терминала на Linux по подобен начин на CMD.
След това можете да проверите Как да стартирате bash скриптове с помощта на Python?