簡體   English   中英

Bash腳本文件的創建和填充

[英]Bash-script File creation and fill

我正在嘗試編寫一個bash腳本,該腳本將創建一定數量的文件並傳遞給參數,並用相關信息填充該文件。 但是,由於某種原因,我無法使其正常工作,並且使用Google谷歌搜索后什么也沒發現。

我希望它創建如下文件:FileName:

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'

我搜尋了一下,發現其他人也遇到了同樣的問題,但是我不完全了解解決方案的含義。 有人可以幫幫我嗎? 我不是最擅長的Shell腳本編寫人員,而且我正在嘗試通過編寫此類腳本來學習。

提前致謝。

if塊和for循環的語法錯誤。 正確的語法是-

    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樣式,請參見示例11.12

要創建文件,請在所有位置使用“ Prob _” $ NUMBER“ Ch ” $ CHAPTER“ .cpp”。

大多數外殼在頂部都允許使用set -x 這顯示了腳本執行時的跟蹤。

  1. 您需要結尾的fi來關閉if語句。
  2. Shell數學需要NUMBER=$(expr $NUMBER + 1) ,它不理解$NUMBER++
  3. 您可能會發現printf命令比echo更方便。

您仍然會在循環中使變量使用錯誤,並且僅創建一個文件。 我希望您能弄清楚這似乎是家庭作業。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM