我目前对问题的参数和参数有点困惑。
我目前必须接受日志文件名作为参数(例如, ),但如果没有给出参数则/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"