0

getoptsを使用してMACアドレスを取得し、ログファイルを介してそのMACアドレスをgrepします。次のようになります。

#!/bin/bash

while getopts ":m:hx:" opt; do
  case $opt in
    m)
        cat /var/log/vmlog/Verimatrix.log | grep $OPTARG | grep VCAS080455
        cat /var/log/vmlog/Verimatrix.log | grep $OPTARG | grep VCAS080285
        cat /var/log/vmlog/Verimatrix.log | grep $OPTARG | grep VCAS080290
      ;;
    h)
        echo "./search_mac.sh -m <mac address> will filter the logs by mac address"
        echo "./search_mac.sh -h will print this message"
      ;;
    \?)
      echo "Invalid option: -$OPTARG" >&2
      ;;
  esac
done

-xオプションを使用したときに結果をファイルにエクスポートしたい:

./search_mac.sh -m 00067B6D87F0 -x /home/nico/extract.txt

この時点で、-xから引数を取得して私のケースのm)部分に入れる方法がわかりません。

少し助けていただければ幸いです。

ありがとう

4

1 に答える 1

3

最善のアプローチは、オプション引数の値をシェル変数に保存し、最後にコマンドを実行することだと思います。

#!/bin/bash

m_arg=
x_arg=

while getopts ":m:hx:" opt; do
  case $opt in
    m) m_arg="$OPTARG" ;;
    x) x_arg="$OPTARG" ;;
    h)
        echo "./search_mac.sh -m <mac address> will filter the logs by mac address"
        echo "./search_mac.sh -h will print this message"
        exit 0
      ;;
    \?)
      echo "Invalid option: -$OPTARG" >&2
      exit 1
      ;;
  esac
done

if [[ "$x_arg" ]] ; then
    exec > "$x_arg"          # redirect STDOUT to argument of -x
fi

< /var/log/vmlog/Verimatrix.log grep -- "$m_arg" | grep VCAS080455
< /var/log/vmlog/Verimatrix.log grep -- "$m_arg" | grep VCAS080285
< /var/log/vmlog/Verimatrix.log grep -- "$m_arg" | grep VCAS080290

それは言った。。。-x /home/nico/extract.txtこのオプションは、と同じことを意味するため、私にはそれほど有用ではないようです> /home/nico/extract.txt。私は何かが足りないのですか?

于 2012-12-04T02:39:57.687 に答える