Aceitar o arquivo de log como parâmetro e chamar uma função se o nome do arquivo for passado, mas o arquivo não existir

1

Atualmente, estou um pouco confuso em relação a argumentos e parâmetros para uma pergunta.

No momento, tenho que aceitar o nome do arquivo de log como um parâmetro (por exemplo, /var/log/secure-<yyyymmdd> ), mas padrão para /var/log/secure , se nenhum argumento for fornecido.

Como eu aceito o nome do arquivo de log como parâmetro? Eu acho que pode ser o fraseado da pergunta, mas eu não entendo o que isso significa.

Este é um trecho do código atual que fiz até agora antes desta pergunta:

#!/bin/bash
grep " su: " /var/log/secure | while read -r abc; do   
echo "$abc"
done

Para a segunda parte, eu tenho que criar uma função que sai com o código 2 (estou trabalhando nisso atualmente) e depois, chamar essa função se um nome de arquivo for passado, mas o arquivo não existir. Eu faria algo assim? Parece errado, mas não tenho certeza onde.

IF [ -d /var/log/secure ]
then

else
runfunction
    
por Zanders2001 13.09.2018 / 11:25

1 resposta

5

Para definir uma variável para o primeiro argumento de linha de comando, você faria

pathname=$1

Para configurá-lo para um valor padrão, caso o argumento não esteja disponível ou esteja vazio, use

pathname=${1:-/var/log/secure}

O formulário geral é ${parameter:-word} . Esta é uma expansão do parâmetro POSIX padrão , e também está documentada no manual do seu concha.

O teste -d testa se a string especificada corresponde a um caminho de diretório existente (ou se é um link simbólico para um existente). O teste -f é para arquivos regulares da mesma forma, e -e cobre qualquer coisa (será verdadeiro se o nome existir, independentemente do nome do nome).

Para negar o sentido de um teste, você usaria ! para obter

if [ ! -f "$pathname" ]; then
    myfunction
fi

ou, usando a sintaxe de curto-circuito,

[ ! -f "$pathname" ] && myfunction

Isso chamaria myfunction se a string na variável pathname não designasse um arquivo regular existente (ou um link para um).

Um script completo que usa um argumento de linha de comando (um caminho) com um valor padrão e sai com o status de saída 2 se o caminho fornecido não corresponder a um arquivo regular existente.

#!/bin/bash

pathname=${1:-/var/log/secure}

if [ ! -f "$pathname" ]; then
    printf 'There is no file called "%s"\n' "$pathname"
    exit 2
fi

printf 'The file "%s" exists\n' "$pathname"
    
por 13.09.2018 / 11:33