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



====================================================