2013-03-23 7 views
0

인자로 전달되는 특정 수의 파일을 작성하고 해당 파일을 관련 정보로 채우는 bash 스크립트를 작성하려고합니다. 그러나 웬일인지 제대로 작동하지 못하고 인터넷 검색이 아무 것도 나타나지 않았습니다. 파일 이름 :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' 

내가 봤 다른 사람이 같은 문제가 있었 발견했습니다,하지만 나는 완전히 용액에 의미가 있었는지 이해하지 못했다. 누군가 나를 도울 수 있습니까? 나는 쉘 스크립팅에서 최고가 아니며, 이와 같은 스크립트를 작성하여 배우려고합니다.

고맙습니다.

+0

보다 단순한 질문을하거나 문제를 해결하기 위해 스크립트를 단순화하려고 할 수 있습니다. – danfuzz

답변

1

대부분의 쉘은 상단에 set -x을 허용합니다. 이것은 스크립트가 실행될 때 추적하는 것을 보여줍니다.

  1. if 문을 닫으려면 후행 fi이 필요합니다.
  2. 셸 수학에 NUMBER=$(expr $NUMBER + 1)이 필요하면 $NUMBER++을 이해할 수 없습니다.
  3. printf 명령은 echo보다 더 편리 할 수 ​​있습니다.

루프에서 변수를 잘못 사용하고 하나의 파일 만 생성합니다. 이게 숙제 같아서 알아낼 수 있기를 바랍니다.

+0

그랬지만 지금 다음과 같은 오류가 발생합니다. '../FileMaker.sh : line 15 : ((: NUMBER = : 구문 오류 : 피연산자가 예상됩니다 (오류 토큰은 "="))' – Cmertin

3

블록 및 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 스타일에 대한 example 11.12를 참조하십시오.

파일을 생성하려면 "Prob _"$ NUMBER "Ch"$ CHAPTER ".cpp"를 사용하십시오.

+0

고맙습니다, 당신의 답변을 upvote 하겠지만, 나는 명성이 15 점이 아니다. – Cmertin