変数が文字列かどうかをテストする

変数が文字列かどうかをテストする

いくつかのパラメータを含むスクリプトを作成しているので、使用していますが、getopts 1つのパラメータで問題を解決したいと思います。

たとえば、スイッチを使用し、必要な-dパラメータ-dはディレクトリパスです./work

数値ではなく、ユーザーが入力した文字列またはパスをテストしたいと思います。この問題を解決する方法はありますか?次のように解決したいと思います。

If (test)
  then echo it is string
else 
  echo it is not string       

答え1

各変数は文字列です。

「数字です」と「数字ではありません」を区別するには、テストしてみてください。

while getopts d: OPTLET; do
  case "$OPTLET" in
    d)
      case "$OPTARG" in
        *[!0-9]*) echo 1>&2 "Non-numeric argument to -d, stopping."; exit 2;;
        *) number_of_foo=$OPTARG;;
      esac;;
  esac
done

これはあなたが本当に欲しいものであるかどうかあなたの質問では明確ではありません。数字はい文字列。123有効なファイル名です。したがって、引数が-d潜在的なファイル名であると仮定すると、検証は不要です。すべての文字シーケンスは、潜在的に有効なファイル名です。

関連情報