0

引数に渡される特定の数のファイルを作成し、そのファイルに関連情報を入力するbashスクリプトを作成しようとしています。しかし、何らかの理由で正しく動作させることができず、グーグルで検索しても何も見つかりませんでした。

次のようなファイルを作成したい: FileName:

Prob_3_ch_17.cpp

次のように入力します。

/*
User: Johnny Smith
Prob: 3
Output: 
*/

最初のコマンド ライン引数は章番号です。2 番目が開始番号で、3 番目が終了番号です。したがって、次が実行された場合

sh ../FileMaker.sh 17 1 10

第 17 章用に、それぞれ適切なデータと適切なファイル名で満たされた 10 個のファイルが作成されます。これが私が思いついたスクリプトです。

#!/bin/bash

# Syntax:
# $1 = Chapter Number
# $2 = Starting Number
# $3 = Ending Number

CHAPTER=$1
FIRST=$2
LAST=$3
U_NAME="Johnny Smith"

# Name: Prob_$NUMBER_Ch_$1.cpp

for ((NUMBER=$FIRST; $NUMBER<=$LAST; $NUMBER++));
   do
      if [ -e "Prob_$NUMBER_Ch_$CHAPTER.cpp" ]; then
         echo "File Prob_$NUMBER_Ch_$CHAPTER.cpp already exists!"
      else
         echo "/* \n User: $U_NAME \n Problem: $NUMBER \n Output: \n */" >> "Prob_$NUMBER_Ch_$CHAPTER.cpp"
   done

ただし、実行されません。次のエラーが表示されます。

../FileMaker.sh: line 21: syntax error near unexpected token `done'
../FileMaker.sh: line 21: `done'

私はグーグルで調べて、他の人が同じ問題を抱えていることを発見しましたが、解決策の意味を完全には理解していませんでした. 誰か助けてくれませんか?私はシェル スクリプトが得意ではなく、このようなスクリプトを作成することで学習しようとしています。

ありがとうございます。

4

2 に答える 2

1

ほとんどのシェルset -xは上部に a を許可します。これは、実行中のスクリプトのトレースを示しています。

  1. ステートメントfiを閉じるには、末尾が必要です。if
  2. シェルの計算が必要です。NUMBER=$(expr $NUMBER + 1)理解できません$NUMBER++
  3. printfよりもコマンドの方が便利かもしれませんecho

ループ内で変数の使用が間違っていて、1 つのファイルしか作成していません。これは宿題のように思えるので、あなたがそれを理解できることを願っています.

于 2013-03-23T03:58:56.380 に答える