1. 스크립트 실행하면서 그룹명을 입력받아, 해당 그룹으로 사용자 계정을 생성하도록 쉘 스크립트를 보완하세요. 그룹명 없이 스크립트를 실행하면 시스템이 부여하는 그룹명을 사용한다
1 i=$1
2 j=$2
3 k=$3
4
5
6 if [[ -z $k ]]
7 then
8 k=defaultgroup #파라미터값이 없다면 기본그룹지정
9 echo "1.${k}으로 그룹이 지정되었습니다."
10
11 elif [[ `cat /etc/group | grep ${k} | wc -l` == 0 ]] #중복되지 않았다면 k값으로 그룹생성
12 then
13 groupadd $k
14 echo "2.${k}으로 그룹이 지정되었습니다."
15
16 else
17 then
18 echo "3.입력하신 그룹이 이미 존재합니다." #k값이 중복되었다면 중복메시지 출력
19 echo "스크립트를 종료합니다." #출력후 스크립트 종료
20 exit 1
21 fi
3행 : 그룹명을 입력받기 위해 세번째 파라미터 값을 k에 넣는다.
6행~9행 : 비교 연산자 -z를 사용하여 입력받은 k값이 null인지 확인한다. null값이면 참 if문을 실행하여 k값에 defaultgroup을 넣는다.
11행~14행 : 위에 if문에서 k=null값이 아니면 elif문을 실행하여 입력받은 k값을 cat | grep으로 있는지 표준 출력,
파일의 정보를 출력해주는 wc명령어와 행만 출력해주는 l 옵션을 사용해 파이프로 연결하여 숫자를 반환한다.
그 값이 0이면 중복되지 않은 것으로 elif문을 실행하여 groupadd 해준다.
16행~21행 : 위 elif문이 거짓이 나왔다면 else를 사용하여 그룹명이 중복되었기 때문에 그룹이 이미 존재한다는 메시지를 출력한다.
+. 보완 : 사용자는 그룹명을 추가하고 싶었기 때문에 defaultgroup으로 그룹을 지정하지 않고 exit으로 스크립트를 종료해준다.
2. 사용자가 존재하는지 여부를 확인하여 만약 생성하려는 사용자 계정이 이미 있다면 계정 생성 불가 내용의 에러 메시지를 출력하고 다음과 유사한 스크립트 사용법까지 출력
echo -e ‘Please input user id and password.\nUsage: #>sh adduser-script.sh “user01 user02”“pw01 pw02”'
22 while [ $i -le $j ]; do
23 fix=testuser${i:5:2}
24 if [[ `cat /etc/passwd | grep $fix | wc -l` == 0 ]]; then
25 echo "검증 : 존재하지 않음 ${fix}"
26 $(useradd -g $k -p `openssl passwd $fix` $fix)
27 echo "유저 : 추가됨${fix}"
28 echo "--------------------------------------------"
29 else
30 echo "$fix 는 중복입니다"
31 echo "사용법: ./file.sh 1234000 1234099 GroupName"
32 fi
33 i=$(expr $i + 1)
34 done;
35 exit 0
22행 : while 문에서 정수 비교 연산자 -le (작거나 같다)를 사용하여 while문을 돌려준다.
33행에서 한번 돌릴 때마다 i값에 1을 더해준다. 계속 돌리고 j값을 넘어서면 while문 조건식에서 거짓이 되어 빠져나오게 된다.
24행 : 1번 문제 11행에서 사용하였던 그룹명 중복 확인 조건문을 사용한다. 참이면 if문을 실행하여 26행 useradd를 실행하게 된다.
26행 : if문이 참이라면 useradd 명령이 실행된다. -g 옵션에 k값을 넣고 1번 문제에서 k값을 입력받지 않았으면 defaultgroup, 입력받았으면 그 값이 그룹으로 지정된다.
29행~32행 : 위 if문에서 중복되었다면 거짓으로 else구문으로 넘어간다. 입력한 아이디가 중복되었다는 문구를 출력하고
33행 : while문을 입력받은 i파라미터부터 j파라미터까지 실행하기 위해 i 값에 + 1 수행
3. 기타 추가적인 보완을 통하여 스크립트의 완성도를 향상해 보세요.
1.1번에서 입력받은 그룹명이 중복이라면 사용자에게 중복이라는 메시지를 출력하고 exit을 사용하여 스크립트를 종료한다.
18 echo "3.입력하신 그룹이 이미 존재합니다." # k값이 중복되었다면 중복메시지 출력
19 echo "스크립트를 종료합니다."
20 exit 1 #출력후 스크립트 종료
2. 각 실행문마다 사용자가 알 수 있게 실행문 성공 여부에 따라 메시지를 출력해준다.
각 if문 elif문 else문에 수행 여부에 따른 메시지를 출력 해 준다.
9 echo "1.${k}으로 그룹이 지정되었습니다."
14 echo "2.${k}으로 그룹이 지정되었습니다."
18 echo "3.입력하신 그룹이 이미 존재합니다."
19 echo "스크립트를 종료합니다."
25 echo "검증 : 존재하지 않음 ${fix}"
27 echo "유저 : 추가됨${fix}"
30 echo "$fix 는 중복입니다"
31 echo "사용법: ./file.sh 1234000 1234099 GroupName"
3. 결과
4. 중간고사 마지막 문제 답을 조*운 군의 도움으로 해결하였습니다. 중복 제거하고 지금 현재 시스템에 로그인한 사용자 수를 알아보는 문제의 답입니다. w를 사용하면 안 되고 who 명령어를 사용하여야 합니다. 그 이유는 무엇인가요?
w명령어와 who명령어의 차이는
w는 첫 번째 라인에 시스템 메타정보 두 번째 라인에 칼럼명을 추가로 띄워서
uniq | wc -l 하였을 때 사용자수 +2 가 된다.
아래 사진처럼 사용자 정보만 띄우는 who와 다르게 메타정보, 칼럼명이 나오기 때문이다.
하지만 w명령어도 h옵션을 주어 아래 사진과 같이 메타정보와 칼럼명을 생략할 수 있다.
'22년 가을학기 > 유닉스 고급' 카테고리의 다른 글
8.시스템 관리 쉘스크립트 (0) | 2022.11.16 |
---|---|
7. 쉘스크립트 실무 (0) | 2022.11.13 |
5.파일 처리 명령어 (0) | 2022.10.13 |
4.문자열 검색 명령어 (0) | 2022.09.29 |
3.쉘스크립트 기초 문법 (0) | 2022.09.25 |