8

私は最近 getopts を使用しており、すべてをセットアップしました。問題があります。誰かがコマンド ラインに引数を入力しない場合に、ヘルプ テキストが表示されるように機能させたいと考えています。

$ ./script
$ help: xyz - argument must be used.

これが私が現時点で持っているものです。

#!/bin/bash

function helptext {
    # ...
}

function mitlicense {
    # ...
}


while getopts "hl" opt; do
  case $opt in
    h) helptext >&2
      exit 1
    ;;
    l) mitlicense >&2
      exit 0
    ;;
    \?) echo "Invalid option: -$OPTARG" >&2
      exit 1
    ;;
    :) echo "Option -$OPTARG requires an argument." >&2
      exit 1
    ;;
    *) helptext >&2
      exit 1
    ;;
  esac
done
4

3 に答える 3

9

以下のような if テストを使用して、ユーザー入力を検証します。

-z に続く文字列の長さがゼロの場合、の-zオプションは true を返します。test

 if [ -z "$1" ]
 then
  helptext
  exit 1
 fi
于 2013-04-20T13:00:09.353 に答える
7

スクリプトでこれを使用してみてください:

#!/bin/bash

[[ $@ ]] || { helptext; exit 1; }

# --- the rest of the script ---

コード行は、ブール値の短縮版です

if [[ $@ ]]; then
    true
else
    helptext
    exit 1
fi

$@スクリプトのすべての引数です

[[ $var ]]

の省略形です

[[ -n $var ]]

http://mywiki.wooledge.org/BashGuide/TestsAndConditionalsを参照してください。

于 2013-04-20T12:57:35.717 に答える
5

Gilles Quenotの答えはうまく機能し、非常に簡潔です。意図をより明示的に表現するソリューションを探している場合は、パラメーターのに基づくこれらを試すことができ$#ます。

[[ $# -gt 0 ]] || { helptext; exit 1; }

代案、算術式を使用:

(( $# > 0 )) ||  { helptext; exit 1; }

最後に、0 が false に評価され、ゼロ以外の数値が true に評価されることに依存する省略形:

(( $# )) || { helptext; exit 1; }

William Pursellは、記述的で POSIX 準拠の別のバリアントを提供しています。

test $# -gt 0 || { helptext; exit 1; }

test/[ ... ]は POSIX ユーティリティ/ビルトインですが、同様の[[ ... ]]条件はbash固有です (そのまま(( ... )))。
ただし、一般に、 は/よりも多くbash[[ ... ]]機能を提供し、驚きは少なくなります。test[...]

于 2013-04-20T13:33:37.677 に答える