어제 문제
연습문제 – NOV1118.sh
디렉토리명을 입력하면 하위 파일 목록이 번호와 함께 출력.
번호를 입력받아 해당 번호에 해당하는 파일 정보 확인(ls -l 결과 출력)
# NOV1118.sh
#!/bin/sh
echo -n "디렉토리명 입력 : "
read dname
if [ -d $dname ]
then
echo "$dname 디렉토리가 존재합니다"
else
echo "$dname 디렉토리가 존재하지 않습니다"
exit 1
fi
ls -1 $dname | cat -n
echo -n "자세히 보고 싶은 파일의 번호를 입력하세요 : "
read num
fname=$(ls -1 $dname | sed -n "${num}p")
ls -l $dname/$fname
exit 0
수업 내용
[chown]
소유자 변경하기
** 문법
chown [옵션] 소유자:그룹명 대상
** 옵션
-R : 하위 디렉토리까지 모두 변경
[awk]
자료처리에 필요한 명령어
** 문법
awk [옵션] ‘[/검색어] {명령어}’ 파일
- 산술 연산
echo | awk ‘{print 1 + 2}’
-> 3 - grep
awk /itwill/ /etc/passwd
-> itwill:x:1000:1000:itwill:/home/itwill:/bin/bash - cut
awk -F: ‘{print $1}’ /etc/passwd
-> : 으로 분리된 첫번째 필드 출력
awk -F: ‘{print $NF}’ /etc/passwd
-> : 으로 분리된 마지막 필드 출력
awk -F: ‘/itwill/ {print $NF}’ /etc/passwd
-> itwill이 포함된 라인에서, : 으로 분리된 마지막 필드 출력
awk -F: ‘/itwill/ {print $(NF-1)}’ /etc/passwd
-> itwill이 포함된 라인에서, : 으로 분리된 마지막 필드 하나 이전 필드 출력
awk -F: ‘/itwill/ {print $1″—“$7}’ /etc/passwd
-> itwill—/bin/bash # 1번필드와 7번필드 사이 구분자를 내 맘대로 지정할 수 있다
grep itwill /etc/passwd | cut -d: -f1,7
-> itwill:/bin/bash # :이 같이 나왔다.
** sed나 awk에 변수 전달 시 변수로 인식시키는 방법 = 변수 옆을 single quote로 끊어주기
awk -F: ‘/’$username’/ {print $1}’ /etc/passwd
[연습문제 – 35.awk.sh]
유저명을 입력받고, 유저가 존재하면 아래와 같이 출력
유저명 : itwill 홈디렉토리 : /home/itwill 로긴쉘 : /bin/bash
# 35_awk.sh
#!/bin/sh
echo -n "유저명을 입력하세요 : "
read uname
check=$(awk -F: '/'$uname'/ {print $1}' /etc/passwd)
if [ "$uname" = "$check" ]
then
echo "유저가 존재합니다"
else
echo "유저가 존재하지 않습니다"
exit 1
fi
homeD=$(awk -F: '/'$uname'/ {print $6}' /etc/passwd)
loginS=$(awk -F: '/'$uname'/ {print $7}' /etc/passwd)
echo -n "유저명 : $uname"
echo -n "\t홈디렉토리 : $homeD"
echo "\t로긴쉘 : $loginS"
# 강사님 방법
awk -F: '/'^$uname'/ {print "유저명:"$1 " 홈디렉토리:"$6 " 로긴쉘:"$NF}' /etc/passwd
exit 0
[반복제어문]
반복문(for, while)의 흐름 제어
- continue : continue 뒤의 명령어를 실행하지 않고 반복문 첫 줄로 이동하여 다음 반복 수행
- break : break를 포함한 반복문만 중지
- exit : 프로그램 강제 종료(종료코드와 함께 전달)
#36_break.sh
#!/bin/sh
while [ 1 ]
do
echo -n "패스워드를 입력하세요 : "
read passwd
if [ $passwd = "1234" ]
then
echo "패스워드 인증 성공"
break
else
echo "패스워드가 틀렸습니다"
fi
done
exit 0
# 37_continue.sh
#!/bin/sh
# 1~10 출력, 5는 제외
for i in $(seq 1 10)
do
if [ $i -eq 5 ]
then
continue
fi
echo $i
done
echo "프로그램 종료"
exit 0
오라클리눅스(OEL) 7.9.0 다운
맨 위에 4.5GB 짜리만 받기
오라클 DB 12c R2 다운
맨 위에거만 linux x86 버전으로