2014-07-23 4 views
0

관리 클래스에서 centOS를 사용하고 있습니다. 이해할 수없는 이유로 여기있는 모든 답변을 금기시하고 싶지 않습니다. . 그러나 나는 길을 따라 약간의 설명과 함께 올바른 방향으로 조금 움직여 주셔서 감사합니다.특정 uid 범위, 식별 된 사용자 ID 목록, 사용자 정의 사용자 주석 및 사용자 정의 기본 그룹이있는 50 명의 사용자를 추가해야합니다.

나는 50 개의 userid의 user_list라는 내 명단을 읽고 5000에서 5049 사이의 UID를 할당하기 위해 쉘 스크립트를 작성하려고한다. "Regular system user"에 대한 주석을 제공하고 각 사용자를 미리 정의 된 system_users의 1 차 그룹.

I가 마음에 다음 명령을

while 루프의 무언가의 UID 범위를 유지하기 위해 5000 초기화 카운터

0으로 초기화 카운터 내 USER_LIST 파일의 처음부터 시작 마지막 항목

for i in `cat user_list|cut -d" " -f1 (this file only has a single column of userid's ranging 0 through 49 so only one field needed)` 

echo $i 
grep_output=`grep $i /etc/passwd` 
if [ -z $grep_output ]; then 

useradd -u $(counting number from the range above) -g system_users -c "Regular system user" -s /local/bin/sudosh $(user# from user_id file) 

과에 내 USER_LIST 파일에 나열된 각 사용자에 대해이 명령을 반복 할 것이다

I에게 w ould 요청에 따라 더 많은 정보를 제공하게되어 기쁩니다. 나는 루프에서 고생하고 그래서 약간의 도움을 원했다.

+0

그것은 금기가 아니며 항상 발생합니다. – Typo

+0

나는 asnwers를 훔치지 않는다는 자부심을 많이 가지만 여기는 저에게 곤란을 겪었습니다. 지금까지 시도한 많은 계정과 디렉토리를 삭제해야했습니다. – user3870374

+1

이제 하이퍼 바이저의 가상 머신 스냅 샷 기능에 대해 배울 수있는 좋은 시간입니다. 사용하고 있습니다. –

답변

1

에만 글로벌 방향이지만 :

#!/bin/bash 

n=0 
cat user_list | while read name; do 
    grep_output=$(grep "$name" /etc/passwd) 
    if [ -z "$grep_output" ]; then 
     echo useradd -u $((5000+n++)) -g system_user -c "Regular User" \ 
        "$name" 
    fi 
done 

당신은 아마 실종 된 두 가지 중요한 요소가있다. 먼저 read ...을 사용하여 파일 줄을 읽습니다 (사용자 이름에 공백이 없다고 가정). 그런 다음 더 중요한 것은 bash 연산을 사용하여 $((5000 + n++))을 계산합니다. n++이라는 표기는 C의 회상이며 post increment이라고합니다. 계산을 수행하는 데 n의 값이 필요하며 이면이 증가합니다. 는 좀 너무

인용 위의 코드는 그 결과 생산 고정 : 파일에 고양이 않고,

sh$ cat user_list 
sylvain 
john 
paul 
george 
ringo 
sh$ ./l.sh 
useradd -u 5000 -g system_user -c Regular User john 
useradd -u 5001 -g system_user -c Regular User paul 
useradd -u 5002 -g system_user -c Regular User george 
useradd -u 5003 -g system_user -c Regular User ringo 
+0

이것은 내 작업 매개 변수에 맞는 것 같습니다. 내 가상 환경에서 테스트하고 어떻게 진행되는지 살펴 보겠습니다. 나는 항상 루프를 설정하고 반복을 제어하는 ​​방법에 매달린 것처럼 보인다. 루핑 논리를 사용하여 목록을 작성하고 목록을 생성하고 useradd 함수에 즉시 전달하려고 시도했지만 유감스럽게 생각했지만 너무 어려웠습니다. – user3870374

0

이 내 간단한 스크립트 버전을하는 동안 읽기

#!/bin/bash 

    uarray=($(seq 5000 5049)) 

    n=0 

    for i in $(<userlist);do 
     if ! grep $i /etc/passwd >/dev/null; then 
      echo "useradd -u ${uarray[$n]} -g system_user -c "Regular User" $i" 
     fi 
     ((n++)) 
    done 

출력

bash create.bash 
    useradd -u 5000 -g system_user -c Regular User sylvain 
    useradd -u 5001 -g system_user -c Regular User john 
    useradd -u 5002 -g system_user -c Regular User paul 
    useradd -u 5003 -g system_user -c Regular User george 
    useradd -u 5004 -g system_user -c Regular User ringo