Содержание

Переменные

Считывание и настройка переменных оболочки и окружения в Linux Переменные окружения в Linux

  1. При присвоении переменных не должно быть пробелов между знаком = и значениями
  2. Имена переменных регистрозависимые
  3. Переменные в системе берутся из login shell / nologin shell, и других скриптов, запускаемых при запуске.
  4. sshd/login(root) ⟶ Польз.сессия:bash(tux) - loginShell(/etc/profile; ~/.profile + /etc/bash.bashrc; ~/.bashrc)
  5. 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 определяются для конкретного пользователя и загружаются каждый раз, когда он входит в систему при помощи локального терминала или же подключается удаленно. Такие переменные, как правило, хранятся в файлах конфигурации:

Системные переменные окружения

Эти переменные доступны во всей системе для всех пользователей. Они загружаются при старте системы из системных файлов конфигурации:

По сути, эти файлы являются своего рода скриптами (наборами команд), которые задают переменные окружения. Присваивание значения переменной в 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 Document and Here String

«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