0

私はバッチファイルを持っていますが、シェルスクリプトについて知りません。誰かがここで助けてくれませんか。

      @エコーオフ
      echo "プログラム名:" %0
      rem echo "次のパラメータ:" %1
      echo "次のパラメーター:" "ユーザー名/パスワード"
      echo "ユーザー ID:" %2
      echo "ユーザー名:" %3
      echo "リクエスト ID:" %4
      echo "ファイル名:" %5
      echo "エンティティ名:" %6
      echo "メールアドレス:" %7
      echo "抽出 ID:" %8
      echo "パス名:" %9

cd %9 echo "Process Output files" IF NOT EXIST C:\OraOutput GOTO MAPERROR IF EXIST o%8.out (COPY o%8.out %5.csv) ELSE echo "Output file does not exists" IF EXIST %5.csv (MOVE %5.csv C:\OraOutput\%5.cvs) ELSE echo "Could not move file to Share Drive" GOTO ENDPROCESS :MAPERROR echo "The Share Directory has not been mapped Contact your System Administrator" EXIT -1 :ENDPROCESS echo "Process finished goodbye"

ありがとう。

4

1 に答える 1

0

bashこれが最も一般的であるため、多かれ少なかれ Bourne と互換性のあるシェルを想定しています。開始するには、バッチ スクリプトを Bourne スタイルのシェル スクリプトに変換するために理解しておく必要があるいくつかの違いがあります。

  1. 最初の違いは、実行されたコマンドがデフォルトでエコーされないことです (ただし、これは変更できます)。
  2. コメントはハッシュ文字で始まります#
  3. cdまた、Bourne 互換シェルにも存在しますechoexit
  4. ファイルの存在をテストするには、[ -e file-name ]を使用できます。
  5. IFstatement はif 条件 ; then true-statement ; else false-statementになり、 true-statementfalse-statement; fi の代わりに複数のコマンド/ステートメントをセミコロンで区切ることができます。
  6. IF EXIST o%8.out (COPY o%8.out %5.csv) ELSE echo "Output file does not exists"Bourne 互換シェルでは次のようになります

    # I am assuming %8 means parameter 8 for the script
    if [ -e o$8.out ]; then cp o$8.out $5.csv; else echo "Output file does not exist"; fi
    

    または別のインデント (セミコロンは新しい行に置き換えることができます):

    if [ -e o$8.out ]; then
        cp "o$8.out" "$5.csv"
    else
        echo "Output file does not exist"
    fi
    

    cp引数にスペースを使用できるように、引数も引用符で囲んでいることに注意してください。

  7. gotoちょっとしたリストラで解消できます。このスタック オーバーフローの質問を参照できます (仮定bashまたは他の Bourne シェル スタイル スクリプト方言): Is there a "goto" statement in bash?
于 2013-02-26T07:51:35.300 に答える