0

これについても同様の質問が寄せられる可能性があることは知っていますが、私はシェルスクリプトの初心者であり、ヘルプが見つかりません(技術を理解できない可能性があります)。簡単な質問があります:

3つの引数を必要とする単純なスクリプト(testscript.sh)があり、3つのパラメーターを使用してこれらを渡し、次のように実行しています(1番目の引数は単純な文字列、2番目はファイル名へのパス、3番目はフォルダー名)

./testscript.sh --para1 "somestring" --para2 "/home/android/test/abc.xml" --para3 "/home/android/outputfolder"

ここで、ユーザーがすべてのreqd入力値に適切なパラメーターを指定したかどうかを確認したいと思います。つまり、para3にはフォルダ名が含まれている必要があり、para2はファイル名であり、para1は文字列である必要があります。そうでない場合は、同じ順序で入力されます。

また、もう1つ検証したいと思います。現在、ユーザーがファイル名「/home/android/test/abc.xml」を二重引用符で囲んで入力することを期待していますが、ユーザーが二重引用符とフォルダーで囲まない場合/ filenameにはスペースが含まれていますが、スペースを含む完全なファイル/フォルダー名を取得できないため、問題が発生します。

Plzヘルプ。ありがとう

4

2 に答える 2

2

これはうまくいくはずです

#!/bin/sh

usage ()
{
  echo "usage: $0 STRING FILE DIRECTORY"
  exit
}

[ -n "$1" ] || usage
[ -e "$2" ] || usage
[ -d "$3" ] || usage

ref

于 2013-01-18T18:09:18.000 に答える
1

私の要件と完全に一致することはできませんでしたが、次のように機能します。スクリプトの実行方法を次のように変更しました。

./testscript.sh -p "somestring" -i "/home/android/test/abc.xml" -o "/home/android/outputfolder"

&スクリプトに次のようにチェックを追加しました:

while getopts ":p:i:o:" opt; do
  case $opt in
    p)
      if [ "$OPTARG" = "abc" ] || [ "$OPTARG" = "xyz" ]; then
        somestring=$OPTARG
      else
        echo "Invalid parameter" >&2
        usage
      fi
      ;;
    i)
      if [ -e $OPTARG ] && [ -f $OPTARG ]; then 
    input=$OPTARG
       else
        echo "Input file doest'nt exist " >&2
        usage
      fi
      ;;
    o)
      if [ -e $OPTARG ]; then
    ouput=$OPTARG
      else
        echo "Output folder doest'nt exist " >&2
        usage
      fi
      ;;
    \?)
      echo "Invalid option: -$OPTARG" >&2
      exit 1
      ;;
    :)
      echo "Option -$OPTARG requires an argument." >&2
      exit 1
      ;;
  esac
done

しかし、それでも誰もが私の質問に対する正確な解決策を見つけます( "--para1"を使用)、答えは大歓迎です!

于 2013-01-24T05:57:42.340 に答える