1

多くのテキストファイルを詳しく説明するスクリプトを書いています。

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

同じ呼び出しである可能性があります。コードを変更するにはどうすればよいですか? 助言がありますか?

4

1 に答える 1

0

ファイル名のリストを繰り返したいshift

主張を聞いた後、

shift $(( OPTIND-1 ))
while [ -f $1 ] 
do 
   #do whatever you want with the filename in $1.
   shift
done
于 2013-08-05T15:57:35.263 に答える