Переменные
Считывание и настройка переменных оболочки и окружения в Linux Переменные окружения в Linux
- При присвоении переменных не должно быть пробелов между знаком = и значениями
- Имена переменных регистрозависимые
- Переменные в системе берутся из login shell / nologin shell, и других скриптов, запускаемых при запуске.
- sshd/login(root) ⟶ Польз.сессия:bash(tux) - loginShell(/etc/profile; ~/.profile + /etc/bash.bashrc; ~/.bashrc)
- fly-dm(root) ⟶ Польз.сессия:fly-wm(tux)/(/etc/profile; ~/.profile) ⟶ fly-term ⟶ bash - nonLoginShell(/etc/bash.bashrc; ~/.bashrc)
myvar=12 #правильно myvar = 12 #не правильно
Команда | Описание |
---|---|
env | Посмотреть глобальные переменные |
env VAR1="value" command_to_run command_options | Запустить команду с заданной переменной VAR1 |
printenv | Посмотреть глобальные переменные |
printenv SHELL | Посмотреть переменную по имени |
export | Просмотр глобальных переменных |
echo $MyVar | Посмотреть переменную $MyVar |
set | Посмотреть все переменные |
set | less | Посмотреть все переменные |
set | grep myvar | Посмотреть переменную myvar |
unset VAR1 или VAR1=пустое значение | Удаление переменной VAR1 |
export NAME=VALUE | Создание переменной окружения NAME |
LANG=fa__IR.UTF-8 TMOUT=10 cal | Переменную можно указать перед запуском команды |
source var | Загрузить переменные из файла var, где они описаны, как a=test и т.д. |
Aaa=333 echo $Aaab #ничего не выведет echo ${Aaa}b #выведет 333b echo ddd$Aaa #выведет ddd333
Пробелы можно экранировать
A="New File" #Норм A=New\ File #Норм A=New File #Bash подумает, что запускается команда File, а перед ней присваивается переменая A=New
Сохранить в переменную значение команды
t=`date` echo $t Sun Sep 6 17:24:33 MSK 2020
` - это не одиночная кавычка, а backtick.
или
t=$(date) echo $t Sun Sep 6 17:24:33 MSK 2020
Локальные переменные
Эти переменные определены только для текущей сессии. Они будут безвозвратно стерты после завершения сессии, будь то удаленный доступ или эмулятор терминала. Они не хранятся ни в каких файлах, а создаются и удаляются с помощью специальных команд
Пользовательские переменные оболочки
Эти переменные оболочки в Linux определяются для конкретного пользователя и загружаются каждый раз, когда он входит в систему при помощи локального терминала или же подключается удаленно. Такие переменные, как правило, хранятся в файлах конфигурации:
- .bashrc
- .bash_profile
- .bash_login
- .profile
- или в других файлах, размещенных в директории пользователя.
Системные переменные окружения
Эти переменные доступны во всей системе для всех пользователей. Они загружаются при старте системы из системных файлов конфигурации:
- /etc/environment
- /etc/profile
- /etc/profile.d/
- /etc/bash.bashrc
По сути, эти файлы являются своего рода скриптами (наборами команд), которые задают переменные окружения. Присваивание значения переменной в bash выглядит так:
переменная=значение (без пробела перед и после знака равно).
Вывод значения переменной мы можем сделать с помощью команды echo (как мы это уже делали)
echo $переменная
Когда мы обращаемся к значению переменной, перед ее именем нужно ставить символ $.
Переменная | Описание |
---|---|
!! | Последняя команда, вся введённая строка, допустим забыли написать sudo, тогда можно набрать sudo !! |
!$ | Это последний токен/параметр команды, например mkdir /tmp/test и чтобы перейти в эту папку можно написать cd !$ |
$DIRSTACK | содержимое вершины стека каталогов |
$EDITOR | текстовый редактор по умолчанию |
$EUID | Эффективный UID. Если вы использовали программу su для выполнения команд от другого пользователя, то эта переменная содержит UID этого пользователя, в то время как… |
$UID | ..содержит реальный идентификатор, который устанавливается только при логине. |
$FUNCNAME | |
$GROUPS | массив групп к которым принадлежит текущий пользователь |
$HOME | домашний каталог пользователя |
$HOSTNAME | ваш hostname |
$HOSTTYPE | архитектура машины. |
$LC_CTYPE | внутренняя переменная, котороя определяет кодировку символов |
$OLDPWD | прежний рабочий каталог |
$OSTYPE | тип ОС |
$PATH | путь поиска программ |
$PPID | идентификатор родительского процесса |
$SECONDS | время работы скрипта(в сек.) |
$# | общее количество параметров переданных скрипту |
$* | все аргументы переданыне скрипту(выводятся в строку) |
$@ | тоже самое, что и предыдущий, но параметры выводятся в столбик |
$! | PID последнего запущенного в фоне процесса |
$$ | PID самого скрипта |
Here Documents
«Here Documents» называется (в «man bash»). Выведет на экран три строки
#!/bin/bash cat <<EOF This is line1 Another line Finally 3rd line EOF
Если строки с табами, то "-" позволит их убрать, если написать "«-":
cat <<-EOF This message is indented This message is double indented EOF
Присвоение переменной
#!/bin/bash # This is a simple script that uses a here document # with the `cat` command to create a multi-line message message=$(cat << EOF Hello there! This is a multi-line message created using a here document. EOF ) echo "$message"
Можно использовать переменные или команды
cat <<EOF Hello! It is currently: $(date) Hello ${USER} Some Special Characters: \$ \\ \` : <<'DISABLED' echo "This line will not show up in the console. echo "Neither will this line. DISABLED echo "This line will be printed to the console EOF