[英]Replace certain token with the content of a file (using a bash-script)
[英]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
。 這顯示了腳本執行時的跟蹤。
fi
來關閉if
語句。 NUMBER=$(expr $NUMBER + 1)
,它不理解$NUMBER++
。 printf
命令比echo
更方便。 您仍然會在循環中使變量使用錯誤,並且僅創建一個文件。 我希望您能弄清楚這似乎是家庭作業。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.