Bash учебник
Начало работы с Bash
Поиск…
Версии
| Версия | Дата выхода |
|---|---|
| 0,99 | 1989-06-08 |
| 1,01 | 1989-06-23 |
| 2,0 | 1996-12-31 |
| 2,02 | 1998-04-20 |
| 2,03 | 1999-02-19 |
| 2,04 | 2001-03-21 |
| 2.05b | 2002-07-17 |
| 3.0 | 2004-08-03 |
| 3,1 | 2005-12-08 |
| 3,2 | 2006-10-11 |
| 4,0 | 2009-02-20 |
| 4,1 | 2009-12-31 |
| 4,2 | 2011-02-13 |
| 4,3 | 2014-02-26 |
| 4,4 | 2016-09-15 |
Привет, мир, используя переменные
Создайте новый файл hello.sh со следующим содержимым и дайте ему исполняемые разрешения с помощью chmod +x hello.sh .
Выполнить /
./hello.shчерез:./hello.sh
#!/usr/bin/env bash
# Note that spaces cannot be used around the `=` assignment operator
whom_variable="World"
# Use printf to safely output the data
printf "Hello, %s\n" "$whom_variable"
#> Hello, World
Это приведет к печати Hello, World до стандартного вывода при его выполнении.
Чтобы сообщить bash, где сценарий вам нужен, нужно указать его в содержащую директорию, обычно с ./ если это ваш рабочий каталог, где . является псевдонимом текущего каталога. Если вы не укажете каталог, bash попытается найти скрипт в одном из каталогов, содержащихся в $PATH среды $PATH .
Следующий код принимает аргумент $1 , который является первым аргументом командной строки, и выводит его в отформатированной строке, следующей за Hello, .
Выполнение / выполнение через:
./hello.sh World
#!/usr/bin/env bash
printf "Hello, %s\n" "$1"
#> Hello, World
Важно отметить, что $1 должен быть указан в двойной кавычки, а не одинарной кавычки. "$1" по желанию расшифровывается до первого аргумента командной строки, а '$1' вычисляется до литеральной строки $1 .
Примечание по безопасности:
Прочтите последствия для безопасности, забывая процитировать переменную в оболочках bash, чтобы понять важность размещения текста переменной в двойных кавычках.
Привет, мир
Интерактивная оболочка
Оболочка Bash обычно используется в интерактивном режиме: она позволяет вводить и редактировать команды, а затем выполняет их при нажатии клавиши Return . Многие Unix-подобные и Unix-подобные операционные системы используют Bash в качестве своей оболочки по умолчанию (особенно Linux и macOS). Терминал автоматически запускает интерактивный процесс оболочки Bash при запуске.
Выведите Hello World , введя следующее:
echo "Hello World"
#> Hello World # Output Example
Заметки
Вы можете изменить оболочку, просто набрав имя оболочки в терминале. Например:
sh,bashи т. Д.echo- это встроенная команда Bash, которая записывает полученные аргументы в стандартный вывод. По умолчанию он добавляет новую строку к выводу.
Неинтерактивная оболочка
Оболочка Bash также может быть запущена неинтерактивно из сценария, в результате чего оболочка не требует взаимодействия с человеком. Интерактивное поведение и сценарий поведения должны быть одинаковыми - важное рассмотрение дизайна оболочки Unix V7 Bourne и транзитно Bash. Поэтому все, что можно сделать в командной строке, можно поместить в файл сценария для повторного использования.
Выполните следующие шаги, чтобы создать сценарий Hello World :
Создайте новый файл
hello-world.shtouch hello-world.shСделайте исполняемый файл скрипта, запустив
chmod+x hello-world.shДобавьте этот код:
#!/bin/bash echo "Hello World"Строка 1 : первая строка скрипта должна начинаться с символьной последовательности
#!, называемый shebang 1 . Shebang поручает операционной системе запустить/bin/bash, оболочку Bash, передав ей путь сценария в качестве аргумента.Eg
/bin/bash hello-world.shСтрока 2 : используется команда
echoдля записиHello Worldна стандартный вывод.
Выполните скрипт
hello-world.shиз командной строки, используя одно из следующих:-
./hello-world.sh- наиболее часто используемые и рекомендуемые -
/bin/bash hello-world.sh -
bash hello-world.sh- предполагая, что/binнаходится в вашей$PATH -
sh hello-world.sh
-
Для реального использования в производстве вы бы .sh расширение .sh (что вводит в заблуждение в любом случае, поскольку это скрипт Bash, а не сценарий sh ) и, возможно, переместите файл в каталог в вашей PATH чтобы он был доступен вам независимо от того, ваш текущий рабочий каталог, как и системная команда, например cat или ls .
К числу распространенных ошибок относятся:
Забыв применить к файлу разрешение на выполнение, то есть
chmod +x hello-world.sh, в результате./hello-world.sh: Permission deniedвыход./hello-world.sh: Permission denied.Редактирование сценария в Windows, который создает неправильные символы окончания строки, которые Bash не может обрабатывать.
Общим симптомом является
: command not foundгде возврат каретки заставил курсор к началу строки, переписав текст перед двоеточием в сообщении об ошибке.Сценарий можно исправить с
dos2unixпрограммыdos2unix.Пример использования:
dos2unix hello-world.shdos2unixредактирует файл inline.Используя
sh ./hello-world.sh, не понимая, чтоbashиshпредставляют собой отдельные оболочки с различными функциями (хотя, поскольку Bash совместим с обратной связью, противоположная ошибка безвредна).Во всяком случае, просто полагаясь на строку shebang скрипта, гораздо предпочтительнее явно писать
bashилиsh(илиpythonилиperlилиawkилиrubyили ...) перед именем файла каждого скрипта.Обычная строка shebang, используемая для того, чтобы сделать ваш скрипт более переносимым, заключается в использовании
#!/usr/bin/env bashвместо жесткого кодирования пути к Bash. Таким образом,/usr/bin/envдолжен существовать, но помимо этого,bashпросто должен быть на вашемPATH. На многих системах/bin/bashне существует, и вы должны использовать/usr/local/bin/bashили какой-либо другой абсолютный путь; это изменение позволяет избежать необходимости выяснять детали этого.
1 Также упоминается как sha-bang, hashbang, pound-bang, hash-pling.
Просмотр информации для встроенных модулей Bash
help <command>
Это отобразит страницу справки Bash (ручная) для указанного встроенного устройства.
Например, help unset покажет:
unset: unset [-f] [-v] [-n] [name ...] Unset values and attributes of shell variables and functions. For each NAME, remove the corresponding variable or function. Options: -f treat each NAME as a shell function -v treat each NAME as a shell variable -n treat each NAME as a name reference and unset the variable itself rather than the variable it references Without options, unset first tries to unset a variable, and if that fails, tries to unset a function. Some variables cannot be unset; also see `readonly'. Exit Status: Returns success unless an invalid option is given or a NAME is read-only.
Чтобы просмотреть список всех встроенных модулей с кратким описанием, используйте
help -d
Hello World с пользовательским вводом
Следующее предложит пользователю ввести, а затем сохранит этот ввод в виде строки (текста) в переменной. Затем переменная используется для предоставления пользователю сообщения.
#!/usr/bin/env bash
echo "Who are you?"
read name
echo "Hello, $name."
Команда read здесь читает одну строки данных из стандартного ввода в переменное name . Затем это делается с помощью $name и печатается по стандарту, используя echo .
Пример вывода:
$ ./hello_world.sh
Who are you?
Matt
Hello, Matt.
Здесь пользователь ввел имя «Мэтт», и этот код использовался, чтобы сказать « Hello, Matt. ,
И если вы хотите добавить что-то к значению переменной во время его печати, используйте фигурные скобки вокруг имени переменной, как показано в следующем примере:
#!/usr/bin/env bash
echo "What are you doing?"
read action
echo "You are ${action}ing."
Пример вывода:
$ ./hello_world.sh
What are you doing?
Sleep
You are Sleeping.
Здесь, когда пользователь вводит действие, во время печати к этому действию добавляется «ing».
Обработка именованных аргументов
#!/bin/bash
deploy=false
uglify=false
while (( $# > 1 )); do case $1 in
--deploy) deploy="$2";;
--uglify) uglify="$2";;
*) break;
esac; shift 2
done
$deploy && echo "will deploy... deploy = $deploy"
$uglify && echo "will uglify... uglify = $uglify"
# how to run
# chmod +x script.sh
# ./script.sh --deploy true --uglify false
Hello World в режиме «Отладка»
$ cat hello.sh
#!/bin/bash
echo "Hello World"
$ bash -x hello.sh
+ echo Hello World
Hello World
Аргумент -x позволяет вам пройти через каждую строку в скрипте. Один хороший пример:
$ cat hello.sh
#!/bin/bash
echo "Hello World\n"
adding_string_to_number="s"
v=$(expr 5 + $adding_string_to_number)
$ ./hello.sh
Hello World
expr: non-integer argument
Вышеприведенная ошибка не достаточна для отслеживания сценария; однако, используя следующий способ, вы можете лучше понять, где искать ошибку в скрипте.
$ bash -x hello.sh
+ echo Hello World\n
Hello World
+ adding_string_to_number=s
+ expr 5 + s
expr: non-integer argument
+ v=
Важность цитаты в строках
Цитирование важно для расширения строки в bash. С их помощью вы можете контролировать, как bash анализирует и расширяет ваши строки.
Существует два типа цитирования:
- Слабый : использует двойные кавычки:
- Сильный : использует одинарные кавычки:
Если вы хотите использовать bash, чтобы расширить свой аргумент, вы можете использовать Weak Quoting :
#!/usr/bin/env bash
world="World"
echo "Hello $world"
#> Hello World
Если вы не хотите использовать bash для расширения своего аргумента, вы можете использовать Strong Quoting :
#!/usr/bin/env bash
world="World"
echo 'Hello $world'
#> Hello $world
Вы также можете использовать escape для предотвращения расширения:
#!/usr/bin/env bash
world="World"
echo "Hello \$world"
#> Hello $world
Для получения более подробной информации, кроме деталей новичка, вы можете продолжить читать ее здесь .