2015-01-06 2 views
1

저는 예상대로 문자열을 연결하지 않고 작성중인 bash 스크립트가 있습니다. 나는 (스크립트에서) 폴더 경로의 미리 설정된 목록을 단일 문자열로 구분하여 하나의 공백으로 구분했습니다. 이 기능은 나중에 스크립트에서 훌륭하게 작동하며 예상대로 각 폴더 경로를 순환 할 수 있습니다.SH 스크립트 문자열 연결이 작동하지 않습니다.

사용자가 다른 폴더의 선택적 목록에 입력 할 수 있도록 허용하고 확인하려는 경로 목록에 추가하려고합니다. 다음은 내 코드와 명령의 출력은 다음과 같습니다

#!/bin/sh 
MOUNTPOINTS="/ /var /var/moodledata2" #Set the mount points to check for 

while getopts ":dh" opt; do 
     case $opt in 
       d) 
         DEBUG=true 
         ;; 
       h) 
         echo USAGE: diskspace \[-d\] \[\/path1 ...\] 
         exit 0 
         ;; 
       \?) 
         echo Incorrect syntax 
         ;; 
     esac 
     shift $((OPTIND - 1)) 
done 

if [ "$#" -gt 0 ]; then 
     for var in [email protected]; do 
       NEWMOUNTPOINTS .= $var 
       echo "${MOUNTPOINTS} ${var}" 
       echo "${NEWMOUNTPOINTS}" 
     done 
fi 

명령을 실행 ...

$ ./dt /home 
./dt: 22: ./dt: NEWMOUNTPOINTS: not found 
//var /var/moodledata2 /home 

내가 원래 MOUNTPOINTS .= ${var}MOUNTPOINTS .= "${var}"로했지만, 그들은 여전히 ​​같은 오류가 발생합니다. 나는 새로운 변수를 만들 수 있다고 생각했지만 위의 그림과 같이 그 변수가 작동하지 않았다. 나머지 스크립트는 계속 실행되지만 맨 위의 원래 MOUNTPOINTS으로 만 진행됩니다. 위의 경우에도 MOUNTPOINTS .= $var을 사용하더라도 변경되지 않습니다.

제공되는 명령 줄 인수로 생성 된 동적 문자열을 얻으려면 어떻게해야합니까? 문자열을 연결하려면

+0

** '**'루프가 실제로 예상대로 작동하고 있습니다. 루프가 끝난 후에 * 수행하고 싶다고 생각합니다. –

답변

1
NEWMOUNTPOINTS="${NEWMOUNTPOINTS} ${var} " 

이것은 변수를 연결해야합니다.

1

는 수행

  NEWMOUNTPOINTS+=" ${var}" 

그것은 현재 NEWMOUNTPOINTS라는 명령/기능을 실행하고 여기에 .= $var 인수를 전달합니다.

+0

./dt : 26 : ./dt : NEWMOUNTPOINTS + =/home : 찾을 수 없음 –

+0

게시 한 코드에서 오류가 발생합니까? 코드에서 26 번째 줄은'fi'이지만 오류는 사용자가 뭔가를 실행하고 있음을 보여줍니다. –

+0

죄송합니다. 스크립트에서 중복 된 부분을 제거했습니다. - 멈추는 줄은'NEWMOUNTPOINTS'가 실행되는 줄입니다. –