The смачквам Обвивката предоставя страхотна функционалност, когато става въпрос за писане на скриптове. Това включва толкова много начини за повторение на купчина данни, че можете да свършите много, като изпълните един скрипт. Независимо дали преглеждате набор от числови стойности, дни от седмицата, потребителски имена, думи, файлове или нещо съвсем друго, смачквам Той има опция, която ви улеснява.
за, докато и докато цикли
Първото нещо, което трябва да знаете за съкращенията смачквам Е, че има няколко основни команди за използване. The Докато Цикълът ще се завърти, докато дадено условие е вярно. The до цикълът ще се изпълнява, докато някое условие стане истина, и за Цикълът ще премине през поредица от стойности, независимо от техния произход.
Например, използвайки Докатоитерация, докато числото е по-малко от 100, итерация през оставащите дни от месеца, както е показано в скрипта по-долу (където улавяме текущия ден с Дата Командата и последният ден от последната серия в изхода кал команда) или преминаване през нещо съвсем различно.
#/bin/bash # day of month day=`date | awk '{print $3'}` # number of days in month numdays=`cal | tail -2 | head -1 | awk '{print $NF}'` while [ $day -le $numdays ] do echo $day ((day++)) done
Когато стартираме този скрипт, трябва да видим нещо подобно:
$ remaining_days 27 28 29 30
Следният скрипт продължава да се повтаря, докато колега не влезе. Докато броят на потребителските влизания е нула (т.е. те не са влезли), показваме „изчакайте“ и след това изчакайте още 60 секунди. След като потребителят влезе в системата, Докато Цикълът се излиза и в рамките на 60 секунди се появява съобщение, потвърждаващо присъствието на потребителя за влизане.
#!/bin/bash echo -n "user to wait for> " read user while [ `who | grep $user | wc -l` == 0 ] do echo waiting sleep 60 done echo $user is online
The до Епизодичната версия на сценария е много подобна.
#!/bin/bash echo -n "user to wait for> " read user until [ `who | grep $user | wc -l` -gt 0 ] do echo waiting sleep 60 done
в за Цикли, преминаваме през поредица от стойности, но има няколко команди, които можете да използвате, за да генерирате тези стойности.
The Докато И на до Командите са обяснени по-нататък в Как да повтаряте команда на Linux, докато не работи
Повторение между букви и цифри
Можете да повторите низ от числа или знаци, като посочите диапазон от стойности във файл {старт стоп} Форматирайте като в примерите по-долу. Имайте предвид, че можете да започнете с всяка стойност, която желаете. Не е нужно да започвате с “a” или “0”.
$ for letter in {a..f}; do echo $letter; done a b c d e f
В този следващ пример започваме с 5, а не с 1 и избягваме връщането на първия от реда с ехо n поръчка.
$ for number in {5..11}; do echo -n "$number "; done 5 6 7 8 9 10 11 $
Можете дори да обърнете реда на цифрите или буквите, ако желаете. Ето няколко примера:
$ for letter in {z..x}; do echo $letter; done z y x
$ for number in {11..7} > do > echo $number > done 11 10 9 8 7
повтаряй завинаги
Най-лесният начин да повтаряте завинаги е да използвате “Понякога вярноЦикълът няма да спре да работи, освен ако не го убиете – например с a ^ c. Ако е включен в скрипт, работещ във фонов режим, можете да използвате a убиване Команда (напр. kill 654321) за прекратяване на скрипта.
$ while true > do > echo Hello > sleep 60 > done Hello Hello ^C
Повече информация за зациклянето завинаги е достъпна на Как да зацикля завинаги в bash на Linux.
Изходни цикли с прекъсване и продължение
The почивка И на продължи Командите ви позволяват да излезете изцяло от цикъла (почивка) или рестартирайте в горната част на цикъла (продължи), пропускайки всички команди между продължи Командата и краят на епизода.
The почивка И на продължи Командите са обяснени по-подробно в Използвайте прекъсване и продължете да излизате от примките.
The гънки Командата може да се използва за разделяне на файл или низ на части с еднакъв размер. Дължината по подразбиране е 80 знака. В този пример ние разделяме низа на части от 11 знака, като използваме разширението -c11 (11 букви) Опция.
$ fold -c11 trythis This file h as a few ri diculously long charac ter strings . Oh, well.
При използване на файл гънки Въпросът е в а за цикъл обаче, трябва да запомните, че всеки резултантен низ, съдържащ празно място, ще доведе до един или повече допълнителни цикли, защото за Запетайките на всеки низ са разделени с празно място.
$ for line in `fold -c10 trythis` > do > echo -n "$line" > echo -n ":" > echo $line | wc -c > done This:5 file:5 has:4 a:2 few:4 ridiculous:11 ly:3 long:5 ch:3 aracter:8 st:3 rings.:7 Oh,:4 well.:6
Повече за гънки Командата може да бъде намерена на Използвайте сгъване, за да направите текста по-четлив И на Използвайте командата за сгъване, за да управлявате цикли.
Повторение дума по дума
за итериране през списък с думи, използвайки a за цикъл, можете да изпълните команда като тази по-долу. Имайте предвид, че апострофът трябва да бъде екраниран, за да не се интерпретира като начало на низ.
$ for word in all's well that ends well; do echo $word; done all's well that ends well
Ако искате месеците от годината да се повтарят, можете да използвате команда като тази:
$ for month in `locale mon | sed 's/;/ /g'`; do echo $month; done January February March April May June July August September October November December
Горната команда използва файл езика команда за получаване на списък с месеци и г-н Разделя реда, разделен с точка и запетая, на отделни месеци.
Съдържа се
Излишъкът в скриптовете и командния ред на Linux очевидно е една от най-добрите техники за свършване на много за кратко време и с минимални усилия, особено ако превърнете вашите цикли в скриптове, които можете да изпълнявате често. Колкото е необходимо, без да се налага всеки път да обмисляте всеки детайл.
Авторско право © 2022 IDG Communications, Inc. Всички права запазени.