2013-04-10 2 views
1

Linux에서 쉘 스크립팅에 대한 질문이 있습니다. 나는이 코드가 몇 시간 동안 작동하도록 노력해 왔으며 이해가되지 않는 부분을 수행합니다. 이 코드의 목적은 사용자에게 csv 파일의 이름, gecos 및 그룹 값을 추가하는 것입니다. CSV 파일은 다음과 같이 포맷 : 그런 식으로 디버깅하기 쉬웠다로Linux scipt 변수가 올바르게 인식되지 않습니다.

U12341;Mario Speedwagon;docent 
U12342;Petey Cruiser;classA 

이 내 코드입니다, 내가 useradd와 일시에 그룹 기능을 제거했습니다. 그것은`그룹에 대한 잘못된 이름이었습니다. 그래서 나는 화면에 변수를 넣으려고했는데 아주 이상한 것으로 나타났습니다.

)n login (u12341), in gecos (Mario Speedwagon) en in groep (docent 
useradd: user 'u12341' already exists 
User u12341 is toegevoegd onder de naam Mario Speedwagon in groep docent 
)n login (u12342), in gecos (Petey Cruiser) en in groep (classA 
useradd: user 'u12342' already exists 

문자열의 첫 번째 문자를 통해 $ 그룹 후 문자를 넣어 것 같다

for actie in `more +2 users.csv | tr " " "_"` 
do 
login=`echo $actie | tr ";" ":" | cut --delimiter=: --field=1 | tr '[A-Z]' '[a-$ 
groep=`echo $actie | tr ";" ":" | cut --delimiter=: --field=3`; 
gecos=`echo $actie | tr ";" ":" | cut --delimiter=: --field=2 | tr "_" " "`; 

echo "In login ($login), in gecos ($gecos) en in groep ($groep)" 
sudo useradd $login -c "$gecos" 
echo "User $login is toegevoegd onder de naam $gecos in groep $groep" 

done 

는 이상한 출력했다. 나는 그룹 이름과 같은 변수를 사용하여 내 문제는 정확히 동일하다고 생각합니다.

다른 모든 것은 잘 작동하는 것처럼 보입니다. 그룹 코드없이 스크립트를 실행하면 사용자에게 올바른 gecos 데이터가 추가됩니다.

이전에 누군가에게 이와 같은 문제가 발생 했습니까? 미리 감사드립니다.

답변

1

Windows 컴퓨터에서 csv 파일을 만들었습니까? Windows는 캐리지 리턴 + 개행 (\r\n)으로 끝나는 반면 Linux는 줄 바꿈 (\n) 만 사용합니다. 내 생각 엔 groep 변수의 각 줄 끝에서 캐리지 리턴 \r이 포함 된 것 같습니다. 그런 다음 변수를 반향 출력하면 \n이없는 \r은 커서를 다음 줄로 이동하지 않고 줄의 시작 부분으로 보냅니다. (설명해 보려면 echo -e "Here's a line of text to print with a \rcarriage return in the middle."을 시도하십시오)

CR을 제거하는 자동 방법을 잘 모릅니다. (찾을 수 있는지 만 알 수 있습니다.)하지만 sed 또는 something을 통해 파일을 실행할 수 있습니다. \r의 모든 항목을 제거하십시오.

편집 :
옵션 1 : 설치 dos2unix (표준)
옵션 2 : tr -d '\r' <input.file> new.file (here에서 이것을 해제)
옵션 3 : 분명히 단지 cat oldfile.csv > newfile.csv를 실행하면 캐리지 리턴을 제거합니다. 테스트 할 파일이 없지만 시도해볼 수 있습니다.

+0

실례로 문제가있는 것으로 보이는 귀하의 예를 시험해 보았습니다. 텍스트 편집기에 표시되지 않기 때문에 삭제 방법을 찾을 수 있는지 보겠습니다. 편집 : 내가 말한 것처럼 파일 복사를 시도했지만 문제가 여전히 발생합니다. –

+0

어느 쪽이든 나는 CSV 파일을 변경할 수 없다고 생각합니다. –

+0

'groep' 변수를 얻는 파이프 끝에'tr -d '\ r "를 사용할 수 있습니다. – iamnotmaynard

관련 문제