for 문
형식 :
for 변수 in 값 ... <-- 변수의 값이 있으면 참
do
참일때 실행할 명령문
done
ex)
# for i in 1 2 3
> do
> printf "i = %d" $i
> printf "\n"
> done
i = 1
i = 2
i = 3
# for i in $(seq 5)
> do
> printf "i = %d\n" $i
> done
i = 1
i = 2
i = 3
i = 4
i = 5
=====================================================
LAB> for 문을 이용해서 사용자를 자동으로 생성해보자.
사용자 : user1 ~ user100
비밀번호 : 계정명2014 ex) user1 -> user12014
# for i in $(seq 100)
> do
> useradd user$i
> echo user${i}2014 | passwd --stdin user$i > /dev/null 2>&1
> done
# ssh user100@localhost
user100@localhost's password:
$ id
uid=5098(user100) gid=5099(user100) groups=5099(user100) context=user_u:system_r:unconfined_t
- for문을 이용한 사용자 삭제
# for i in $(seq 100)
> do
> userdel -r user$i
> done
=====================================================
# i=1
# for((i=0; $i <= 5; i++))
> do
> echo "i = $i"
> done
i = 0
i = 1
i = 2
i = 3
i = 4
i = 5
# i=0
# while (( $i <= 5 ))
> do
> echo "i = $i"
> i=$(( $i + 1 ))
> done
i = 0
i = 1
i = 2
i = 3
i = 4
i = 5
# for((i=0; i <= 5; i++))
> do
> for((j=0; j <= 5; j++))
> do
> printf " j = %d " $j
> done
> echo ""
> done
j = 0 j = 1 j = 2 j = 3 j = 4 j = 5
j = 0 j = 1 j = 2 j = 3 j = 4 j = 5
j = 0 j = 1 j = 2 j = 3 j = 4 j = 5
j = 0 j = 1 j = 2 j = 3 j = 4 j = 5
j = 0 j = 1 j = 2 j = 3 j = 4 j = 5
j = 0 j = 1 j = 2 j = 3 j = 4 j = 5
=========================================================
LAB> 이중 for문을 이용해서 아래 구구단 프로그램을 짜시오.
쉘에서 곱하기 : $(( 2 * 2 ))
printf
echo
2 x 1 = 2 3 x 1 = 3 4 x 1 = 4
2 x 2 = 4 3 x 2 = 6 4 x 2 = 8
: : :
: : :
2 x 9 = 18 3 x 9 = 27 4 x 9 = 36
for((i=1; i <= 9; i++))
do
for((j=2; j <= 4; j++))
do
printf " %d x %d = %2d " $j $i $((j*i))
done
echo ""
done
=========================================================
=========================================================
LAB> 이중 for문을 이용해서 * 프로그램을 짜시오.
printf \*
*
**
***
****
*****
# for((i=1; i <= 5; i++))
> do
> for((j=1; j <= i; j++))
> do
> printf \*
> done
> echo ""
> done
*
**
***
****
*****
=========================================================
=========================================================
LAB> 이중 for문을 이용해서 * 프로그램을 짜시오.
--> 해보길..
공백공백공백공백*
공백공백공백**
공백공백***
공백****
*****
*
**
***
****
*****
=========================================================
=========================================================
LAB> 이중 for문을 이용해서 * 프로그램을 짜시오.
--> 해보길..
*****
****
***
**
*
=========================================================
if [ 조건문 ]
then
참일때 실행할 명령문1
fi
이외에 다른 방법으로 쓰는 방법은 아래와 같다.
[ $a = $b ] && 명령문1 || 명령문2
[ $a = $b ] && {
명령문1
명령문2
명령문3
:
:
} || {
명령문1
명령문2
명령문3
..
..
}
=======
# a=1
# b=2
# c=3
# if [ $a -eq $b -o $a -ne $c ]
> then
> echo true
> else
> echo false
> fi
true
# if [ $a -eq $b -a $a -ne $c ]
> then
> echo true
> else
> echo false
> fi
false
# if [ ! $a -eq $b -a $a -ne $c ]
> then
> echo true
> else
> echo false
> fi
true
# if [ $a = $b ]
> then
> echo true
> else
> echo false
> fi
false
# if [ $a = $z ]
> then
> echo true
> else
> echo false
> fi
-bash: [: 1: unary operator expected
false
# if [ "$a" = "$z" ]
> then
> echo true
> else
> echo false
> fi
false
# install /dev/null checkpasswd.sh
# vi checkpasswd.sh
-- checkpasswd.sh --
#!/bin/sh
read -p "input password 1 : " passwd1
read -p "input password 2 : " passwd2
if [ $passwd1 = $passwd2 ]
then
echo true
else
echo false
fi
-- checkpasswd.sh --
# ./checkpasswd.sh
input password 1 : 123
input password 2 : 123
true
# ./checkpasswd.sh
input password 1 : 123
input password 2 : 000
false
# ./checkpasswd.sh
input password 1 : 123
input password 2 : <-- 아무값도 입력하지 않았다면 오류발생
./checkpasswd.sh: line 9: [: 123: unary operator expected
false
# vi checkpasswd.sh
-- checkpasswd.sh --
#!/bin/sh
read -p "input password 1 : " passwd1
read -p "input password 2 : " passwd2
if [ "$passwd1" = "$passwd2" ]
then
echo true
else
echo false
fi
-- checkpasswd.sh --
- 아무값도 입력하지 않아도 에러가 발생하지 않는다.
# ./checkpasswd.sh
input password 1 : 123
input password 2 :
false
##########
## case ##
##########
[root@localhost ~]#
[root@localhost ~]# a=1
[root@localhost ~]# case $a in
> 1 ) echo "a is 1" ;;
> 2 ) echo "a is 2" ;;
> 3 ) echo "a is 3" ;;
> esac
a is 1
[root@localhost ~]# a=3
[root@localhost ~]# case $a in
> 1 ) echo "a is 1" ;;
> 2 ) echo "a is 2" ;;
> 3 ) echo "a is 3" ;;
> esac
a is 3
[root@localhost ~]# a=2
[root@localhost ~]# case $a in
> 1 ) echo "a is 1" ;;
> 2 ) echo "a is 2" ;;
> 3 ) echo "a is 3" ;;
> esac
a is 2
====================================================
LAB> case ~ esac 문을 가지고 mydaemon.sh 프로그램을
짜보자.
==== 위치매게변수 ====
명령어 인자1 인자2 인자3 인자4
$0 $1 $2 $3 $4
| |
+------------------+
$#=4
ex)
/etc/init.d/crond start <-- $1 ??? : start
==== 위치매게변수 ====
# install /dev/null /etc/init.d/mydaemon.sh
# vi /etc/init.d/mydaemon.sh
-- /etc/init.d/mydaemon.sh --
#!/bin/sh
argc=$#
# if [ $# -eq 0 ] <-- 아래와 동일하다.
if [ $argc -eq 0 ]
then
echo "Usage : `basename $0` {start|stop|restart}"
exit 1
fi
case $1 in
"start" ) echo "starting daemon ..." ;;
"stop" ) echo "stopping daemon ..." ;;
"restart" )
echo "stopping daemon ..."
echo "starting daemon ..." ;;
esac
-- /etc/init.d/mydaemon.sh --
# /etc/init.d/mydaemon.sh
Usage : mydaemon.sh {start|stop|restart}
# /etc/init.d/mydaemon.sh start
starting daemon ...
# /etc/init.d/mydaemon.sh stop
stopping daemon ...
# /etc/init.d/mydaemon.sh restart
stopping daemon ...
starting daemon ...
====================================================
====================================================
LAB> case ~ easc 문을 이용해서 메뉴 만들기
스크립트명 : menu.sh
1. 디스크 사용량 보기
2. 현재 디렉토리 파일 출력
3. 전체 프로세스 보기
4. 네트워크 상태 보기
q) 종료
=> (1 ~ 4, q ) :
# install /dev/null menu.sh
# LANG=C
# vi menu.sh
-- menu.sh --
#!/bin/sh
clear
while :
do
cat << END
1. 디스크 사용량 보기
2. 현재 디렉토리 파일 출력
3. 전체 프로세스 보기
4. 네트워크 상태 보기
q) 종료
END
read -p " => (1 ~ 4, q ) : " menu
case $menu in
1 ) df; df -i ;;
2 ) ls ;;
3 ) ps aux ;;
4 ) netstat -natup ;;
q | Q)
echo "`basename $0` end ..."
break ;;
esac
done
-- menu.sh --
# ./menu.sh
====================================================