14일차는
- 리눅스의 쉘(Shell)
- 조건문
- 반복문에 대해서 학습하였다.
1.쉘(Shell)
(1) 쉘 스크립트의 선언부와 실행
- #!/bin/bash : bash header 선언부 - 개발자가 작성한 shell script가 bash 기발을 우선으로 작성되어졌음을 나타냄 → 자동으로 응용프로그램을 찾아가는 것이 아님
[root@localhost ~]
[root@localhost ~]
test.sh: empty
[root@localhost ~]
[root@localhost ~]
test.sh: a /bin/bash script, ASCII text executable, with no line terminatorsd
[root@localhost ~]
test.sh: Bourne-Again shell script, ASCII text executable
[root@localhost ~]
hi
[root@localhost ~]
hi
[root@localhost ~]
[root@localhost ~]
-rwxr-----. 1 root root 20 4월 27 10:44 test.sh
[root@localhost ~]
hi
(2) 변수
[root@localhost ~]
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@localhost ~]
/root
[root@localhost ~]
root
[root@localhost ~]
[\u@\h \W]\$
[root@localhost ~]
/root
[root@localhost ~]
xterm-256color
[root@localhost ~]
/dev/pts/1
[root@localhost ~]
root
- 사용자 정의 변수 (규칙 : 문자로시작, 공백이 없어야함) : 변수는 포인터의 결정판. 메모리 영역에 공간,주소를 할당하고 주소를 통해서 값을 가져옴.
[root@localhost ~]
[root@localhost ~]
10
[root@localhost ~]
echo $0
echo $1
echo $2
echo $3
echo $*
echo $#
echo $$
echo $?
[root@localhost ~]
-bash
1
2
3
1 2 3 4 5
5
1476
0
[root@localhost ~]
[root@localhost ~]
./argument.sh
1
2
3
1 2 3 4 5
5
2942
0
[root@localhost ~]
1476
(참고)read
[root@localhost ~]
echo -n "값 입력:"
read x
echo $x
[root@localhost ~]
[root@localhost ~]
값 입력:10
10
2.조건문
(1) test
- test는 크게 세가지 부분인 (1) 파일 시스템, (2) 문자 비교, (3) 숫자 비교로 나뉜다.
- shell test 명령어 -b 블록 파일인지 확인 후 $? 변수에 결과 값 저장
[root@localhost ~]
[root@localhost ~]
0
[root@localhost ~]
[root@localhost ~]
0
[root@localhost ~]
[root@localhost ~]
1
산술 비교 표
종류 | 설명 |
---|
-eq | 같으면 참 |
-ne | 같지않으면 참 |
-gt | > 이면 참 |
-ge | >= 이면 참 |
-lt | < 이면 참 |
-le | <= 이면 참 |
! | 참이면 거짓, 거짓이면 참 |
-a | 둘 다 같으면 참(AND) |
-o | 둘 중 하나만 참이면 참(OR) |
(2) if
(참고) Shell 스크립트에서 ; && &의 기능
- ; 앞의 명령어가 실패해도 다음 명령어가 실행
- && 앞의 명령어가 성공했을 때 다음 명령어가 실행
- & 앞의 명령어를 백그라운드로 돌리고 동시에 뒤의 명령어를 실행
if [ 조건 ]
then
조건 만족시 실행
fi
[root@localhost ~]
[root@localhost ~]
ls -l
[root@localhost ~]
[root@localhost ~]
ls -l
[root@localhost ~]
[root@localhost ~]
ls -l
[root@localhost ~]
[root@localhost ~]
합계 68 -rw-r--r--. 1 root root 11 4월 24 12:08 ? c -rwxr-x---. 1 root...
[root@localhost ~]
[root@localhost ~]
합계 68 -rw-r--r--. 1 root root 11 4월 24 12:08 ? c -rwxr-x---. 1 root...
(3) case
[root@localhost ~]
case $1 in
start|START)
echo $1
;;
stop|STOP)
echo $1
;;
*)
echo "start 또는 stop 만 입력하세요."
;;
esac
[root@localhost ~]
START
[root@localhost ~]
stop
[root@localhost ~]
start 또는 stop 만 입력하세요.
[root@localhost ~]
start(){
echo start
}
stop(){
echo stop
}
case $1 in
start|START)
start
;;
stop|STOP)
stop
;;
restart|RESTART)
stop
start
;;
*)
echo "[start,stop,restart] 만 입력하세요."
;;
esac
3. 반복문
(1) for
[root@localhost ~]
1
10
1032
1033
1037
[root@localhost ~]
> do
> ls -l /proc/$i/exe 2> /dev/null
> done
lrwxrwxrwx. 1 root root 0 4월 27 10:16 /proc/1/exe -> /usr/lib/systemd/systemd
lrwxrwxrwx. 1 root root 0 4월 27 10:16 /proc/10/exe
lrwxrwxrwx. 1 root root 0 4월 27 10:16 /proc/1032/exe -> /usr/sbin/sshd
lrwxrwxrwx. 1 root root 0 4월 27 10:16 /proc/1033/exe -> /usr/sbin/cupsd
lrwxrwxrwx. 1 root root 0 4월 27 10:16 /proc/1037/exe -> /usr/sbin/rsyslogd
...
(2) while : 조건을 만족하는 동안
#!/bin/bash
var=5
while [ $var -lt 10 ]
do
echo loop test
var=`expr $var + 1`
done
#!/bin/bash
while who | grep ^user > /dev/null
do
sleep 10
done
echo "user 님이 로그아웃하였습니다."
(3) until : 조건을 만족할 때까지
[root@localhost ~]
until who | grep ^user
do
sleep 10
done
echo "user 님이 지금 막 접속하셨습니다."