複数の文字フラグでパラメータを渡す

複数の文字フラグでパラメータを渡す

私の質問は大学で書くように頼まれたスクリプトに関するものなので、H / Wですが、詰まってまだ解決策が見つかりませんでした。

私は次のような主張を得ようとしています

./tool.sh -f persons.dat -id <id> 

その人のデータを表示したいからです。

tool.shpersons.dat以下のような人事データを含むファイルであるマイプログラムです。

3601|Wang|Lin|male|1981-01-02|2010-03-14T19:06:18.373+0000|1.10.108.68|Firefox

id|lastName|firstName|gender|birthday|creationDate|locationIP|browserUsed

IDは2文字のフラグであり、手動で渡すことができるため、getoptsを使用できないことを知っていますが、場所を考慮しないように求められます。

./tool.sh -f persons.dat -id <id> 

そして:

./tool.sh -id <id> -f persons.dat

同じ目的で使用する必要があります

どんなアイデアがありますか?

ベストアンサー1

あなたの質問がこれら2つのオプションに制限されている場合は、次のようになります。

usage() {
echo "tools.sh -id <id> -f <file>"
echo "note: order of options is not important"

}

if [ $# -ne 4 ]; then
    echo "Wrong number of arguments"
    usage   
    exit 1
fi

if [ "$1" = "-f" -a "$3" = "-id" ]; then
    file="$2"
    id="$4"
elif [ "$1" = "-id" -a "$3" = "-f" ]
then
    file="$4"
    id="$2"
else
    echo "Wrong syntax!"
    usage
    exit 1
fi

その後、awkを使用してファイルを解析できます。

awk -F'|' -v id="$id" '$1==id{printf "ID: "$1"\nUser: "$2" "$3"\nGender: "$4"\nBorn: "$5"\nCreation Date: "$6"\nLocation IP: "$7"\nBrowser used: "$8"\n"}' $file

if [ $? -eq 0 ]
then
    exit 0
else
    echo "Something went \"woopsie!\""
    exit 1
fi

より良い結果を得るには、これが数値であり、実際にファイルのどこかにあることを確認することもできますidpersons.datPATH

おすすめ記事