Expansão de Variável

Trata-se basicamente de uma capacidade de expansão de string que permite fazer referência a variáveis. , indexar arrays, substituição condicional de variáveis, conversão de caixa (maiúscula/minúscula), seleção de substring, identificação e substituição de expressões regulares, substituição de classe de caracter, padding strings, expansão repetida em loops controlados pelo usuário, suporte a expressões aritméticas no início do loop, condições de step e fim e expansão recursiva.

Ao usar caracteres de expansão variável em um registro de volume label format, o formato deve ser sempre delimitado com aspas duplas (“).

Por exemplo, ${HOME} será substituído pelo seu home directory, conforme definido no ambiente. Se você definiu a variável xxx para ser Test, então a referência ${xxx:p/7/Y/r} irá fazer o pad à direita do conteúdo de xxx para um tamanho de sete caracteres, preenchendo com o caractere Y. Isso retornará o resultado YYYTest.

Variáveis Bacula

No Bacula há três classes principais de variáveis com algumas pequenas variações entre elas, que são:

Contadores

Contadores são definidos pelos recursos do arquivo conf do Director. O contador pode ser tanto um contador temporário que dure o tempo da execução do Bacula ou pode ser uma variável gravada no catálogo e que retém o valor entre execuções do Bácula. Variáveis de contador podem ser incrementadas ao se colocar um sibnal de mais (+) após o nome da variável.

Variáveis Internas

Variáveis internas são somente leitura e podem ser relacionadas ao job atual (ex.: Job name) ou talvez variáveis especiais como data e hora. As variáveis a seguir estão disponiveis:

Year

– o ano inteiro

Month

– o mês atual de 1 a 12

Day

– o dia do mês de 1 a 31

Hour

– a hora de 0 a 24

Minute

– o minuto atual de 0 a 59

Second

– o segundo atual de 0 a 59

WeekDay

– o dia da semana atual de 0 a 6 (onde 0 é domingo)

Job

– o nome do job

general

– o nome do Director

Level

– o nível do Job

Type

– o tipo do Job

JobId

– o JobId

JobName

– o nome único composto pelo nome do job e data

Storage

– o nome do daemon do storage

Client

– o nome do client

NumVols

– o número atual de volumes no pool

Pool

– o nome do pool

Catalog

– o nome do catálogo

MediaType

– o tipo de mídia

Variáveis de Ambiente

Variáveis de ambiente são somente leitura e devem ser definidas no ambiente principal de execução d Bacula. Elas podem ser tanto escalares como em array, onde os elementos do array são referenciados ao se executar subscripts do nome da variável (${Months[3]}, por exemplo). Os arrays de variáveis de ambiente são definidos ao se separar os elementos com a barra verrtical (|), de forma que ao ajustar Months=”Jan|Feb|Mar|Apr|…” define-se uma variável de ambiente com o nome Month que será tratada como um array e que a referência ${Months[3]} irá considerar até Mar. Os elementos do array podem ter tamanhos diferentes.

Sintaxe Total

Uma vez que a sitaxe é bastante extensiva, abaixo será usado o pseudo BNF. Os caracteres especiais têm o seguinte significado:

::= definição

( ) agrupamento se os parênteses não estiverem entre aspas

| separa alternativas

‘/’ literal / (ou qualquer outro caracter)

CAPS um caracter ou uma sequência de caracteres

* o item precedente pode ser repetido nenhuma ou mais vezes

? o item procedente pode aparecer uma vez ou nenhuma

+ o item precedente deve aparecer uma ou mais vezes

E o pseudo BNF que descreve a sintaxe é:

input ::= ( TEXT

| variable

| INDEX_OPEN input INDEX_CLOSE (loop_limits)?

)*

variable ::= DELIM_INIT (name|expression)

name ::= (NAME_CHARS)+

expression ::= DELIM_OPEN

(name|variable)+

(INDEX_OPEN num_exp INDEX_CLOSE)?

(‘:’ command)*

DELIM_CLOSE

command ::= ‘-‘ (TEXT_EXP|variable)+

| ‘+’ (TEXT_EXP|variable)+

| ‘o’ NUMBER (‘-‘|’,’) (NUMBER)?

| ‘#’

| ‘*’ (TEXT_EXP|variable)+

| ‘s’ ‘/’ (TEXT_PATTERN)+

‘/’ (variable|TEXT_SUBST)*

‘/’ (‘m’|’g’|’i’|’t’)*

| ‘y’ ‘/’ (variable|TEXT_SUBST)+

‘/’ (variable|TEXT_SUBST)*

‘/’

| ‘p’ ‘/’ NUMBER

‘/’ (variable|TEXT_SUBST)*

‘/’ (‘r’|’l’|’c’)

| ‘%’ (name|variable)+

(‘(‘ (TEXT_ARGS)? ‘)’)?

| ‘l’

| ‘u’

num_exp ::= operand

| operand (‘+’|’-‘|’*’|’/’|’%’) num_exp

operand ::= (‘+’|’-‘)? NUMBER

| INDEX_MARK

| ‘(‘ num_exp ‘)’

| variable

loop_limits ::= DELIM_OPEN

(num_exp)? ‘,’ (num_exp)? (‘,’ (num_exp)?)?

DELIM_CLOSE

NUMBER ::= (‘0’|…|’9’)+

TEXT_PATTERN::= (^(‘/’))+

TEXT_SUBST ::= (^(DELIM_INIT|’/’))+

TEXT_ARGS ::= (^(DELIM_INIT|’)’))+

TEXT_EXP ::= (^(DELIM_INIT|DELIM_CLOSE|’:’|’+’))+

TEXT ::= (^(DELIM_INIT|INDEX_OPEN|INDEX_CLOSE))+

DELIM_INIT ::= ‘$’

DELIM_OPEN ::= ‘{‘

DELIM_CLOSE ::= ‘}’

INDEX_OPEN ::= ‘[‘

INDEX_CLOSE ::= ‘]’

INDEX_MARK ::= ‘#’

NAME_CHARS ::= ‘a’|…|’z’|’A’|…|’Z’|’0’|…|’9’

Semântica

Os itens listados no comando acima, que estão sempre depois de dois pontos (:), têm os seguintes significados:

– fazem uma substituição caso a variável esteja vazia

+ fazem uma substituição caso a variável não esteja vazia

o retira uma substring do valor da variável

# tamanho do valor da variável

* substitui string vazia se o valor da variável não está vazio

caso contrário substitui o parâmetro alternativo

s expressão regular de localização e substituição. As opções alternativas são:

m = multilinhas, i = case insensitive,

g = global, t = texto sem formatação (sem regexp)

y transpor caracteres da classe A para a classe B

p variável de pad para l = esquerda, r = direita or c = centro,

com segundo valor.

% chamada especial de função (nenhuma implentada)

l caixa baixa do valor da variável

u caixa alta do valor da variável

Os loop_limits são start, step e end.

Um nome de contador de variável seguido imediatamente por um mais (+) fará com que o contador seja incrementado por um.

Exemplos

Para criar uma data de arquivo ISO:

DLT-${Year}-${Month:p/2/0/r}-${Day:p/2/0/r}

em 20 de junho de 2003 retornaria DLT-2003-06-20

Ao ajustar a variável de ambiente mon para:

January|February|March|April|May|…

File-${mon[${Month}]}/${Day}/${Year}

no dia primeiro de março retornaria File-March/1/2003

Disponível em: pt-brPortuguês

Deixe uma resposta