我正在编写一个脚本来详细说明许多文本文件。
我需要将 N 个文本文件传递给我的 bash 脚本。
脚本调用是这样的:
:~$ ./bristat [-u user] [-p] [-m] file1.log...fileN.log
该脚本在参数-u -m -p之后详细说明日志文件。
- args
-u -m -p
是可选的(我可以在没有、任何或所有这些 args 的情况下调用脚本); file1.log...fileN.log
是执行所必需的( 0 < files <= N )- 日志文件的所有后缀为.log
我的问题是:如何在命令行中识别和检查这些日志文件?我不关心(现在)文件的内容和做什么,我只需要脚本识别它们,进行属性检查,然后处理它们(但如何处理不是我在这里问的)。我不知道我是否清楚。要求更好的说明。
这是我没有文件检查的代码。我需要在这里整合。
#!/bin/bash
if [ $# == 0 ]; then
echo "No argument passed:: ERROR"
exit
fi
usage="Usage: bristat [-u args] [-p] [-m] logfile1...logfileN"
params=":u:pm"
U=0 P=0 M=0
while getopts $params OPT; do
case $OPT in u)
case ${OPTARG:0:1} in
-)
echo "Invalid argument $OPTARG" >&2
exit
esac
echo "[-u] User = $OPTARG" >&2
U=$((++U))
;; p)
echo "[-p] Number of lost games = " >&2
P=$((++P))
;; m)
echo "[-m] Average of total points = " >&2
M=$((++M))
;; \?)
echo $usage >&2
exit
;; :)
echo "Option [-$OPTARG] requires an argument" >&2
exit
;;
esac
done
#check for duplicate command in option line
if [ "$U" -gt "1" ]; then
echo "Duplicate option command line [-u]"
exit
fi
if [ "$P" -gt "1" ]; then
echo "Duplicate option command line [-p]"
exit
fi
if [ "$M" -gt "1" ]; then
echo "Duplicate option command line [-m]"
exit
fi
shift $[$OPTIND -1] # Move argument pointer to next.
为了更清楚起见,脚本检查日志文件以返回统计信息:
- -u 检查用户是否是授权名称
- -m 返回游戏总分的平均值
- -p 返回一场比赛输掉比赛的次数
编辑
如果我想在随机位置调用参数?我的意思是(即):
:~$ ./bristat [-u 用户] [-p] [-m] file1.log file2.log file3.log
:~$ ./bristat [-m] file1.log file2.log [-u user] [-p] file3.log
:~$ ./bristat [-m] file1.log [-p] file2.log [-u user] file3.log
可能是相同的调用。如何更改我的代码?有什么建议么?