Главные темы ► linux ► shell ► variable ► Переменные в Linux
Теги: shell

Переменные в Linux

Вывод переменных в Linux, использование кавычек при выводе переменных в Linux, позиционные параметры в Linux, переменные окружения в Linux

    Переменные

    ~$ variable=12 #Имя переменной ~$ echo $variable #Ссылка на переменную 12 ~$ echo "Мне $variable лет" #Упрощенная форма ${variable} Мне 12 лет ~$ echo "Мне ${variable} лет" #Строгая форма Мне 12 лет #Присваивание результата выполнения команды в переменную $a=`ls -l` #Более современный метод присваивания a=$(ls -l)
    Использование кавычек при выводе переменных

    Заключение ссылки на переменную в кавычки сохраняет пробельные символы
    Если в значениях переменных встречаются пробелы,то использование кавычек обязательно

    ~$ hello="A B C D" ~$ echo $hello A B C D ~$ echo "$hello" A B C D #Вывод значения переменной в одинарных кавычках ~$ echo '$hello' $hello #Другой пример a=`ls -l` echo $a #Все будет в одной строке без пробелов echo "$a" #Вывод будет таким же как если выполнить команду ls -l из командной строке
    Переменные окружения

    При запуске командного интерпретатора, для него и дочерних процессов создаются переменные окружения
    При изменении переменных окружения, их необходимо экспортировать или по другом передать окружению, локальному по отношению к сценарию. Данную функцию выполняет команду export
    Сценарий может экспортировать переменные только дочернему процессу, командам и процессам запускаемых из локального сценария
    Сценарий запускаемый из командной оболочки не может экспортировать данные командной оболочке, по другому дочерний процесс не может экспортировать переменные родительскому процессу

    Позиционные параметры

    Позиционные параметры - это аргументы которые передаются из командной строки в скрипт
    $0, $1, $2 и т.д.
    Аргументы больше $9, должны заключаться в фигурные скобки: ${10}, ${11} и т.д.
    Специальные аргументы: $* И $@ содержат все позиционные параметры

    $# - кол-во аргументов командой строки
    $* - все аргументы в виде одной строки
    $@ - то же самое, что и $*, но при этом каждый параметр представлен как отдельная строка

    #!/bin/bash E_BADARGS=65 if [ ! -n "$1" ] then echo "Порядок использования: command \$arg1 \$arg2 \$arg3" exit "$E_BADARGS" fi echo index=1 echo "Список аргументов в переменной \$*: " for arg in "$*" do echo "Аргумент $index = $arg" let "index+=1" done index=1 echo "Список аргументов в переменной: \$@ " for arg in "$@" do echo "Аргумент $index = $arg" let "index+=1" done ~$ ./test.sh a b c d Список аргументов в переменной $*: Аргумент 1 = a b c d Список аргументов в переменной: $@ Аргумент 1 = a Аргумент 2 = b Аргумент 3 = c Аргумент 4 = d
    Внутренние переменные

    #Путь к исполняемому файлу bash $BASH #Содержимое вершины стека каталогов $DIRSTACK dirs #Заданный по умолчанию редактор $EDITOR #Идентификационный номер пользователя $EUID #Идентификационный номер группы которой принадлежит пользователь $GROUPS #Домашний каталог пользователя $HOME #Сетевое имя хоста устанавливаемое командой hostname $HOSTNAME #Идентифицирует аппаратную архитектуру echo $HOSTTYPE x86_64 echo $MACHTYPE x86_64-pc-linux-gnu #Разделитель полей во вводимой строке, по умолчанию пробел, может быть изменен, например, для разбора строк, в которых отдельные поля разделены запятыми #при составлении содержимого переменной $*, Bash использует первый символ из $IFS для разделения аргументов $IFS bash -c 'set w x y z; IFS=":-;"; echo "$*"' #Тип операционной системы $OSTYPE #Время работы сценария в секундах $SECONDS #Пример echo $SECONDS sleep 3 echo $SECONDS sleep 3 echo $SECONDS #Еще один пример while [ "$SECONDS" -le 10 ] do sleep 1; echo "Сценарий проработал $SECONDS секунд" done #Список допустимых опций интерпретатора SHELL echo $SHELLOPTS braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor
    set

    Команда set изменяет значения внутренних переменных сценария. Она может использоваться для переключения опций ( ключей, флагов ), определяющих поведение скрипта.
    Команда set может также применяться для сброса и установки позиционных параметров, значения которых будут восприняты как результат выполнения команды ( set `command` )
    Вызов set без параметров просто выводит список инициализированных переменных окружения

    set `uname -a` # Изменение аргументов значения которых берутся из результата работы `uname -a` echo "Аргументы после вызова set \`uname -a\` :" # $1, $2, $3 и т.д. будут переустановлены в соответствии с выводом команды `uname -a` echo "Поле #1 'uname -a' = $1" echo "Поле #2 'uname -a' = $2" echo "Поле #3 'uname -a' = $3"

    Если команда set используется с ключом "--", после которого следует переменная, то значение переменной переносится в позиционные параметры (аргументы). Если имя переменной отсутствует, то эта команда приводит к сбросу позиционных параметров

    #!/bin/bash a='один' b='два' c='три' set -- $a $b $c echo "Поле #1 'uname -a' = $1" echo "Поле #2 'uname -a' = $2" echo "Поле #3 'uname -a' = $3"

    Команда unset удаляет переменную, фактически - устанавливает ее значение в null. Обратите внимание: эта команда не может сбрасывать позиционные параметры (аргументы)


    Команда export экспортирует переменную, делая ее доступной дочерним процессам. К сожалению, невозможно экспортировать переменную родительскому процессу
    Допускается объединение инициализации и экспорта переменной в одну инструкцию: export var1=xxx

    declare, typeset, readonly

    readonly то же самое, что и declare -r, делает переменную доступной только для чтения, т.е. переменная становится подобна константе.

    a="test1" b="test2" declare -r a a="test3" -bash: a: переменная только для чтения readonly b b="test3" -bash: b: переменная только для чтения
    Источники
    Последнее изменение: October 6, 2024 22:21


    Редактировать


    test

    2025-12-31 23:09:00 Редактировать

    test

    2025-12-31 23:10:00 Редактировать

    Я буду рекламой
    Я тоже буду рекламой
    И я
    ВВЕРХ
    Loading…
    Loading the web debug toolbar…
    Attempt #