English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Определение переменных, имена переменных не должны содержать символ доллара ($, переменные в языке PHP требуют этого), например:
your_name="oldtoolbag.com"
Обратите внимание, что между именем переменной и знаком равенства не должно быть пробелов, это может отличаться от всех языков программирования, которые вы знаете. При命名 переменных следует руководствоваться следующими правилами:
Имя может состоять только из латинских букв, цифр и подчеркивания, первый символ не может начинаться с цифры.
Запрещено использовать пробелы в середине, можно использовать символ подчеркивания (_).
Запрещено использовать знаки препинания.
Запрещено использовать ключевые слова bash (можно проверить помощью команды help, чтобы увидеть сохранённые ключевые слова).
Примеры правильных имён переменных Shell приведены ниже:
w3codebox LD_LIBRARY_PATH _var var2
Неправильное имя переменной:
?var=123 user*name=w3codebox
Кроме явного прямого присвоения, можно присвоить переменной значение с помощью строки, например:
for file in `ls /etc`; do или for file in $(ls /etc); do
Данные строки будут циклически выводить имена файлов в каталоге /etc.
Использование определенной переменной возможно, достаточно добавить символ доллара перед именем переменной, например:
your_name="qinjx" echo $your_name echo ${your_name}
Фигурные скобки вне переменной являются необязательными, можно и без них, добавление фигурных скобок помогает интерпретатору определить границы переменной, например в следующем случае:
for skill in Ada Coffee Action Java; do echo "I am good at ${skill}Script" done
Если не добавить фигурные скобки к переменной skill, написать echo "I am good at $skillScript", интерпретатор будет считать $skillScript переменной (ее значение будет пустым), результат выполнения кода не будет соответствовать нашим ожиданиям.
Рекомендуется добавлять фигурные скобки ко всем переменным, это guter программистский习惯了.
Определенные переменные могут быть заново определены, например:
your_name="tom" echo $your_name your_name="alibaba" echo $your_name
Так пишется законно, но обратите внимание, что при повторном присвоении не пишите $your_name="alibaba", добавляйте символ доллара ($) только при использовании переменной.
Использование команды readonly позволяет определить переменную как только чтение, значение только чтения переменной не может быть изменено.
Ниже приведен пример попытки изменить только чтение переменной, результат будет ошибкой:
#!/bin/bash myUrl="https://www.google.com" readonly myUrl myUrl="https://ru.oldtoolbag.com"
Запуск скрипта, результат如下:}
/bin/sh: NAME: Эта переменная только для чтения.
Использование команды unset можно удалить переменные. Грамматика:
unset variable_name
После удаления переменной она не может быть использована повторно. Команда unset не может удалить только чтение переменных.
Пример
#!/bin/sh myUrl="https://ru.oldtoolbag.com" unset myUrl echo $myUrl
Исполнение вышеуказанного примера не выведет ничего.
Когда запускается shell, существуют три типа переменных:
1) Локальные переменныеЛокальные переменные определяются в скрипте или команде и действуют только в текущем примере shell, другие программы, запущенные shell, не могут обращаться к локальным переменным.
2) Переменные окруженияВсе программы, включая программы, запущенные shell, могут обращаться к переменным окружения, некоторые программы требуют переменных окружения для обеспечения их нормальной работы. В случае необходимости shell-скрипт также может определить переменные окружения.
3) Shell-переменныеShell-переменные - это особые переменные, установленные shell-программой. В shell-переменных есть часть переменных окружения и часть локальных переменных, которые обеспечивают нормальное функционирование shell
Строки - это один из самых常用ных и полезных типов данных в программировании на shell (кроме чисел и строк, больше нет других типов, которые можно использовать), строки могут быть заключены в одинарные, двойные кавычки, или вообще без них.
str='this is a string'
Ограничения одинарных строк:
Любой символ в одинарных кавычках выводится в том виде, в каком он есть, переменные в одинарных строках не действительны;
В строке с одинарными кавычками не может быть одного одинарного кавычка (даже если он экранируется управляющим символом), но они могут出现在 паре, чтобы использоваться для склеивания строк.
your_name='w3codebox' str="Hello, Я знаю, что вы являетесь \ echo -e $str
Результат вывода:
Hello, Я знаю, что вы являетесь "w3codebox"!
Преимущества двойных кавычек:
В двойных кавычках могут быть переменные
В двойных кавычках могут присутствовать управляющие символы
your_name="w3codebox" # Использование двойных кавычек для склеивания greeting="hello, "$your_name" !" greeting_1="hello, ${your_name} !" echo $greeting $greeting_1 # Использование одинарных кавычек для склеивания greeting_2='hello, '${your_name}' !' greeting_3='hello, ${your_name} !' echo $greeting_2 $greeting_3
Результат вывода:
hello, w3codebox ! hello, w3codebox ! hello, w3codebox ! hello, ${your_name} !
string="abcd" echo ${#string} # Вывод 4
Следующий пример извлекает подстроку из строки с 2 -liter начинать вырезать 4 -liter:
string="w3codebox is a great site" echo ${string:1:4} # Вывод unoo
Внимание:Индекс первой литера - 0.
Искать символ i или o Позиция (которая литера появляется первой):
string="w3codebox is a great site" echo `expr index "$string" io` # Вывод 4
Внимание: В данном скрипте ` является обратной кавычкой, а не простым кавычкой ' - не путайте.
Bash поддерживает одномерные массивы (не поддерживает многоомерные массивы) и не ограничивает размер массива.
Как и в языке C, индексы элементов массива начинаются с 0. Для получения элементов массива необходимо использовать индексы, которые могут быть целыми числами или арифметическими выражениями, значение которых должно быть больше или равно 0.
В Shell массивы представляют собой скобки, а элементы массива разделены символом "пробел". Общий формат определения массива:
Имя массива=(значение1 значение2 ... значениеn)
Например:
array_name=(value0 value1 value2 value3)
или
array_name=( value0 value1 value2 value3 )
Можно также отдельно определить компоненты массива:
array_name[0]=value0 array_name[1]=value1 array_name[n]=valuen
Необязательно использовать последовательные индексы, и диапазон индексов не ограничен.
Общий формат чтения значения элемента массива:
${массив_имя[индекс]}
Например:
valuen=${array_name[n]}
Использование знака @ позволяет получить все элементы массива, например:
echo ${array_name[@]}
Метод получения длины массива аналогичен методу получения длины строки, например:
# Получить количество элементов массива length=${#array_name[@]} # Или length=${#array_name[*]} # Получить длину отдельного элемента массива lengthn=${#array_name[n]}
Строки, начинающиеся с #, являются комментариями и будут ignorироваться интерпретатором.
Добавить каждый символ # в каждую строку # Установить многострочный комментарий, например:
#-------------------------------------------- # Это комментарий # author: Основной учебник # site: ru.oldtoolbag.com # slogan: Изучите основы, чтобы идти дальше! #-------------------------------------------- ##### Начало области конфигурации пользователя ##### # # # Здесь можно добавить информацию о скрипте # # ##### Конец области конфигурации пользователя #####
Если во время разработки встречается большое количество кода, который нужно временно comentar, а затем отменить comentar, что делать?
Добавление каждого символа # в каждую строку слишком утомительно, можно обернуть этот фрагмент кода в фигурные скобки, чтобы определить его как функцию, которая нигде не вызывается, и код не будет выполняться, что достигает эффекта комментирования.
Многострочный комментарий также можно использовать в следующем формате:
:<<EOF Комментарий... Комментарий... Комментарий... EOF
EOF также можно использовать другие символы:
:<<' Комментарий... Комментарий... Комментарий... ' :<<! Комментарий... Комментарий... Комментарий... !