接受日志文件作为参数,如果传递文件名但文件不存在则调用函数

接受日志文件作为参数,如果传递文件名但文件不存在则调用函数

我目前对问题的参数和参数有点困惑。

我目前必须接受日志文件名作为参数(例如, ),但如果没有给出参数则/var/log/secure-<yyyymmdd>默认为。/var/log/secure

如何接受日志文件名作为参数?我认为这可能是问题的措辞,但我不太明白它的意思。

这是我在这个问题之前迄今为止所做的当前代码的片段:

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

对于第二部分,我必须创建一个以代码 2 退出的函数(我当前正在处理该函数),然后,如果传递了文件名但文件不存在,则调用该函数。我会做这样的事情吗?感觉不对,但又不知道哪里不对。

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

else
runfunction

答案1

要将变量设置为第一个命令行参数,您可以这样做

pathname=$1

要将其设置为默认值,以防参数不可用或为空,请使用

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

一般形式为${parameter:-word}.这是一个标准 POSIX 参数扩展,并且它也记录在您的 shell 手册中。

-d测试测试给定字符串是否对应于现有目录路径(或者是指向现有目录路径的符号链接)。该-f测试以相同的方式针对常规文件,并-e涵盖任何内容(如果名称存在,则为 true,无论它的名称是什么)。

要否定测试的意义,您可以使用!,所以您得到

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

或者,使用短路语法,

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

myfunction如果变量中的字符串pathname未指定现有的常规文件(或指向该文件的链接),则会调用此函数。


一个完整的脚本,它采用具有默认值的命令行参数(路径),如果给定路径与现有常规文件不对应,则以退出状态 2 退出。

#!/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"

相关内容