Поиск…


Версии

Версия Дата выхода
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 :

  1. Создайте новый файл hello-world.sh

    touch hello-world.sh
    
  2. Сделайте исполняемый файл скрипта, запустив chmod +x hello-world.sh

  3. Добавьте этот код:

    #!/bin/bash
    echo "Hello World"
    

    Строка 1 : первая строка скрипта должна начинаться с символьной последовательности #! , называемый shebang 1 . Shebang поручает операционной системе запустить /bin/bash , оболочку Bash, передав ей путь сценария в качестве аргумента.

    Eg /bin/bash hello-world.sh

    Строка 2 : используется команда echo для записи Hello World на стандартный вывод.

  1. Выполните скрипт 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 .

К числу распространенных ошибок относятся:

  1. Забыв применить к файлу разрешение на выполнение, то есть chmod +x hello-world.sh , в результате ./hello-world.sh: Permission denied выход ./hello-world.sh: Permission denied .

  2. Редактирование сценария в Windows, который создает неправильные символы окончания строки, которые Bash не может обрабатывать.

    Общим симптомом является : command not found где возврат каретки заставил курсор к началу строки, переписав текст перед двоеточием в сообщении об ошибке.

    Сценарий можно исправить с dos2unix программы dos2unix .

    Пример использования: dos2unix hello-world.sh

    dos2unix редактирует файл inline.

  3. Используя 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

Для получения более подробной информации, кроме деталей новичка, вы можете продолжить читать ее здесь .



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow