2017-05-05 1 views
1

bash에서 다음 코드를 실행하려고합니다. 일한다고 가정하고 있지만 그렇게하지는 않습니다. 해결하도록 도와 줄 수 있습니까? 나는 프로그래밍으로 시작하고있다. 코드는 이것이다 :bash에서 반복이 작동하지 않습니다.

for i in {1:5} 
do 
    cd path-to-folder-number/"$i"0/ 
    echo path-to-folder-number/"$i"0/ 
done 

내가 (10,20..50를) 번호가 폴더를 반복 할, 그래서 그 경로에 폴더 "에서 디렉토리를 변경 -number/10/"to"path-to-folder-number/20/".etc

다음과 같이 바꿉니다. 그러나 .. 아직 작동하지 않습니다. 스크립트가 적용되면 내가 얻을 : 최대를 들어

can't cd to path-to-folder-number/{1..5}0/ 
+3

{1..5}; do echo $ i; done –

+0

@JohnC 나는 그것을했다. 그러나 얻는다 : path to to-folder-number/{1..5}에 cd 할 수 없다. 0/약간의 스크립트를 바꾼다. 다시 게시판을 보아라. – santimirandarp

+3

@santimirandarp 그것은 당신을 제안한다. bash는 사용하지 않지만 중괄호 확장을 지원하지 않는 다른 쉘은 사용합니다. 스크립트의 세방 라인은 무엇이며 어떻게 실행합니까? –

답변

1

여기에는 세 가지 문제가 있다고 생각합니다. 잘못된 쉘, 범위에 대한 잘못된 구문, 그리고 만약 당신이 그 문제를 해결했다면, 당신이 원하는 것을하지 않고 계속되는 cd의 문제에 봉착하게 될 것입니다.

  • 쉘 문제

    sh 대신 bash으로 스크립트를 실행하는 것입니다. 일부 시스템에서는 sh은 실제로 bash이지만 (POSIX 호환 모드로 실행되는 일부 고급 기능이 해제되어 있음), 사용자 시스템에서는 의 bash 확장자 인이없는 기본 쉘이라고 생각합니다.

    스크립트가 실행되는 쉘을 제어하는 ​​가장 좋은 방법은 시작 부분에 어떤 인터프리터와 함께 실행 할지를 나타내는 "shebang"행을 추가하는 것입니다. bash의 경우 #!/bin/bash 또는 #!/usr/bin/env bash이됩니다. 그런 다음 스크립트를 $ PATH에있는 디렉토리에 두거나 스크립트 경로를 명시 적으로 지정하여 스크립트를 실행하십시오 (예 : 디렉토리가 동일한 경우 ./scriptname). 이 아니면 sh scriptname으로 실행하십시오. 이는 shebang을 무시하고 기본 셸을 사용하기 때문에 작동하지 않습니다.

    ("shebang"이라는 이름은 줄이 시작하는 "#!"문자에서 오는 이름입니다. "#"문자는 "sharp"라고도하며 "!"는 "bang"이라고도합니다. 그것은 "당면한"로 약칭됩니다 "날카로운 쾅"). 배쉬

  • 있어, 중괄호 확장의 범위의 정확한 구문 {1..5}하지 {1:5}이다. 중괄호 확장은 bash 확장이므로 올바른 쉘을 얻는 것이 중요한 이유입니다. 당신이 얻을 때

  • 마지막으로

    , 실제로 아직에 실행하지 않은 문제 만은 처음 두 문제를 해결 할 수 있습니다 : 당신은 등, 다음 path-to-folder-number/20/path-to-folder-number/10/ 당신에게 cd, 그리고 cd는 다시 보내고 없습니다 사이의 원래 디렉토리, 그래서 경로 대 폴더 번호가 상대적인 경우 (즉,"/"로 시작하지 않음), cd에서 path-to-folder-number/10/path-to-folder-number/20/path-to-folder-number/30/path-to-folder-number/40/path-to-folder-number/50/으로 시도 할 것입니다.

    스크립트에서 cd을 사용하는 IMO는 일반적으로 잘못 될 수있는 여러 가지 이유로 나쁜 생각입니다. 스크립트가 어느 지점에 있는지를 추적하기가 쉽습니다. 어떠한 이유로 든 cd이 실패하면 나머지 스크립트는 잘못된 위치에서 실행됩니다. 상대 경로로 지정된 파일이있는 경우 원래 경로가 아닌 cd 위치에있는 경로는 무효화됩니다.

    스크립트 내에서 파일 위치를 나타 내기 위해 명시 적 경로를 사용하는 것이 훨씬 약합니다. 예를 들어, cd "path-to-folder-number/${i}0/"; ls 대신 ls "path-to-folder-number/${i}0/"을 사용하십시오.

1

이 구문은 범위 :

for i in {1..5} 
do 
    cd path-to-folder-number/"$i"0/ 
    echo $i 
done 

그래서 교체 :

+0

당신이 옳다고 생각합니다. 그러나 작동하지 않습니다. ** 얻을 수 있습니다 : ** 경로 - 투 - 폴더 번호/{1..5}로 cd 할 수 없습니다. 0/약간의 스크립트를 변경하십시오. 다시 게시 – santimirandarp

1

..와 정확히 당신이 사용할 수 있습니다 원하는 것을 얻으려면 :

for i in 10 {20..50} 
do 
    echo $i 
done 
+0

나는 OP가 10, 20, 30, 40 및 50을 원한다고 생각합니다. 10, 20, 21 등이 아니라 49, 50 ... 즉 {{1..5} 0' – Sundeep

+0

맞다.하지만 나는 그 질문을 다시 형식화한다. 나는 그것이 바뀌 었다고 생각한다. 그렇지 않습니까? – santimirandarp

1

또한 seq 사용할 수있는 난에 대한

for i in $(seq 10 10 50); do 
    cd path-to-folder-number/$i/ 
    echo path-to-folder-number/$i/ 
done 
관련 문제