Zan*_*001 1 linux bash shell-script
我目前对问题的参数和参数有点困惑。
我目前必须接受日志文件名作为参数(例如,/var/log/secure-<yyyymmdd>),但/var/log/secure如果没有给出参数,则默认为。
如何接受日志文件名作为参数?我认为这可能是问题的措辞,但我不太明白它的意思。
这是我在此问题之前完成的当前代码的片段:
#!/bin/bash
grep " su: " /var/log/secure | while read -r abc; do
echo "$abc"
done
Run Code Online (Sandbox Code Playgroud)
对于第二部分,我必须创建一个以代码 2 退出的函数(我目前正在处理该函数),然后,如果传递了文件名但文件不存在,则调用该函数。我会做这样的事情吗?感觉不对,但不知道哪里不对。
IF [ -d /var/log/secure ]
then
else
runfunction
Run Code Online (Sandbox Code Playgroud)
要将变量设置为第一个命令行参数,您可以这样做
pathname=$1
Run Code Online (Sandbox Code Playgroud)
要将其设置为默认值,以防参数不可用或为空,请使用
pathname=${1:-/var/log/secure}
Run Code Online (Sandbox Code Playgroud)
一般形式是${parameter:-word}。这是一个标准的 POSIX 参数扩展,它也记录在你的 shell 手册中。
该-d测试测试给定的字符串是否对应于现有目录路径(或者是指向存在的目录路径的符号链接)。该-f测试以相同的方式针对常规文件,并-e涵盖任何内容(如果名称存在,则为真,无论它是什么名称)。
为了否定测试的意义,你会使用!,所以你得到
if [ ! -f "$pathname" ]; then
myfunction
fi
Run Code Online (Sandbox Code Playgroud)
或者,使用短路语法,
[ ! -f "$pathname" ] && myfunction
Run Code Online (Sandbox Code Playgroud)
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"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
57 次 |
| 最近记录: |