多くのテキストファイルを詳しく説明するスクリプトを書いています。
N 個のテキスト ファイルを bash スクリプトに渡す必要があります。
スクリプトの呼び出しは次のようになります。
:~$ ./bristat [-u user] [-p] [-m] file1.log...fileN.log
スクリプトは、引数-u -m -pに続いてログファイルを詳しく説明します。
- args
-u -m -p
はオプションです (これらの引数のいずれか、またはすべてを指定せずにスクリプトを呼び出すことができます)。 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 ユーザー] [-p] file3.log
:~$ ./bristat [-m] file1.log [-p] file2.log [-u user] file3.log
同じ呼び出しである可能性があります。コードを変更するにはどうすればよいですか? 助言がありますか?