2011-10-13 3 views
0

저는 쉘 스크립팅에 비교적 익숙합니다. 이제 며칠 동안이 오류가 발생했습니다. 문자열과 숫자 목록을 포함하는 파일의 내용을 읽고, 형식을 지정하고, 50 이하의 숫자를 출력하려고합니다.파일 이름을 스크립트에 인수로 전달합니다. 그러한 파일이나 디렉토리가 없습니다.

그러나 모든 명령은 셸에 입력 할 때 작동합니다. 스크립트에서 파일 이름을 인수로 전달할 때 "No such file or directory"오류가 계속 발생합니다.

belowFifty(){ 
    count=0 
    numbers=`cut -d : -f 3 < "$2"` #here is where the error occurs 
    for num in $numbers 
    do 
     if ((num<50)); 
     then 
     count=$((count+1)) 
     fi 
    done 
    echo $count 
} 

편집 : 여기

문제가되는 기능입니다 미안 내가 스크립트가 몇 가지 일을 언급하는 것을 잊었다. $ 1이 옵션이고 $ 2가 파일입니다. 그래서처럼 전화 해요 :

./script.sh m filename 

답변

1

시도 :

 
${2? 2 arguments are required to function belowFifty} 
numbers=$(cut -d : -f 3 < $2) 

나는 문제가 당신이 기능 를 호출하고 두번째 인수를 지정하지 않는 것입니다 생각한다. 함수 내에서 $ 2는 함수에 전달 된 인수이고 은 주 스크립트로 전달되지 않습니다.

+0

고마워요! 함수가 자신의 인수 집합을 사용하고 스크립트에 전달 된 인수를 사용하고 있다는 것을 알지 못했습니다. 이게 내 문제를 해결했습니다! –

0

"$2"을 지정하십시오. 함수에 전달되어 무시 된 "$1"의 내용은 무엇입니까? 내 강한 의혹은 당신이 이름으로 빈 문자열을 사용하여 파일을 열려고하고 있으며 그런 파일이 없으므로 오류 메시지입니다. 결과적으로 당신은 "$1"을 참조하려고했을 것입니다. 그렇다면, 당신은 아마 작성해야 :

numbers=$(cut -d : -f 3 < "$1") 

백 틱 표기는 일반적으로 $(...) 찬성 피해야한다.

+0

죄송합니다, 제발 내 편집을 참조하십시오. 명확하지 않은 것에 대한 나의 잘못. 나는 $ (...) 표기법을 시도했지만 여전히 같은 오류가 발생합니다. –

관련 문제