O que está acontecendo nesta função?

3
log ()
{
  A=$1
  print "'date '+%m/%d/%y  %H:%M:%S'': $A"  >> LOGFILE.txt
  print "$A"
}

É assim que a função de log é usada na maioria dos scripts de shell em nosso ambiente. e tem sido usado no script como abaixo:

if ["blah" != "0"]
then
log "not a zero value"
fi

Como funciona a função de registro quando a condição if é satisfeita?

Você pode explicar o que cada linha significa dentro da função de registro?

    
por ayrton_senna 18.06.2015 / 01:44

2 respostas

3

Isso ajudaria se você perceber que está usando ksh ou zsh - ambos têm um print shell embutido.

  1. A=$1
  2. print "'date '+%m/%d/%y  %H:%M:%S'': $A"  >> LOGFILE.txt
  3. print "$A"

Linha 1: $ 1 significa "primeiro argumento para função log ()". Portanto, atribua o valor do primeiro argumento a log à variável denominada "A".

Linha 2: Os "acentos graves" (também conhecidos como "back tics") significam "execute o comando fechado e substitua sua saída pela sequência de back-tic'ed. $ A significa" o valor da variável denominada "A" " Então, componha uma string executando date , e interpole o valor de A . Shells normalmente distinguem entre rvalue (nome atribuído a) e lvalue (conteúdo da variável. O "> >" significa colocá-lo no final de um arquivo chamado "LOGFILE".

Linha 3: escreva o valor da variável com o nome "A" na stdout.

A função log é uma maneira bastante comum de fazer o registro de scripts sh: escrever uma cópia de qualquer mensagem em um arquivo com um registro de data, gravar uma cópia no stdout. O script sh é executado em uma janela de terminal, e as mensagens apenas passam, mas também aparecem em um arquivo para depuração posterior.

A invocação de log na cláusula true da instrução if transmite a cadeia inteira "não um valor zero" como o primeiro argumento formal da função log . Isso é o valor atribuído à variável "A" na linha 1.

    
por 18.06.2015 / 02:19
1
A=$1

atribui o primeiro argumento de função à variável A

print "'date '+%m/%d/%y  %H:%M:%S'': $A"  >> LOGFILE.txt

imprime a data e o valor da variável A e anexa-a ao LOGFILE.txt

print "$A"

imprime o primeiro argumento de função

BTW, na linha:     if ["blah"!="0"]

Deve haver espaço após [ e antes de ] , assim:

if [ "blah" != "0" ]

BTW, a impressão não é um comando padrão em alguns shells.

    
por 18.06.2015 / 02:12