Bash-script文件创建和填充

时间:2013-03-23 03:56:58

标签: bash file loops creation

我正在尝试编写一个bash脚本,它将创建一定数量的文件并传递给参数,并用相关信息填充该文件。但是,出于某种原因,我无法让它正常工作,谷歌搜索没有任何结果。

我希望它能够创建如下文件: 文件名:

Prob_3_ch_17.cpp

填写如下:

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

第一个命令行参数是章节编号。第二个是起始编号,第三个是结束编号。因此,如果运行以下

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'

我用Google搜索并发现其他人遇到了同样的问题,但我并不完全明白解决方案的含义。有人可以帮帮我吗?我不是最好的shell脚本,我试图通过制作这样的脚本来学习。

先谢谢。

2 个答案:

答案 0 :(得分:3)

if block和for-loop的语法错误。正确的语法是 -

    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"
      fi
   done

有关循环的c样式,请参阅example 11.12

要创建文件,请在所有地方使用“Prob _”$ NUMBER“ Ch ”$ CHAPTER“.cpp”。

答案 1 :(得分:1)

大多数炮弹允许顶部有set -x。这将显示脚本在执行时的跟踪。

  1. 您需要尾随fi才能关闭if声明。
  2. Shell数学需要NUMBER=$(expr $NUMBER + 1),它不理解$NUMBER++
  3. 您可能会发现printf命令比echo更方便。
  4. 您仍然会在循环中使用错误的变量,并且只创建一个文件。我希望你能解决这个问题,因为这看起来像是家庭作业。