[유닉스고급] 09 8장 쉘스크립트 중급

과제 내용 : 09 8장 쉘스크립트 중급 유닉스고급(쉘스크립트)

김태양 1834041

0. 해야 할일

  • 문제 이해
  • 쉘 스크립트 작성

1. 문제 이해

1) 스크립트 실행하면서 그룹명을 입력 받아, 해당 그룹으로 사용자 계정을 생성하도록 쉘스크립트 를 보완하세요. 그룹명 없이 스크립트를 실행하면 시스템이 부여하는 그룹명을 사용하도록 함.

2) 사용자가 존재하는지 여부를 확인하여 만약 생성하려는 사용자 계정이 이미 있다면 계정 생성 불가 내용의 에러 메시지를 출력하고 다음과 유사한 스크립트 사용법까지 출력.

echo -e ‘Please input user id and password.\nUsage: #> sh adduser-script.sh “user01 user02” “pw01 pw02”’

3) (추가 점수) 기타 추가적인 보완을 통하여 스크립트의 완성도를 향상시켜 보세요.

museradd.sh

#!/bin/bash 
#./museradd.sh 2234000 2234099 
# gtiger00, gtiger01,gtiger02,....gtiger99 
 
i=$1 
j=$2 
while [ $i -le $j ] 
do 
     fix=gtiger${i:5:2} 
     $(useradd -g gbat -p openssl passwd $fix $fix) 
     i=`expr $i + 1` 
done 
exit 0

2. 쉘 스크립트 작성

문제 1)

#!/bin/bash 
 
a=$1 
b=$2 
c=$3

if [-z $k]
then 
	c=gbat #미리 사용되어 있는 그룹으로 한다고 가정하였기에
else		groupadd 로 미리 계정이 생성되어 있어야함
	echo "입력한 그룹으로 계정을 생성합니다"	
fi

while [ $a -le $b ] 
do 
     fix=gtiger${i:5:2} 
     $(useradd -g gbat -p openssl passwd $fix $fix) 
     i=`expr $i + 1` 
done 
exit 0

문제 2)

#!/bin/bash 
 
a=$1 
b=$2 
c=$3

check=/etc/passwd

if [-z $k]
then 
	c=gbat 
else		
	echo 
fi

while [ $a -le $b ] 
do 
     fix=gtiger${i:5:2} 
	 if[[$(cat $check | grep -i $fix)]]
	 then
	 		echo "$fix 가 이미 존재합니다."
			i=`expr $i + 1` 
	 else
		 $(useradd -g gbat -p openssl passwd $fix $fix) 
		 i=`expr $i + 1` 
done 
exit 0

문제 3)

추가문제

who | cut -d ' ' -f 1 | sort | uniq | wc -l

“who | uniq -w 1 | wc -l” 이렇게 사용하면 에러남

왜냐하면 uniq 의 w 옵션은 단어형식으로 구분하는 것이 아닌 문자형식으로 구분합니다. 즉 위의 옵션은 문자열의 앞글자 하나만을 비교하기에 계정의 길이가 다르면 올바르게 구별할 수 없습니다. 그렇기에 cut 옵션을 사용하여 공백을 기준으로 앞에 단어를 따로 구별해야 합니다.

또한 sort 옵션을 사용하는 이유는 uniq 알고리즘이 중복된 행이 존재할 경우 하나로 합치는 것이기에 검사하는 문자열의 앞뒤밖에 중복검사를 하지 않는다 즉 분산되어있는 중복부분은 제거하지 못합니다. 그러므로 sort 옵션을 이용하여 정렬을 해주어야 중복이 제가가 됩니다.

3. 후기

중복제거하는데 온 힘을 씀

카테고리:

업데이트:

댓글남기기