Руководство по написанию сценариев на Bash для начинающих

Bash Scripting Tutorial



Командным языком Linux по умолчанию является сценарий Bash. Нам нужно ежедневно запускать множество команд в Linux для многих целей. Эти ежедневные задачи можно автоматизировать с помощью сценария bash. Любой пользователь может выучить этот скриптовый язык очень легко и быстро. Если вы новичок в программировании на bash, то это руководство для вас.

Содержание:

  1. Комментарии
  2. эхо-команда
  3. Переменные
  4. Условный оператор
  5. Петли
  6. Функции
  7. Вызов программ в скрипте
  8. Создание меню
  9. Обработка командной строки
  10. Арифметика
  11. Строковые манипуляции
  12. Возврат кодов возврата из сценария и перехват в другом сценарии
  13. Чтение и запись в файлы
  14. Трубы

Комментарии

Добавление комментариев в код - неотъемлемая часть любого языка программирования. Комментарии не анализируются скриптом во время выполнения. Читатель может правильно понять любой код, если он хорошо прокомментирован. В сценарии bash вы можете добавить комментарий несколькими способами. В этой части показано, как вы можете добавлять однострочные и многострочные комментарии в сценарий bash. Создайте файл bash со следующим сценарием, чтобы знать, как использовать комментарий bash. Здесь символ ‘#’ используется для добавления однострочного комментария, а одинарная кавычка (‘) с‘: ’используется для добавления многострочного комментария.







bash_comment.sh



#! / bin / bash
# Взять число в качестве ввода
выбросил 'Введите номер'
читатьк
:'
Убедитесь, что введен номер
меньше 10 или больше 10 или равно 10
'

если [[ $ а -lt 10 ]]
тогда
выбросил 'Число меньше 10'
Элиф [[ $ а -gt 10 ]]
тогда
выбросил 'Число больше 10'
еще
выбросил 'Число равно 10'
быть

Выход:



Запускаем скрипт.





$трепатьbash_comment.sh

Здесь сценарий выполняется три раза с входными значениями 3, 10 и 90. Появится следующий результат.



Если вы хотите узнать больше о комментировании bash, вы можете проверить этот учебник .

Вверх

эхо-команда

Команда `echo` используется в bash для вывода вывода в терминал. С командой echo в bash можно использовать различные параметры для печати вывода разными способами. Создайте файл bash со следующим сценарием, чтобы знать два простых использования команды `echo`. Здесь первая команда `echo` напечатает простые текстовые данные с новой строкой, а вторая команда echo напечатает простой текст без новой строки.

echo_test.sh

#! / bin / bash
# Распечатать первый текст
выбросил 'Печатать текст с новой строки'
# Распечатать второй текст
выбросил -n 'Печатать текст без новой строки'

Выход:

Запускаем скрипт.

$трепатьecho_test.sh

Следующий вывод появится после выполнения указанной выше команды.

Есть много других вариантов использования команды `echo` в bash. Вы можете проверить это руководство, чтобы узнать больше о команде `echo`.

Вверх

Переменные

Объявление переменных - необходимая часть любого языка программирования. Переменные Bash можно объявлять по-разному. Когда значение присваивается переменной, в начале переменной не используется символ. Символ «$» используется с именем переменной во время чтения значения переменной. Переменная может использоваться из терминала или может использоваться в любом сценарии bash.

Следующие команды объявят строковую переменную с именем Mystr с конкретным значением и затем распечатайте значение переменной в терминале.

$Mystrзнак равно'Мне нравится программировать на bash'
$выбросил $ mystr

Выход:

Создайте файл bash со следующим скриптом. Здесь объявлены две переменные. Эти $ а а также $ млрд . Если входное значение, которое хранится в $ а равно $ млрд затем сообщение, Числа равны будет напечатано иначе Цифры не равны будут напечатаны.

var.sh

#! / bin / bash
выбросил 'Введите номер'
читатьк
бзнак равно100
если [[ $ а -экв $ млрд ]]
тогда
выбросил 'Числа равны'
еще
выбросил 'Числа не равны'
быть

Выход:

Запускаем скрипт.

$трепатьvar.sh

Вышеупомянутая команда выполняется два раза со значениями 56 и 100. Появится следующий результат.

Если вы хотите узнать больше о переменных bash, вы можете проверить этот учебник .

Вверх

Условный оператор

Как и в другом языке программирования, в bash можно использовать условный оператор. ‘ Если-то-еще ' а также ' кейс 'Операторы в основном используются для реализации операторов условий на любом языке программирования. Использование условного оператора с помощью 'если' заявление показано в этом разделе этого руководства. Создайте файл bash со следующим сценарием, в котором используется условный оператор. Здесь два значения будут взяты от пользователя в качестве входных и сохранены в переменных, код $ , а также $ возраст . Оператор 'if' используется для проверки значения $ возраст Больше или равно 18 и ценность код $ является 1100 . Если оба условия верны, то сообщение, Вы имеете право посмотреть фильм будет напечатано иначе Вы не имеете права смотреть фильм будут напечатаны.

cond.sh

#! / bin / bash

выбросил 'Введите ваш код'
читатькод
выбросил 'Введите свой возраст'
читатьвозраст

если [[ $ возраст -давать 18 && код $ -экв «1100» ]]
тогда
выбросил 'Вы имеете право посмотреть фильм'
еще
выбросил 'Вы не имеете права смотреть фильм'
быть

Выход:

Запускаем скрипт.

$трепатьcond.sh

Следующий вывод появится после ввода различных значений ввода. 1100 дается как код, а 5 дается как возраст для первого выполнения, и если условие возвращает false для этих значений. 1100 задается как код, а 45 задается как возраст для второго выполнения, которое возвращает истину для условия if.

Если вы хотите узнать больше об условном выражении bash, вы можете проверить это руководство.

Вверх

Петли

Когда некоторые части скрипта необходимо выполнить несколько раз, для выполнения задачи используется цикл. Bash поддерживает три типа объявления циклов, как и другие языки. Это циклы for, while и until. В зависимости от требований к программированию в скрипте используется определенный цикл. Использование этих трех типов циклов показано в этом разделе на простых примерах.

Использование цикла for

Создайте файл bash со следующим сценарием, где ` для` цикл используется для итерации. `for` Цикл в основном используется для итерации списка данных или массива. Здесь используется список названий дней недели, и каждое название дня недели повторяется с помощью цикла for. `если` Оператор используется для печати конкретного сообщения на основе названия дня недели.

for.sh

# Считайте название дня недели на каждой итерации цикла
дляденьвпонедельник вторник среда Четверг Пятница Суббота воскресенье
делать

# Убедитесь, что название дня недели - понедельник или четверг
если [[ $ день=='Понедельник' || $ день=='Четверг' ]]
тогда
выбросил 'Встреча на$ деньв 9:30 утра

# Убедитесь, что название дня недели - вторник, среда или пятница.
Элиф [[ $ день=='Вторник' || $ день=='Среда' || $ день=='Пятница' ]]
тогда
выбросил 'Обучение на$ деньв 11:00
еще

# Распечатать 'Праздник' на другие дни
выбросил '$ деньпраздник '
быть
сделано

Выход:

Запускаем скрипт.

$трепатьfor.sh

Следующий вывод появится после запуска скрипта.

Если вы хотите узнать больше об использовании цикла bash for, вы можете проверить это руководство.

Использование цикла while

Создайте файл bash со следующим сценарием, где ` в то время как ` цикл используется для итерации. Этот скрипт напечатает числа от 1 до 20, которые являются четными и делятся на 5. Здесь счетчик $ переменная используется для управления итерацией цикла, и значение этой переменной увеличивается на 1 в каждой итерации. Когда `если` условие вернет истину, тогда оно распечатает значение счетчик $ .

#! / bin / bash

# Распечатать сообщение
выбросил 'Выведите четные числа, делящиеся на 5'

# Инициализировать счетчик
прилавокзнак равно1

# Продолжаем цикл до тех пор, пока значение $ counter не станет меньше или равно 20
в то время как [ счетчик $ - двадцать ]
делать

# Убедитесь, что счетчик $ делится на 2 и 5
если [[ счетчик $%2-экв 0 && счетчик $%5-экв 0 ]]
тогда
# Печатать счетчик $ без новой строки
выбросил 'счетчик $'
быть

# Увеличить счетчик $ на 1
((счетчик ++))
сделано
выбросил 'Выполнено'

Выход:

$трепатьwhile.sh

Есть только числа в пределах 1-20, они четные и делятся на 5. После запуска скрипта появится следующий результат.

Если вы хотите узнать больше об использовании bash ` в то время как цикл, тогда вы можете проверить этот учебник .

Использование цикла до

Создайте файл bash со следующим сценарием, где ` до` цикл используется для итерации. Этот скрипт напечатает все нечетные числа от 0 до 20. $ n переменная используется в этом скрипте для итерации цикла.

до.ш

#! / bin / bash

# Инициализировать переменную n
пзнак равнодвадцать

# Повторяйте цикл до тех пор, пока значение $ n не станет больше 0
до [ $ n -lt 0 ]
делать

# Проверить, что значение n нечетное
если [[ $ n%2-gt 0 ]]
тогда
выбросил $ n
быть

# Увеличиваем значение n на 1
((пзнак равно$ n-1))
сделано

Выход:

Запускаем скрипт.

$трепатьдо.ш

Сценарий напечатает все четные числа от 20 до 1. После запуска сценария появится следующий вывод.

Вверх

Функции

Когда блок кода должен выполняться в сценарии несколько раз, функция используется для выполнения задачи. Вам нужно будет вызывать функцию по имени только тогда, когда сценарий, определенный в функции, должен выполняться много раз, а не добавлять один и тот же сценарий несколько раз. Начальная и конечная первая скобка используется с именем функции для объявления функции в сценарии bash. Функцию можно вызвать просто по имени функции в bash. Bash не поддерживает аргумент функции, как другой стандартный язык программирования. Но значение можно передать функции bash другим способом, как показано в этом разделе. Значение может быть возвращено из функции с помощью оператора return или без использования оператора return.

Создайте файл bash со следующим сценарием, чтобы знать, как функции могут быть объявлены и вызваны в сценарии bash. В скрипте объявлены три функции. Первая функция объявлена ​​для печати простого сообщения, Bash Programming для начинающих . Вторая функция объявлена ​​для присвоения строкового значения переменной, $ return_str что напечатает, Изучите программирование на bash с LinuxHint после вызова функции. Третья функция объявляется для чтения значения аргумента в виде радиуса круга, который будет предоставлен во время вызова функции. Здесь, местный используется для чтения значения аргумента. Эта функция вычислит площадь круга на основе значения радиуса по формуле πr2 и распечатайте рассчитанное значение площади.

func.sh

#! / bin / bash

# Объявить простую функцию
функцияprint_message()
{
выбросил 'Программирование на Bash для начинающих'
}

# Объявить функцию, возвращающую строковое значение
функцияret_strdata()
{
# Инициализировать переменную строковым значением
return_strзнак равно'Изучите программирование на bash с LinuxHint'
}

# Объявить функцию для чтения значения аргумента
функцияCalcul_area()

# Прочитать переданное значение аргумента
местный радиусзнак равно1 доллар
площадь= $(выбросил $ radius*$ radius*3,14

# Вызов функции для печати простого сообщения
print_message

# Вызвать функцию, которая присвоит строковое значение переменной
ret_strdata

# Распечатать значение переменной
выбросил $ return_str

# Прочитать значение радиуса
выбросил 'Введите значение радиуса'
читатьРабота

# Вызов функции со значением радиуса
Calcul_area$ рад

Выход:

Запускаем скрипт.

$трепатьfunc.sh

Следующий вывод появится после запуска скрипта. Первые две строки будут напечатаны путем вызова функций, print_message () а также ret_strdata () . Последняя строка будет напечатана путем вызова функции, Calcul_area () с принятым входным значением радиуса.

Если вы хотите узнать о возврате строки из функции bash, вы можете эта уроки файл.

Вверх

Вызов программ в скрипте

Вы можете использовать множество типов команд для вызова других программ в любом сценарии bash, например источник, bash, eval, exec и т. д. Предположим, что три файла bash, add.sh , subtract.sh, multiply.sh и Division.sh создан для выполнения сложения, вычитания, умножения и деления. Здесь, subtract.sh а также Division.sh читать аргументы командной строки. Скрипт всех этих четырех файлов приведен ниже.

add.sh

#! / bin / bash
кзнак равно60
бзнак равно40
((результатзнак равно$ а+$ млрд))
выбросил 'Добавление$ а+$ млрдзнак равно$ результат'

subract.sh

#! / bin / bash
кзнак равно1 доллар
бзнак равно2 доллара
((результатзнак равно$ а-$ млрд))
выбросил 'Вычитание$ а-$ млрдзнак равно$ результат'

multiply.sh

#! / bin / bash
((результатзнак равно1 доллар*2 доллара))
выбросил 'Умножение $ 1 и $ 2 равно$ результат'

DivX.sh

#! / bin / bash
кзнак равно1 доллар
бзнак равно2
((результатзнак равно$ а/$ млрд))
выбросил 'Разделение$ ак$ млрдявляется$ результат'

Создайте файл bash с именем, callpro.sh с помощью следующего скрипта для вызова упомянутых файлов bash с помощью команд source, bash, eval и exec. Перед запуском следующего сценария необходимо установить разрешение на выполнение для четырех вышеуказанных файлов. Команда `source` используется для вызова add.sh файл. Команда bash используется для выполнения файла subtract.sh. Команда eval используется для выполнения файла multiply.sh. Два входных значения отправляются в качестве аргументов командной строки для команды eval. Последняя команда - это команда exec, которая работает только с абсолютным путем. Для этого в скрипте указывается полный путь к файлу div.sh.

callpro.sh

#! / bin / bash
script1знак равно'add.sh'
сценарий2знак равно'subtract.sh'
script3знак равно'multiply.sh'
script4знак равно'/home/fahmida/code/divide.sh'

источник '$ script1'

трепать $ script2 пятьдесят двадцать

выбросил 'Введите значение a'
читатьк
выбросил 'Введите значение b'
читатьб
оценка трепать $ script3 $ а $ млрд
exec $ script4 30

Выход:

Запускаем скрипт.

$трепатьcallpro.sh

Следующий вывод появится после запуска скрипта.

Вверх

Создание меню

В bash есть полезная команда для создания простого меню, которое называется `select` команда. С помощью этой команды можно создавать различные типы меню. Для создания меню с помощью этой команды используется конкретный список данных. Создайте файл bash со следующим кодом, чтобы увидеть использование `select` команда для создания меню. В этом примере список из пяти элементов будет напечатан в виде меню и предложит пользователю выбрать любой язык из списка. Выбранное значение будет сохранено в переменной, $ язык который печатается позже путем объединения с другой строкой. Скрипт будет постоянно запрашивать выбор языка, пока пользователь не нажмет 6 завершить сценарий.

menu.sh

#! / bin / bash

# Распечатать сообщение для пользователя
выбросил 'Выберите свой любимый язык'

# Определить список пункта меню
ВыбратьязыквC# Java PHP Python Bash Exit
делать
# Распечатать выбранное значение
если [[ $ язык=='Выход' ]]
тогда
выход 0
еще
выбросил 'Выбранный язык$ язык'
быть
сделано

Выход:

Запускаем скрипт.

$трепатьmenu.sh

Согласно следующему выводу, пользователь нажал 3 в первый раз, что напечатал PHP, и нажал 6 во второй раз, что завершилось из сценария.

Если вы хотите узнать больше о создании меню bash с помощью `select`, вы можете посетить это руководство.

Вверх

Обработка командной строки

Иногда нам нужно предоставить входные значения при выполнении скрипта из командной строки. В bash эту задачу можно выполнить двумя способами. Один способ - использовать переменные аргумента, а другой - использовать функцию getopts. В этом разделе показано чтение входных данных командной строки из терминала с использованием переменной аргумента.

Создайте файл bash с помощью следующего сценария, чтобы увидеть использование значения аргумента командной строки для чтения. Этот сценарий будет читать три аргумента командной строки, которые будут сохранены в переменных $ operand1, $ operand2 и $ operator. Для правильного выполнения сценария значения первого и третьего аргумента должны быть числом, а значение второго аргумента должно быть любым из четырех арифметических операторов («+», «-», «/», «x»). если Оператор проверит значение оператора $ и выполнит операцию на основе оператора и распечатает значение.

cl1.sh

#! / bin / bash

# Распечатать переменные аргумента
выбросил 'Значения аргумента: $ 1 $ 2 $ 3'

# Сохранить значения аргументов
операнд1знак равно1 доллар
операнд2знак равно3 доллара США
операторзнак равно2 доллара

# Проверьте значение второго аргумента команды, чтобы выполнить арифметическую операцию
если [[ оператор $=='+' ]]
тогда
((результатзнак равно$ operand1+$ operand2))
Элиф [[ оператор $=='-' ]]
тогда
((результатзнак равно$ operand1-$ operand2))
Элиф [[ оператор $=='Икс' ]]
тогда
((результатзнак равно$ operand1*$ operand2))
Элиф [[ оператор $=='/' ]]
тогда

((результатзнак равно$ operand1/$ operand2))
быть

# распечатать результат
выбросил -А также 'Результат =$ результат'

Выход:

Запускаем скрипт.

$трепатьcl1.sh

Скрипт выполняется четыре раза для четырех типов арифметических операторов. Следующий вывод появится для значений аргументов, 6 + 3, 6 - 3, 6 x 3 и 6/3 .

Значения аргументов могут передаваться с парой имя-значение в bash. Создайте файл bash со следующим сценарием, чтобы показать, как читать значения аргументов с именем. Скрипт прочитает две переменные аргумента. Значения аргументов с именем печатаются в первом операторе скрипта. Затем цикл for используется для перебора массива, содержащего значения аргументов командной строки. Каждый элемент массива разделяется на пару ключ-значение с помощью команды `cut`. Затем оператор case используется для печати конкретного сообщения на основе значения ключа.

cl2.sh

. #! /являюсь/трепать

# Распечатать переменные аргумента
выбросил 'Значения аргумента: $ 1 $ 2'

# Прочтите каждый аргумент отдельно, используя цикл for
длязлойв '[электронная почта защищена]'
делать

# Отдельное имя и значение аргумента
ключ= $(выбросил $ arg | резать -f1 -dзнак равно)
ценить= $(выбросил $ arg | резать -f2 -dзнак равно)

# Распечатать сообщение на основе имени аргумента
кейс $ ключ в
имя) выбросил 'Имя студента =$ значение';;
отметка) выбросил 'Полученная оценка =$ значение' ;;
*)
esac
сделано

Выход:

Запустите сценарий со следующими аргументами командной строки.

$трепатьcl2.shимя= Абир Хоссейнотметказнак равно90

В приведенных выше командах используются два аргумента командной строки. Эти name = Абир Хоссейн а также mark = 90 . имя а также Метки разделяются сценарием, и после форматирования вывода печатаются два значения.

Обработка аргументов командной строки с помощью Getopts функция не обсуждается в этом руководстве. Если вы хотите узнать об обработке командной строки с помощью Getopts функция, тогда вы можете посетить этот учебник .

Вверх

Арифметика

Выполнение арифметических операций - общее требование любого языка программирования. Bash выполняет арифметические операции иначе, чем другой стандартный язык программирования. В bash есть несколько способов выполнять арифметические операции. В этом разделе показан один из простых способов выполнения арифметических операций. Создайте файл bash со следующим скриптом. В этом скрипте показаны четыре типа арифметических операций. Простые операции суммирования и деления показаны с использованием первых двойных скобок в начале сценария. Далее показана операция предварительного увеличения. Наконец, способ использования сокращенного оператора показан в последней части скрипта.

arith.sh

#! / bin / bash
# Рассчитываем сумму
результат= $((пятьдесят+25))
# Вывести значение суммирования
выбросил 'сумма =$ результат'

# Рассчитать деление
результат= $((пятьдесят/25))
# Распечатать значение деления
выбросил 'деление =$ результат'

# Присвойте значение N
Nзнак равно10
# Выполнение предварительного приращения
((--N))
# Вывести значение N
выбросил 'Значение после декремента =$ N'

# Использование сокращенного оператора
((N + =10 ))
# Вывести значение N
выбросил 'Значение после добавления 10 =$ N'

Выход:

Запускаем скрипт.

$трепатьarith.sh

Следующий вывод появится после запуска скрипта.

Все арифметические операции выполняются в двойных скобках в приведенном выше сценарии. Но вы можете использовать ' позволять ’,‘ expr ' а также ' до н.э ‘Команда для выполнения арифметических операций в bash. Если вы хотите узнать больше об этих командах для выполнения арифметических операций bash, вы можете посетить это руководство.

Вверх

Манипуляции со строками

Многие типы задач могут быть выполнены со строковыми данными в bash. Некоторые из них объединяют строку, сравнивают строку, разбивают строку, изменяют регистр строки и т. Д. В bash нет встроенных строковых функций, подобных другим стандартным языкам, для выполнения строковых операций. Некоторые общие манипуляции со строками обсуждаются в этом разделе этого руководства.

Объединяющая строка

Сложение двух или более строк называется конкатенацией строк. Строки объединяются в bash путем размещения их друг за другом. Создайте файл bash со следующим сценарием, чтобы показать использование конкатенации строк. Две строковые переменные инициализируются и печатаются после объединения переменных. Здесь содержание $ string1 а также $ string2 будут объединены и напечатаны.

concat.sh

#! / bin / bash

# Инициализировать первую строковую переменную
строка1знак равно'Мне нравится '
# Инициализировать вторую строковую переменную
строка2знак равно'Программирование на Bash'
# Печать после объединения обеих строк
выбросил '$ string1$ string2'

Выход:

Запускаем скрипт.

$трепатьconcat.sh

Следующий вывод появится после запуска скрипта.

Вы можете узнать больше о конкатенации строк из этого руководства.

Вверх

Сравнение строки

Bash использует разные типы операторов для сравнения строковых данных. Создайте файл bash со следующим сценарием, чтобы показать, как сравнивать данные двух строк. В качестве входных данных в скрипте используется строковое значение, которое сравнивается с другой строкой. Если значение совпадает, то сообщение, Тебе нравится Python будет напечатано иначе Вам нравится PERL будут напечатаны.

compare.sh

#! / bin / bash
выбросилВведите любое строковое значение
читатьтекст

# Проверить, что входные данные эквивалентны Python
если [ $ text=='Python' ];тогда
выбросил «Тебе нравится Python».
еще
выбросил 'Тебе нравится PERL'
быть

Выход:

Запускаем скрипт.

$трепатьcompare.sh

Следующий вывод появится после запуска скрипта, где входным значением является «PERL».

Вы можете узнать больше о сравнении строк из этот учебник .

Разделение строки

Bash не имеет встроенной функции разделения для разделения строковых данных. Строковые данные в bash можно разделить несколькими способами на основе разных типов разделителей. Создайте файл bash с помощью следующего сценария, чтобы показать, как строковые данные можно разделить на bash. В качестве входных данных используется строковое значение. Этот скрипт разделит значение $ text исходя из космоса. Здесь IFS переменная используется для установки разделителя. `читать` Команда используется здесь для разделения текстового значения и сохранения значений в массиве. для цикл используется для перебора массива и печати значения каждого элемента.

split.sh

#! / bin / bash
# Ввести строковое значение
выбросилВведите строковое значение
читатьтекст
# Установить разделитель
IFSзнак равно''
# Разделить значение $ text в массив на основе разделителя пробелов
читать обр<<< '$ text'
# Распечатать каждое значение массива
дляценитьв '$ {arr [@]}';
делать
printf '$ значение п'
сделано

Выход:

Запускаем скрипт.

$трепатьsplit.sh

Следующий вывод появится после ввода ввода, Изучите программирование на Bash . Это входное значение представляет собой текст из трех слов. Итак, струна разделена на три части.

Вы можете узнать больше о сравнении строк из этот учебник .

Изменение регистра строки

Большинство языков сценариев имеют встроенные функции для изменения регистра строковых данных. Но регистр строковых данных можно изменить в bash, используя `tr` команда или с помощью ‘: Верхний’ а также ':ниже' ключевые слова. Создайте файл bash со следующим сценарием, чтобы узнать, как изменить регистр в bash. Здесь первые строковые данные преобразуются в верхний регистр с помощью ‘^^’ символ, а вторая строка преобразуется в нижний регистр с помощью `tr` команда. `tr` Команда выполнит поиск всех заглавных букв в строке и преобразует символы в строчные.

case.sh

#! / bin / bash

# Инициализировать первую строку данных
текст 1знак равно'[электронная почта защищена]'

# Распечатать значение $ text1, переведя все символы в верхний регистр
выбросил $ {email ^^}

# Инициализировать данные второй строки
text2= ’Основы программирования на Bash’

# Распечатать значение $ text2 путем преобразования всего верхнего регистра в нижний регистр
выбросил $ text2 | NS [: верх:] [:ниже:]

Выход:

Запускаем скрипт.

$трепатьcase.sh

Следующий вывод появится после запуска скрипта.

Вы можете узнать больше о сравнении строк из этот учебник .

Вверх

Чтение строковых данных через цикл

Строковые данные работают как массив символов для любого языка программирования. Как ' для В этом разделе показан цикл ’, который можно использовать для чтения строковых данных в bash. Создайте базовый файл со следующим сценарием для чтения каждой части строкового значения с помощью цикла for.

readstr.sh

#! / bin / bas
# Прочитать каждое слово текста с помощью цикла for
дляценитьвПрограммирование на Bashдляновички
делать
выбросил $ значение
сделано

Выход:

Запускаем скрипт.

$трепатьreadstr.sh

Следующий вывод появится после запуска скрипта.

Вы можете узнать больше об итерации строковых данных, используя цикл из этот учебник .

Вверх

Возврат кодов возврата из сценария и перехват в другом сценарии

Один сценарий bash может перехватывать коды возврата из другого сценария, вызывая сценарий и используя ‘$?’ чтобы прочитать возвращаемое значение. Предположим, файл bash с именем first.sh возвращает код после выполнения. Создайте еще один файл bash с именем second.sh и добавьте следующий сценарий, чтобы получить возвращаемое значение и выполнить некоторые другие задачи. Код обоих файлов приведен ниже. first.sh файл будет вызываться из second.sh файл в начале скрипта. first.sh вернет код выхода на основе входного значения. second.sh поймает код ‘$?’ и сравните с 1. Если оба значения равны, будет напечатано Входное число больше 100 , иначе он напечатает, Введенное число меньше или равно 100 .

first.sh

#! / bin / bash

выбросил 'Введите числовое значение'
читатьп

# Проверяем, что введенное значение меньше или равно 100 или нет
если [[ $ n - 100 ]]
тогда
выход 0
еще
выход 1
быть

second.sh

#! / bin / bash

# Выполнить файл first.sh
трепать 'first.sh'

# Убедитесь, что код возврата равен 1 или нет
если [ $? -экв 1 ]
тогда
выбросил 'Введенное число больше 100'
еще
выбросил 'Введенное число меньше или равно 100'
быть

Выход:

Запускаем скрипт.

$трепатьsecond.sh

Следующий вывод появится, когда скрипт будет выполнен 55 и 110 дважды.

Вверх

Чтение и запись в файлы

Чтение и запись файлов - общие требования программирования на bash. Bash не имеет встроенной функции, как другой язык, для чтения или записи файла. Есть несколько способов прочитать файл в bash. Самый распространенный способ чтения или записи файла в bash - использовать `кошка` команда. Но эта команда используется для чтения всего содержимого файла за раз. Вы также можете читать любой файл построчно, используя любой цикл и `читать` команда. Используя оператор перенаправления, ‘>’ , вы можете записывать данные в любой файл в bash. Если вы хотите добавить данные в любой файл, вам нужно использовать '>>' оператор. Операции чтения и записи файлов показаны в следующей части этого раздела.

Чтение файла в bash

Создайте файл bash со следующим сценарием, чтобы прочитать существующий файл с именем ‘ hardware.txt '. Содержание этого файла приведено ниже. В скрипте все содержимое файла читается `кошка` сначала и затем команду, в то время как цикл используется для чтения файла построчно.

hardware.txt

Монитор
Клавиатура
Мышь
Сканер
Принтер

readfile.sh

#! / bin / bash

выбросил 'Чтение файла с помощью команды cat'

# Прочитать содержимое файла с помощью команды `cat`
содержаниезнак равно``Котhardware.txt``
выбросил $ content

выбросил 'Построчное чтение файла с использованием цикла'

# Назначить имя файла
имя файлазнак равно'hardware.txt'

# Каждая строка файла будет прочитана каждой итерацией цикла
в то время как читатьлиния;
делать
# распечатать строку
выбросил $ линия
сделано<$ filename

Выход:

Выполните следующие команды.

$Котhardware.txt
$трепатьreadfile.sh

Здесь первая команда распечатает содержимое файла, hardware.txt без запуска сценария bash, а вторая команда запустит сценарий readfile.sh и распечатайте содержимое файла два раза, используя `кошка` команда и `читать` команда с циклом while. Вы можете посетить это руководство чтобы узнать больше о чтении файла построчно.

Запись файла в bash

Создайте файл bash со следующим сценарием, чтобы записать новое содержимое в новый файл и добавить данные в этот файл.

writefile.sh

#! / bin / bash

выбросил 'Введите текст'
# Читать строковые данные
читатьstr1
# Добавляем входные данные в файл впервые
выбросил $ str1 >test.txt

выбросил 'Введите другой текст'
# Прочитать другую строку данных
читатьул2
# Добавить входные данные в конец файла
выбросил $ str2 >>test.txt

# Показать полное содержание файла
выбросил ``Котtest.txt``

Выход:

Запускаем скрипт.

$трепатьwritefile.sh

Следующий вывод появится после запуска скрипта.

Вверх

Трубы

Канал используется для перенаправления любого вывода команды на другой ввод команды. Его можно использовать среди различных типов команд bash для генерации определенного вывода. Стандартный ввод соединен со стандартным выводом в Linux конвейером. Вам нужно установить команду в последовательности с вертикальной чертой (|), чтобы получить желаемый результат. Две или более команд могут быть выполнены вместе в одной команде с помощью конвейера. Вы должны выполнить несколько команд в нескольких строках без конвейера, чтобы выполнить одну и ту же задачу. Таким образом, использование канала очень полезно для выполнения многих типов задач в краткой форме.

синтаксис:

command1|command2|...

Здесь вывод command1 будет передан как ввод command2.

Тот же тип задачи выполняется с конвейером и без трубы в следующей части этого раздела. Предположим, текстовый файл с именем marks.txt дается со следующими данными.

marks.txt

Asraf CSE-409 79

Кабир CSE-304 95

Кея CSE-101 67

Asraf CSE-304 88

Кея CSE-409 90

Asraf CSE-101 92

Вы должны отсортировать данные файла, найти и распечатать все записи имени студента ‘K Ага ' . Вы можете выполнить эту задачу, выполнив несколько команд без использования канала, который показан в следующем разделе. Чтобы получить желаемый результат, необходимо выполнить следующие команды. Первая команда отсортирует файл. Вторая команда выполнит поиск записи «K» Ага ' используя ` рукоятка `команду и сохраните вывод в temp.txt файл. Третья команда подсчитает общее количество строк temp.txt файл с помощью `туалет` команда.

$Сортироватьmarks.txt
$рукоятка 'Кея'marks.txt>temp.txt
$Туалет -temp.txt

Выход:

В файле есть две записи об ученике «Кея». Итак, после выполнения вышеуказанных команд появится следующий вывод.

Вы можете легко объединить три вышеуказанные команды и получить тот же результат, запустив одну команду с конвейером, который показан в следующей команде. Для вывода вывода здесь не требуется временный файл. Здесь вывод команды ` Сортировать `команда будет передана как ввод` рукоятка `команда и вывод` рукоятка `команда будет передана как ввод для `туалет` команда.

$Сортироватьmarks.txt| рукоятка 'Кея' | Туалет -

Выход:

После выполнения вышеуказанной команды вы получите следующий вывод, аналогичный выводу предыдущей команды. Результатом команды будет 2.

Вверх

Заключение:

В этом руководстве мы постараемся охватить самые полезные и необходимые темы языка сценариев bash. Надеюсь, читатель получит пользу после прочтения этого руководства и сможет более эффективно писать скрипт bash.