이것은 시작 bash 클래스의 숙제 문제의 일부입니다. passwd 파일을 가져와야합니다.이 파일은 passfile 변수로 처리 했으므로 특정 파일을 추출하고 다른 필드를 표시 할 수 있어야합니다. 아래의 명령문을 사용하여 CLI에서 수동으로 grep하면 제대로 작동합니다. 나는 모든 변수를 원하고 모든 것을 얻는다.If 문에서 grep을 사용하여 공백을 무시하고 모든 항목을 가져옵니다.
grep 1000 passfile | cut -c1-
그러나 스크립트에서이 작업을 수행하면 사용자 전체 이름의 첫 번째 '공백'에서 중지되거나 중단됩니다. John D. Doe는 내가 원할 때 3 줄을 반환 할 것입니다. 나는 i와 다음의 가치를 반향하여 이것을 보았다. 저를 제공
i = jdoe:x:123:1000:John
가 :
for i in `grep 1000 ${passfile} | cut -c1-
user=`echo $1 | cut -d : -f1`
userID=`echo $1 | cut -d : -f3`
예를 들어, 선이
jdoe:x:123:1000:John D Doe:/home/jdoe:/bin/bash
나는 다음과 같은 얻을 읽는 경우, 이용자가 jdoe입니다 UID가 509
하지만, 그 다음 줄에서 저는 R에서 시작합니다.
i , UID는 = R. 그래서 사용자가 R.이며, UID는 R.
다음 라인 사용자는 존슨 반환
i = Johnson:/home/jjohnson:/bin/bash
이다 passwd 파일이 많은 사용자를 너무 보유
/빈/bash는 I for 루프를 사용하여 모두 처리해야합니다. 나는 내가 그것을 얻을 수있는 공간을 무시하도록 할 수 있다면 그렇게 생각합니다. 그러나 리눅스에 대해 많은 것을 알지 못한다면 올바른 경로로 내려갈 지 확신 할 수 없습니다. 사전에 도와 주셔서 감사합니다.
'cut '은'-d' 구분 기호 옵션을 허용합니다. – knittl
@knittl : 예 - 입력 및 출력에 동일한 구분 기호를 사용합니다. 경우에 따라 입력에서 i- 구분 기호를 처리하고 출력에서 o- 구분 기호를 생성하는 것이 편리 할 수 있습니다. AFAIK, 그렇지 않습니다.당신은 또한 분야에서 공백의 문제에 직면합니다. –