2012-11-29 6 views
2

나는 유닉스 수업에 대한 소개를하고 있으며 최종 과제에 매달렸다. 스크립트가 실행될 때 입력되는 파일 이름의 파일 확장명을 변경하는 스크립트를 작성해야합니다. 새 파일 확장자는 스크립트가 실행될 때도 입력됩니다. 스크립트는 chExt1.sh를 호출합니다. 스크립트가 첫 번째 입력에 주어진 파일 확장자에 두 번째 입력 파일의 확장자를 변경하는 가정입니다유닉스에서 파일 확장명을 변경하십시오.

./chExt1.sh cpp aardvark.CPP 

다음과 같이 스크립트의 우리의 첫 시도가 실행됩니다. 파일 이름에 어떤 파일 확장자가 주어 지거나 새 확장자로 제공되는 파일 확장자가 무엇인지는 중요하지 않으며 대문자를 소문자로만 변경하는 것도 아닙니다. 주어진 경우 희망에서 다음이 아주 명확하게하기 :

./chExt1.sh istink helpme.plEaSe 

스크립트는 helpme.plEaSe가 helpme.istink을 변경합니다. 나는이 포럼과 구글을 검색해 보았고 내가 찾은 여러 가지 예를 시험해 보지 않았다. 아래는 내가 시도한 예제와 현재 가지고있는 예제 중 일부입니다. 현재

#!/bin/sh 
fileExtension="$1" 
shift 
oldName="$2" 
shift 
newName=${oldName%%.*}${fileExtension} 
echo $newName 

에코는 작동하는지 확인 만하고, 나는 그것이 내가 그것을 저장하는 MV를 추가하는거야 작업을 진행합니다. 내가 시도 기타 :()로

newName=`${oldName%.*}` 
newName=`${oldName#.*}` 
sed 's/\.*//' $oldName > $newName 

내가 사용한 나오지도 다른 일부를 찾을 수 없습니다하지만 그들은 백 슬래시을 많이 참여하고 * 거기에.. 내가 입력 할 파일 확장자를 알지 못해서 basename 명령을 시도하지 않았고 내가 본 예제는 당신이 제거하고 싶었던 것을 지정해야한다는 것을 요구했습니다. 내가 사용한 다른 견적을 모두 나열하지는 않았지만 많이 시도했습니다. 내 명령은 sed 명령을 사용하는 방법을 우리가 클래스에서 사용하는 방법을 알고 있어야하지만 내가 그것을하려고 할 때 나는 파일의 끝을 격리하지 않으며 나는 (그것이 너무 오래 걸리기 때문에) 그것을 믿는다. 전체 파일을 살펴보고 내가 찾은 것을 계속 한 이유가 무엇인지 찾고 있습니다. * 패턴으로. 당신이 줄 수있는 anyhelp 주셔서 감사합니다.

+0

[man rename] (https://www.google.com/search?q=man+rename&oq=man+rename&aqs=chrome.0.57j60l3j65l2.2208&sourceid=chrome&ie=UTF-8) –

+1

샘플 이름 바꾸기 -ns/\ .txt $/\. aaa/* .txt' –

답변

1

shift은 위치 매개 변수를 이동하므로 shift를 호출 한 후 두 번째 매개 변수 ($ 2)가 첫 번째 ($ 1)가됩니다. 두 번째 이동은 매개 변수에 대한 액세스가 완료되었으므로 필요하지 않습니다. 변경 사항을 제거하려면

#!/bin/sh 
fileExtension="$1" 
oldName="$2" 
newName=${oldName%%.*}${fileExtension} 
echo $newName 

또는 $ 2를 $ 1 (으)로 변경해야합니다.

#!/bin/sh 
fileExtension="$1" 
shift 
oldName="$1" 
newName=${oldName%%.*}${fileExtension} 
echo $newName 

그러나 새 파일 이름에는 여전히 점이 누락되어 있습니다. 그것은 독자를위한 운동으로 남아 있습니다.

+0

대단히 감사합니다. 두 번째 교대 만 삭제했지만 작동하지 않았습니다. 하지만 2 달러를 1 달러로 변경하면 효과가있었습니다. 그리고 내가 점을 놓쳤다는 것을 지적 해 주셔서 감사합니다. 아마도 그것을 포기하지 않고 과제를 끝까지 진행했을 것입니다. – gimpdogg

+0

"두 번째 이동을 삭제하려고했습니다." 두 번째 교대는 효과가 없습니다. 계속 유지하거나 삭제할 수 있습니다. 어느 쪽이든 상관 없습니다. 해결책은 $ 2를 $ 1로 변경하거나 _first_ 교대를 삭제하는 것입니다. 문제가 해결되면 내 대답을 선택하십시오. – Enrico

관련 문제