-2

getopts について助けが必要です。フラグ (この場合は -d) を渡した場合にのみ、このコマンド (mount コマンド) を実行できるようにしたいと考えています。以下の出力は、スクリプトにあるものですが、機能していないようです。

チェックマウント=""

while getopts ":d" opt
行う
  ケース「$opt」

  d) CHECKMOUNT="真" ;;

      使用法 >&2
      出口1;;
    エサック
   終わり
  shift `expr $OPTIND-1`

FS_TO_CHECK="/dev"

[ "$CHECKMOUNT" = "true" ] の場合
それから
  猫/proc/mountsの場合| grep $FS_TO_CHECK > /dev/null; それから
   # ファイルシステムがマウントされました
そうしないと
   # ファイルシステムはマウントされていません
  フィ
フィ

4

1 に答える 1

1

あなたのスクリプトには多くの問題があります。

これを機能させるための最小限の修正リストを次に示します。

  • Whileは bash 制御ステートメントではなく、while. 大文字と小文字は重要です。
  • 空白は重要です:if ["$CHECKMOUNT"= "true"]機能せず、エラー メッセージが表示されるはずです。=次のように、括弧と の周りにスペースが必要ですif [ "$CHECKMOUNT" = "true" ]
  • の使用法getoptsが正しくありません。例をコピーするのを間違えたと思います: While getopts :d: optshould be: while getopts ":d" opt
  • の使い方shiftが間違っています。これにより、エラー メッセージが表示されるはずです。これを次のように変更します: shift $((OPTIND-1))if you need to shift OPTIND.
  • 生のテキストのunknocn フラグはコメントのように見えます。その前に を付け#ます。そうしないと、不明なオプションを使用したときにエラーが発生します。
  • 機能はありませんusage。1 つを定義するか、場合によっては使用説明書付きの に変更usageします。\?)echo

最後に、スクリプトがオプションの引数を 1 つしか必要としない場合は、スクリプトgetoptの最初の引数は特別な変数に格納されます$1

if [ "$1" = "-d" ]; then
    CHECKMOUNT="true"
elif [ "$1" != "" ]; then
    usage >&2
    exit 1
fi
于 2012-07-25T23:40:32.457 に答える