Passar argumentos da linha de comando para o script bash

102

Sou novo na programação de scripts.

Eu quero implementar um script bash 'deploymLog', que aceita como entrada um argumento de string (nome).

[root@localhost Desktop]# ./deploymLog.sh name

aqui eu quero passar o argumento string (nome) através da linha de comando

Como etapa inicial, preciso anexar o registro de data e hora atual junto com essa string de entrada a um arquivo de log, digamos Logone.txt no diretório atual no formato abaixo:

[name]=[System time timestamp1]

Como isso é possível?

    
por l0b0 21.02.2012 / 08:47

3 respostas

101

$> cat ./deploymLog.sh 
#!/bin/bash

name=$1
log_file="Logone.txt"

if [[ -n "$name" ]]; then
    echo "$1=$( date +%s )" >> ${log_file}
else
    echo "argument error"
fi

O primeiro argumento de uma linha de comando pode ser encontrado com $1 . date +%s retorna o registro de data e hora atual no horário do unix. >> é um operador para anexar a gravação ao arquivo.

$> ./deploymLog.sh tt

$> cat Logone.txt 
tt=1329810941

$> ./deploymLog.sh rr

$> cat Logone.txt 
tt=1329810941
rr=1329810953

Para um registro de data e hora mais legível, você pode brincar com os argumentos date .

    
por 21.02.2012 / 08:56
59

Argumentos da linha de comando do shell são acessíveis por meio de $1 (o primeiro), $n (enésimo) ou $* (todos os argumentos), portanto, seu script deve começar:

#!/bin/bash

if [ $# -ne 1 ]; then
    echo $0: usage: myscript name
    exit 1
fi

name=$1

Agora, o argumento do nome pode ser acessado no script como $name .

Para obter o registro de data e hora, use o comando date(1) e forneça um especificador de formato para que ele produza o formato desejado:

now=$(date +%Y%m%d%H%M%S)

Agora, $now contém a data e a hora atuais.

Então você pode criar seu arquivo de log assim:

logfile=/path/to/log/file/mylogfile.$now
echo "[$name]=[$now]" >> $logfile

É melhor usar uma função shell para registrar suas mensagens, pois será mais fácil de usar:

function logit
{
    now=$(date +%Y%m%d%H%M%S)
    echo "$now: $*" >> $logfile
}

Note que as funções do shell acessam seus próprios argumentos da mesma maneira que o script (via $1 etc.)

O script inicial é assim:

#!/bin/bash

function logit
{
    now=$(date +%Y%m%d%H%M%S)
    echo "$now: $*" >> $logfile
}

if [ $# -ne 1 ]; then
    echo $0: usage: myscript name
    exit 1
fi

name=$1
now=$(date +%Y%m%d%H%M%S)
logfile=/path/to/log/file/mylogfile.$now

logit name = $name

(note que o arquivo de log não está no formato exato que você especificou; ele está em um melhor com o timestamp no início de cada linha).

    
por 21.02.2012 / 08:57
7
#!/bin/bash

name=$1

echo "$(date '+%Y%m%d-%H:%M:%S') => " $name >> x.log

execute "bash deploymLog.sh whatever", e você tem x.log com

20120220-23:53:50 =>  whatever
    
por 21.02.2012 / 08:56