Данные переменные команды программа

Внутри командных файлов можно работать с так называемыми переменными среды (или переменными окружения), каждая из которых хранится в оперативной памяти, имеет свое уникальное имя, а ее значением является строка. Стандартные переменные среды автоматически инициализируются в процессе загрузки операционной системы. Такими переменными являются, например, WINDIR, которая определяет расположение каталога Windows, TEMP, которая определяет путь к каталогу для хранения временных файлов Windows или PATH, в которой хранится системный путь (путь поиска), то есть список каталогов, в которых система должна искать выполняемые файлы или файлы совместного доступа (например, динамические библиотеки). Кроме того, в командных файлах с помощью команды SET можно объявлять собственные переменные среды.

Получение значения переменной

Для получения значения определенной переменной среды нужно имя этой переменной заключить в символы % . Например:

При запуске такого командного файла на экран выведется строка

Переменные и принципы работы с данными в VBA (Серия VBA 3)


Значение переменной MyVar: Привет! Значение переменной WinDir: C:WINDOWS

Преобразования переменных как строк

С переменными среды в командных файлах можно производить некоторые манипуляции. Во-первых, над ними можно производить операцию конкатенации (склеивания).

Для этого нужно в команде SET просто написать рядом значения соединяемых переменных. Например,

SET A=Раз SET B=Два SET C=%A%%B%

После выполнения в файле этих команд значением переменной C будет являться строка ‘РазДва’ . Не следует для конкатенации использовать знак + , так как он будет воспринят просто в качестве символа. Например, после запуска файла следующего содержания

SET A=Раз SET B=Два SET C=A+B ECHO Переменная C=%C% SET D=%A%+%B% ECHO Переменная D=%D%

на экран выведутся две строки:

Переменная C=A+B Переменная D=Раз+Два

Во-вторых, из переменной среды можно выделять подстроки с помощью конструкции %имя_переменной:~n1,n2% , где число n1 определяет смещение (количество пропускаемых символов) от начала (если n1 положительно) или от конца (если n1 отрицательно) соответствующей переменной среды, а число n2 – количество выделяемых символов (если n2 положительно) или количество последних символов в переменной, которые не войдут в выделяемую подстроку (если n2 отрицательно). Если указан только один отрицательный параметр -n , то будут извлечены последние n символов. Например, если в переменной %DATE% хранится строка «21.09.2007» (символьное представление текущая дата при определенных региональных настройках), то после выполнения следующих команд

SET dd1=%DATE:~0,2% SET dd2=%DATE:~0,-8% SET mm=%DATE:~-7,2% SET yyyy=%DATE:~-4%

новые переменные будут иметь такие значения: %dd1%=21, %dd2%=21, %mm%=09, %yyyy%=2007 .

В-третьих, можно выполнять процедуру замены подстрок с помощью конструкции %имя_переменной:s1=s2% (в результате будет возвращена строка, в которой каждое вхождение подстроки s1 в соответствующей переменной среды заменено на s2 ). Например, после выполнения команд

Переменные и типы данных в VBA — Новый курс VBA (3)


SET a=123456 SET b=%a:23=99%

в переменной b будет храниться строка «199456» . Если параметр s2 не указан, то подстрока s1 будет удалена из выводимой строки, т.е. после выполнения команды

SET a=123456 SET b=%a:23=%

в переменной b будет храниться строка «1456» .

Операции с переменными как с числами

При включенной расширенной обработке команд (этот режим в Windows XP используется по умолчанию) имеется возможность рассматривать значения переменных среды как числа и производить с ними арифметические вычисления. Для этого используется команда SET с ключом /A . Приведем пример пакетного файла add.bat, складывающего два числа, заданных в качестве параметров командной строки, и выводящего полученную сумму на экран:

Локальные изменения переменных

Все изменения, производимые с помощью команды SET над переменными среды в командном файле, сохраняются и после завершения работы этого файла, но действуют только внутри текущего командного окна. Также имеется возможность локализовать изменения переменных среды внутри пакетного файла, то есть автоматически восстанавливать значения всех переменных в том виде, в каком они были до начала запуска этого файла.

Для этого используются две команды: SETLOCAL и ENDLOCAL . Команда SETLOCAL определяет начало области локальных установок переменных среды. Другими словами, изменения среды, внесенные после выполнения SETLOCAL , будут являться локальными относительно текущего пакетного файла. Каждая команда SETLOCAL должна иметь соответствующую команду ENDLOCAL для восстановления прежних значений переменных среды. Изменения среды, внесенные после выполнения команды ENDLOCAL , уже не являются локальными относительно текущего пакетного файла; их прежние значения не будут восстановлены по завершении выполнения этого файла.

Связывание времени выполнения для переменных

При работе с составными выражениями (группы команд, заключенных в круглые скобки) нужно учитывать, что переменные среды в командных файлах используются в режиме раннего связывания. С точки зрения логики выполнения командного файла это может привести к ошибкам. Например, рассмотрим командный файл 1.bat со следующим содержимым:

SET a=1 ECHO a=%a% SET a=2 ECHO a=%a%

и командный файл 2.bat:

SET a=1 ECHO a=%a% (SET a=2 ECHO a=%a% )

Казалось бы, результат выполнения этих двух файлов должен быть одинаковым: на экран выведутся две строки: «a=1» и «a=2» . На самом же деле таким образом сработает только файл 1.bat, а файл 2.bat два раза выведет строку «a=1» !

Данную ошибку можно обойти, если для получения значения переменной вместо знаков процента (%) использовать восклицательный знак (!) и предварительно включить режим связывания времени выполнения командой SETLOCAL ENABLEDELAYEDEXPANSION . Таким образом, для корректной работы файл 2.bat должен иметь следующий вид:

Читайте также:
Что означают цифры в целях урока по обновленной программе

SETLOCAL ENABLEDELAYEDEXPANSION SET a=1 ECHO a=%a% (SET a=2 ECHO a=!a! )

Приостановка выполнения командных файлов

Для того, чтобы вручную прервать выполнение запущенного bat-файла, нужно нажать клавиши + или +. Однако часто бывает необходимо программно приостановить выполнение командного файла в определенной строке с выдачей запроса на нажатие любой клавиши. Это делается с помощью команды PAUSE. Перед запуском этой команды полезно с помощью команды ECHO информировать пользователя о действиях, которые он должен произвести. Например:

ECHO Вставьте дискету в дисковод A: и нажмите любую клавишу PAUSE

Команду PAUSE обязательно нужно использовать при выполнении потенциально опасных действий (удаление файлов, форматирование дисков и т.п.). Например,

ECHO Сейчас будут удалены все файлы в C:Мои документы! ECHO Для отмены нажмите Ctrl-C PAUSE DEL «C:Мои документы*.*»

Источник: intuit.ru

Объявление переменных

При объявлении переменных обычно используется оператор Dim. Оператор объявления может быть помещен внутрь процедуры для создания переменной на уровне процедуры. Или он может быть помещен в начале модуля в разделе объявлений, чтобы создать переменную на уровне модуля.

В примере ниже создается переменная и указывается тип данных «String».

Dim strName As String

Если данный оператор отображается в процедуре, переменная strName может использоваться только в этой процедуре. Если же оператор отображается в разделе объявлений модуля, переменная strName доступна для всех процедур данного модуля, но недоступна для процедур других модулей проекта.

Чтобы предоставить доступ к переменной всем процедурам проекта, перед ней нужно поставить оператор Public, как показано в примере ниже:

Public strName As String

Дополнительные сведения об именовании переменных см. в статье Правила именования в Visual Basic.

Переменные могут быть объявлены одним из следующих типов данных: Boolean, Byte, Integer, Long, Currency, Single, Double, Date, String (для строк переменной длины), String * length (для строк фиксированной длины), Object или Variant. Если тип данных не указан, по умолчанию присваивается тип данных Variant. Вы также можете создать определяемый пользователем тип с помощью оператора Type.

Вы можете объявить несколько переменных в одном операторе. Чтобы указать тип данных, необходимо задать тип данных для каждой переменной.

В приведенном ниже операторе переменные intX , intY и intZ объявлены типом Integer.

Dim intX As Integer, intY As Integer, intZ As Integer

В приведенном ниже операторе intX и intY объявлены как Variant и только intZ объявлен как тип Integer.

Dim intX, intY, intZ As Integer

Нет необходимости указывать тип данных переменной в операторе объявления. Если вы не укажите тип данных, переменной будет присвоен тип Variant.

Сокращение для объявления переменных x и y типом Integer в приведенном выше операторе

Dim intX%, intY%, intZ as Integer

Оператор Public

Используйте оператор Public для объявления общих переменных на уровне модуля.

Public strName As String

Общие переменные могут использоваться в любой процедуре проекта. Если общая переменная объявлена в стандартном модуле или модуле класса, она может использоваться в любых проектах, содержащих ссылку на проект, в котором объявлена данная общая переменная.

Оператор Private

Используйте оператор Private для объявления частных переменных на уровне модуля.

Private MyName As String

Частные переменные могут использоваться только процедурами одного модуля.

На уровне модуля оператор Dim является эквивалентным оператору Private. Вы можете использовать оператор Private, чтобы упростить чтение и интерпретацию кода.

Оператор Static

Если для объявления переменной в процедуре используется оператор Static вместо оператора Dim, объявленная переменная сохраняет свое значение между вызовами в этой процедуре.

Оператор Option Explicit

В Visual Basic можно неявно объявить переменную, просто используя оператор присвоения значения. Все неявно объявленные переменные относятся к типу Variant. Для переменных типа Variant требуется больший объем памяти, чем для большинства других переменных. Приложение будет работать эффективнее, если переменные будут явно объявленными и им будет присвоен определенный тип данных. Явное объявление переменных снижает вероятность возникновения ошибок, вызванных конфликтом имен или опечатками.

Если вы не хотите, чтобы в Visual Basic были неявные объявления, то оператор Option Explicit должен стоять в модуле перед всеми процедурами. Этот оператор требует явного объявления всех переменных модуля. Если модуль содержит оператор Option Explicit, то при обнаружении необъявленной ранее переменной или опечатки в ее имени Visual Basic выдаст ошибку времени компиляции.

В программной среде Visual Basic имеется возможность задавать параметр, который будет автоматически включать оператор Option Explicit во все новые модули. Справочная информация по изменению параметров среды Visual Basic предоставлена в документации приложения. Обратите внимание, что данный параметр не меняет уже написанный код.

Статические и динамические массивы нужно объявлять в явном виде.

Объявление объектной переменной для автоматизации

При использовании приложения для управления объектами другого приложения необходимо указать ссылку на библиотеку типов этого другого приложения. Когда ссылка указана, можно объявлять объектные переменные в соответствии с наиболее подходящими для них типами. Например, если вы указываете ссылку на библиотеку типов Microsoft Excel при работе в Microsoft Word, то можете объявить переменную типа Worksheet внутри Word, чтобы она представляла объект Worksheet приложения Excel.

При использовании другого приложения для управления объектами Microsoft Access, как правило, можно объявлять объектные переменные согласно наиболее подходящим для них типам. Вы можете также использовать ключевое слово New для автоматического создания нового экземпляра объекта. Однако может возникнуть необходимость указать, что объект принадлежит Microsoft Access. Например, при объявлении объектной переменной, представляющей форму Access внутри Visual Basic, необходимо сделать различимыми объект Form приложения Access и объект Form приложения Visual Basic. Для этого следует включать имя библиотеки типов в объявление переменной, как показано в примере ниже:

Читайте также:
Как в программе pattern maker сделать схему

Dim frmOrders As New Access.Form

Некоторые приложения не распознают отдельные объектные типы Access. Даже если в этих приложениях указана ссылка на библиотеку типов Access, все объектные переменные Access необходимо объявлять с типом Object. Также невозможно использовать ключевое слово New для создания нового экземпляра объекта.

В примере ниже показано, как объявлять переменную, представляющую экземпляр объекта Application Access в приложении, которое не распознает объектные типы Access. Затем приложение создает экземпляр объекта Application.

Dim appAccess As Object Set appAccess = CreateObject(«Access.Application»)

В документации приложения предоставлена информация о поддерживаемом им синтаксисе.

См. также

  • Сводка типов данных
  • Сводка по ключевым словам для переменных и констант
  • Темы по основам Visual Basic

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.

Обратная связь

Были ли сведения на этой странице полезными?

Источник: learn.microsoft.com

Переменные интепретатора bash

работа с переменными bash

Привет, читателям моего блога. Недавно узнал многое о переменных в интерпретаторе bash. Сегодня хочу вам об этом рассказать.

Переменные в bash очень интенсивно используются при написании скриптов, как впрочем, и в любом языке программирования для написания программ. Типы переменных в bash отсутствуют. Переменная в bash может представлять собой число, символ или строку символов.

Имя переменной может начинаться с буквы или с символа подчеркивания и не может содержать дефис.Физически, переменные представляют собой именованные участки памяти, в которые может быть записана какая-либо информация. Необходимо понимать различия между именем переменной и ее значением. Если var1 — это имя переменной, то $var1 — это ссылка на ее значение.

Хотя, вышесказанное об отсутствии типа переменной можно оспорить, ибо переменные в bash делятся на Ключевые переменные (их же называю еще — глобальными, стандартными, переменные среды или внутренними) и пользовательские (которые определены пользователем во время работы). При этом, пользователь может переводит свою пользовательскую переменную в глобальную, с помощью команды export. Об остальных командах управления переменным можно почитать тут.

При использовании переменных, существует такое негласное соглашение, упрощающее работу: для глобальных переменных используются только ПРОПИСНЫЕ буквы, для остальных — строчные.

Переменные средЫ

Давайте поговорим о переменных среды. Данные переменные, заданы в файлах /etc/.profile, ~/.profile, ~/.bashrc, ~/.bash_profile и инициализируются при загрузке, либо при выполнении команды «. .файл_инициализации». Обычно, основные значения переменных среды следующие:

$BASH

В переменной $BASH содержится полный путь до исполняемого файла командной оболочки Bash.

$BASH_VERSION

В переменную $BASH_VERSION записывается версия Bash.

$CDPATH

Переменная, которая хранит пути поиска каталога. (используется при вводе команды cd имя_каталога без слэша)

$CLASSPATH

содержит список каталогов для поиска файлов классов Java и архивов Java.

$HOME

домашний каталог текущего пользователя.

$HOSTNAME

В переменной $HOSTNAME хранится имя компьютера.

$HISTSIZE

количество событий, хранимых в истории за 1 сеанс

$HISTFILE

Расположение файла истории событий

$HISTFILESIZE

количество событий, хранимых в истории между сеансами

$IFS

переменная хранит символы, являющиеся разделителями команд и параметров. (по умолчанию — пробел, табуляция и новая строка)

$LANG

текущая установка локализации, которая позволяет настроить командную оболочку для использования в различных странах и на различных языках.

$MAIL

Место, где храниться почта

$OSTYPE

В переменной $OSTYPE содержится описание операционной системы.

$PATH

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

$PS1

PS1 используется как основная строка приглашения. (то самое [[email protected] ~]#)

$PS2

PS2 используется как вторичная строка приглашения.

$PROMPT_COMMAND

Эта команда должна быть выполнена до отображения строки приглашения Bash.

$PWD

полный путь к текущему рабочему каталогу.

$SHELL

полный путь к текущей командной оболочке.

$USER

В переменной $USER содержится имя текущего пользователя.

Переменные пользователя

Присвоение значения переменной

Пользовательские переменные появляются, как только пользователь «объявит» данную переменную, то есть присвоит переменной какое-то значение:

$ var=»123 345″ # Присваивание значения переменной # Если в значениях переменных встречаются пробелы, # то использование кавычек обязательно, иначе — можно без кавычек. $ variable=$var # Подстановка значения переменной #————————————————————————- # Использование пробельных символов # с обеих сторон символа «=» присваивания недопустимо. # Если записать «VARIABLE =value», # то интерпретатор попытается выполнить команду «VARIABLE» с параметром «=value». # Если записать «VARIABLE= value», # то интерпретатор попытается установить переменную окружения «VARIABLE» в «» # и выполнить команду «value». #————————————————————————- $ echo var # Это НЕ вывод переменной var $ echo $var 123 345 $ echo $variable 123 345 $ echo «$variable» 123 345 # Как видно, использование кавычек при выводе значения переменной сохраняет # пробельные символы в переменной $ echo ‘$variable’ $variable $ echo $variable $variable # Внутри одинарных кавычек не производится подстановка значений переменных, # т.е. «$» интерпретируется как простой символ. А так же при использовании # символа экранирования. $ variable= # Запись пустого значения в переменную(!но не удаление) $ echo $variable # Обратите внимание: запись пустого значения — это не то же самое, # что сброс переменной, хотя конечный результат — тот же (см. ниже). $ echo «uninitialized_variable = $uninitialized_variable» uninitialized_variable = #пустое # Неинициализированная переменная содержит «пустое» значение. $ unset uninitialized_variable # Сброс переменной. $ echo «uninitialized_variable = $uninitialized_variable» uninitialized_variable = #пустое

Читайте также:
Тюнинг авто программа для японских авто

Действия над переменными

Как уже указывалось, переменной можно присвоить значение. Кроме данного действия, возможно производить следующие действия:

$ readonly variable # пометка переменной «только для чтения» $ variable=789 -bash: variable: доступная только на чтение переменная $ cat test #содержимое первого скрипта #! /bin/bash variable1=znachenie #объявление переменной echo «test 1: $variable1» #вывод переменной ./subtest #запуск вложенного скрипта echo «test 2: $variable1» #вывод переменной после запуска вложенного скрипта export variable1 #экспорт переменной echo «test 3: $variable1» ./subtest echo «test 4: $variable1» $ cat subtest #содержимое скрипта, запускаемого из первого #! /bin/bash echo «subtest 1: $variable1» variable1=drugoe echo «subtest 2: $variable1» $ ./test #запуск скрипта test 1: znachenie subtest 1: subtest 2: drugoe test 2: znachenie test 3: znachenie subtest 1: znachenie subtest 2: drugoe test 4: znachenie $ cat where where=$(pwd) echo «Вы работаете в каталоге 1: $where» echo «Вы работаете в каталоге 2: $(pwd)» where2=`pwd` echo «Вы работаете в каталоге 3: $where2» # Как видно, переменной можно присвоить значение вывода какой-либо команды # используя комбинацию $(command) или `command` (апострофы). $ ./where Вы работаете в каталоге 1: /home/user Вы работаете в каталоге 2: /home/user Вы работаете в каталоге 3: /home/user

Особые переменные (Позиционные переменные)

При вызове команды или сценария с аргументами, имя команды и ее аргументы являются позиционными переменными. Позиционными они называются, потому что внутри сценария обращение к ним происходит по позиции в командной строке. Давайте рассмотрим их на практике:

# Рассмотрим содержимое командного сценария $ cat display_arg #! /bin/bash echo «Имя запущенного сценария: $0» echo «Первые пять аргументов командной строки: $1 $2 $3 $4 $5» echo «Всего аргументов сценария: $#» echo «Все аргументы у запущенного сценария: $*» echo «Если аргументов более 10, то выводим 10 так: $» echo «PID запущенного сценария: $$» sleep 5 PID последнего процесса, запущенного в фоне: $!» ls display_ echo «Команда ls display_ завершилась статусом: $?» ls display_arg echo «Команда ls display_arg завершилась статусом: $?» # Запустим сценарий $ ./display_arg 1 98 kjk 98 njk88 kjkj 78 kjkj66 jkj k l h Имя запущенного сценария: ./display_arg Первые пять аргументов командной строки: 1 98 kjk 98 njk88 Всего аргументов сценария: 12 Все аргументы у запущенного сценария: 1 98 kjk 98 njk88 kjkj 78 kjkj66 jkj k l h Если аргументов более 10, то выводим 10 так: k PID запущенного сценария: 3316 PID последнего процесса, запущенного в фоне: 3317 ls: невозможно получить доступ к display_: Нет такого файла или каталога Команда ls display_ завершилась статусом: 2 display_arg Команда ls display_arg завершилась статусом: 0 $

Из приведенного скрипта видно, что:

$0

хранит имя команды, запустившей сценарий

$1-$n

переменные хранят 1, 2, 3. n позицию аргументов команды

хранит количество аргументов команды

хранит значение всех аргументов командной строки через пробел

хранит значение всех аргументов командной строки в виде списка

хранит PID запущенного сценария (процесса)

хранит значение PID последнего процесса, запущенного в фоне

Статус выхода запущенной последней программы. Он так же называется кодом условия, кодом возврата. По соглашению, ненулевое значение статусы завершения соответствует значению false и обозначает неудачное завершение процесса. Код выхода равный 0 соответствует true и обозначает успешное завершение программы. (в нашем примере ls display_ завершилось с ошибкой и кодом выхода 2, т.к. файла или каталога display_ не существует)

Действия над переменными 2

Хочу дополнить возможные действия над переменным: сдвиг и инициализация переменных. Опять же, проще будет понять данные действия на практике:

$ cat set_shift #! /bin/bash echo «var1=$1 var2=$2 var3=$3» shift echo «var1=$1 var2=$2 var3=$3» shift echo «var1=$1 var2=$2 var3=$3» shift echo «var1=$1 var2=$2 var3=$3» echo «Посмотрим как присваиваются переменные командой set» set как это присваивается echo «Вот $1 $3 $2» $ ./set_shift mama papa dom var1=mama var2=papa var3=dom var1=papa var2=dom var3= var1=dom var2= var3= var1= var2= var3= Посмотрим как присваиваются переменные командой set Вот как присваивается это $

Как видно, команда shift «сдвигает» позиционные параметры, в результате чего параметры «сдвигаются» на одну позицию влево.

Прежний аргумент $1 теряется, но аргумент $0 (имя файла сценария) остается без изменений.

Команда set устанавливает позиционные переменные на основе переданных ей аргументов, разделенных пробелами. Соответственно, команде set возможно передать в виде аргументов и вывод какой-либо команды в виде set $(command). Параметры команды set можно посмотреть тут.

P.S. Забыл указать на такой момент.Кроме использования ссылки на переменную в формате $имя_переменной, возможен и такой синтаксис: $. Данный синтаксис позволяет объединить переменную с другим текстом. Пример:

server:~# var10=alex server:~# echo $var10ander server:~# echo $ander alexander

Как видно в примере, при попытке вывести значение переменной $var10ander выводится пустая строка, и правильно, потому что такой переменной нет. при заключении переменной в фигурные скобки — значение переменной объединяется с последующим текстом.

Резюме

На сегодня это все. Думаю представление о том, как работают переменные в bash, я изложил понятно. Желаю вам побольше практики!

Хочу сказать спасибо товарисчу — начальнику бога http://poplinux.ru/ за некоторые процитированные в статье примеры.

С Уважением, Mc.Sim!

Другие материалы в категории bash
  • Переменные интепретатора bash
  • Использование регулярных выражений (regex) в Linux
  • Программные каналы и потоки, перенаправление
  • Работа интерпретатора bash (развертывание параметров)
  • Комбинации клавиш для работы в интерпретаторе Bash
  • Основные команды Linux или шпаргалка начинающего линуксойда

Источник: www.k-max.name

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru