리눅스 shell script
Linux

script : 수행 해야할 여러가지 작업들을 하나 파일로 정해놓은 것
shell script : shell이 script를 실행한다.

  • bourne shell : 최초의 shell. 지원하는 명령어가 적음
    /bin/sh
  • c shell : bourne shell의 개량형
    /bin/csh
  • korn shell : 유닉스에서 많이 사용중인 shell (bourne shell + 편의 기능)
    /bin/ksh
  • bash shell :리눅스의 기본 shell로 다양한 명령과 편의성을 지원함
    /bin/bash
  • /usr/bin/명령어 : 일반 유저 사용
  • /usr/sbin/명령어 : 슈퍼유저 사용(root)

shell script를 쓸때 첫줄에는 반드시 쉘 타입을 써줘야한다.
단 첫줄은 주석으로 읽지 않는다.
- #!/bin/bash

shell script를 실행할때는 실행권한이 있을때와 없을때가 다르다.

  • ./filename.sh : 실행권한 있을때
  • sh filename.sh : 실행권한 없을때
    또 한가지 방법으로는 chmod를 이용해 실행권한을 줘도 된다.

shell script 형식
-echo : echo뒤의 내용을 화면에 출력한다.

[root@dbserver shell]# vi fruit.sh
       1 #bin/bash
       2
       3 fruit=apple
       4 drink=cokecola
       5
       6 echo $fruit
       7 echo $drink

변수명으로 쉘 스크립트 짜기
‘변수명 = 값’ 형태로 사용( 절대 기호 좌우에 공백 있으면 안된다)
-> 공백이 있을경우 “” (쌍따옴표)로 묶어줘야함

[root@dbserver shell]# vi ifconfig.sh
      1 #!/bin/bash
      2 echo `ifconfig | grep inet | grep -v 127.0.0.1`

ifconfig의 inet을 출력하되, 127.0.0.1는 빼고 출력
역따옴표 :특정 명령어를 실행한 결과를 출력

[root@dbserver shell]# vi echon.sh
      1 #!/bin/bash
      2 echo 'aaaaaa'
      3 echo "aaaaaa"
      4 echo -n "bbbbb"
      5 echo -n "ccccc"

-n은 줄을 바꾸지 않고 연속적으로 출력한다.

  • read 함수 사용 : 사용자로부터 값을 입력 받아서 변수에 저장해주는 역할
  • argument 사용해서 실행
    /etc/init.d/network stop을 수행할 때 stop부분을 인수(argument)라고한다

  • 크기비교
  1. [ $A -gt $B ] : A값이 B값보다 크다
  2. [ $A -lt $B ] : A값이 B값보다 작다
  3. [ $A -ge $B ] : A값이 B보다 크거나 같다
  4. [ $A -le $B ] : A값이 B보다 작거나 같다.
  5. [ $A -eq $B ] : A값이 B값과 같다
  6. [ $A -ne $B ] : A값이 B값과 다르다

공백을 하지 않으면 크기비교가 되지 않으니 조심할것 !

[root@server101 ~]# vi comp_test1.sh
      1 #!/bin/bash
      2 echo ""
      3 echo -n "Enter First Number : "
      4 read A
      5 echo ""
      6 echo -n "Enter Second Number : "
      7 read B
      8 echo ""
      9
     10 if [ $A -eq $B ]
     11 then
     12 echo "$A = $B"
     13 elif [ $A -gt $B ]
     14 then
     15   echo "$A > $B"
     16 elif [ $A -lt $B ]
     17 then
     18   echo "$A < $B"
     19 fi
     20 echo "" 
[root@server101 ~]# sh comp_test1.sh
Enter First Number : 3
Enter Second Number : 5
3 < 5

숫자 계산하기
Shell Script는 기본적으로 모든 데이터를 문자로 인식
expr로 연산을 함

[root@server101 ~]# vi cal_test1.sh
      1 #!/bin/bash
      2 echo ""
      3 echo -n "Enter First Number : "
      4 read A
      5 echo -n "Enter Second Number : "
      6 read B
      7 echo ""
      8 echo "$A + $B"
      9 echo ""

[root@server101 ~]# sh cal_test1.sh
Enter First Number : 2
Enter Second Number : 4                      -> 연산 안해줌
2 + 4
[root@server101 ~]# vi cal_test2.sh
\#!/bin/bash
echo ""
echo -n "Enter first Number : "
read A
echo ""
echo -n "Enter second Numver : "
read B
echo ""
hap=`expr $A + $B`
echo ""
echo "$A + $B = $hap"
echo ""

​[root@server101 ~]# sh cal_test2.sh
Enter first Number : 3
Enter second Numver : 5

3 + 5 = 8 -> 연산작업 한번 거침

세개의 숫자를 입력받아서 연산

[root@server101 ~]# vi cal_test3.sh
      1 #!/bin/bash
      2 echo ""
      3 echo -n "Enter First Number :"
      4 read A
      5 echo ""
      6 echo -n "Enter Second Number :"
      7 read B
      8 echo ""
      9 echo -n "Enter Third Number :"
     10 read C
     11 echo ""
     12
     13 result=`expr \( $A + $B \) \* $C`    -> ( , ), * 메타캐릭터라서 \역슬래시 꼭 붙여줘야
                                                                    연산자로 인식함 
                                                                    expr 구문 안에서의 모든연산자와 기호, 변수
                                                                   사이에는 공백으로 한칸 띄어야함! 
     14 echo ""
     15 echo "($A + $B ) X $C = $result"
     16 echo ""


[root@server101 ~]# sh cal_test3.sh
Enter First Number :3
Enter Second Number :4
Enter Third Number :2

(3 + 4 ) X 2 = 14

문자열 비교하기

[ “string1” = “string2” ]
두 문자열이 같은 경우
[ “string1” != “string2” ]
두 문자열이 다른경우
[ -z “string” ]
문자열의 길이가 0인경우
[ -n “string” ]
문자열의 길이가 0이 아닌 경우

[root@server101 ~]# vi comp_string1.sh
      1 #!/bin/bash
      2 echo""
      3 echo -n "Enter String:"
      4 read str
      5 echo ""
      6
      7 if [ $str = "Korea" ]   -> 공백 조심 !!! 
      8 then
      9   echo "Korea"
     10 else
     11   echo "Not Korea"
     12 fi
     13 echo"" 

[root@server101 ~]# sh comp_string1.sh
Enter String:k
Not Korea
​
[root@server101 ~]# sh comp_string1.sh
Enter String:Korea
Korea

파일관리하기

[ -f 파일명 ]
파일이 있는경우
[ -s 파일명 ]
파일이 존재하고 내용이 있는 경우
[ -d 파일명 ]
파일이 아니고 디렉토리인경우
[ -r 파일명 ]
읽기가 가능한 파일일 경우
[ -w 파일명 ]
쓰기가 가능한 파일인 경우
[ -x 파일명 ]
파일이 존재하고 실행 가능할 경우
[ !-옵션 파일명]
옵션의 조건이 아닐 경우

test.log 파일을 먼저 생성한 후 …

[root@server101 ~]# sh file_test1.sh
aaa
[root@server101 ~]# vi file_test1.sh
      1 #!/bin/bash
      2 echo ""
      3 fname=/shell/test.log
      4
      5 if [ -f $fname ]
      6 then
      7   cat $fname
      8 fi
      9 echo ""
[root@server101 ~]# vi file_test2.sh
      1 #!/bin/bash
      2 echo ""
      3 fname=/shell/test.log
      4
      5 if [ -s $fname ]
      6 then
      7   echo -n "Before: "
      8   echo `ls -l /shell/test.log`
      9   cat /dev/null > $fname   -> 파일 크기를 0으로 만들기 
     10 fi
     11 echo ""
     12 echo -n "After: "
     13 echo `ls -l /shell/test.log` 
[root@server101 ~]# sh file_test2.sh
Before: -rw-r--r-- 1 root root 4 313 11:16 /shell/test.log
After: -rw-r--r-- 1 root root 0 313 12:10 /shell/test.log

  • 분기문 : 조건문 = if , case

  • 반복문 : while .for

if 문

if[조건] -> 조건 한개일 때
then
처리할 문장
fi

[root@server101 ~]# vi if_test1.sh
      1 #!/bin/bash
      2 echo ""
      3 echo -n "Enter fruit name: "
      4 read a
      5 echo ""
      6 if [ $a = "apple" ]
      7 then
      8    echo "apple goot!"
      9 fi
     10 echo "" 
[root@server101 ~]# sh if_test1.sh
Enter fruit name: apple
apple goot!
[root@server101 ~]# sh if_test1.sh
Enter fruit name: orange

if[조건] -> 조건 두개일 때
then
처리할 문장
else
처리할 문장
fi

[root@server101 ~]# vi if_test2.sh
      1 #!/bin/bash
      2 echo ""
      3 echo -n "Enter string : "
      4 read a
      5 echo ""
      6
      7 if [ $a = "apple" ]
      8 then
      9   echo "apple goot!"
     10 else
     11   echo "give me apple!"
     12 fi
     13 echo ""
[root@server101 ~]# sh if_test2.sh
Enter string : apple
apple goot!
[root@server101 ~]# sh if_test2.sh
Enter string : banana
give me apple!

if[조건]; then -> 조건 세개 이상일 때
처리할 문장
elif[조건];then
처리할 문장
else
처리할문장
fi

[root@server101 ~]# vi if_test3.sh
      1 #!/bin/bash
      2 echo ""
      3 echo -n "Enter string : "
      4 read str
      5 echo ""
      6
      7 if [ $str = "apple" ] ; then
      8    echo "I like apple~!"
      9 elif [ $str = "Orange" ] ; then
     10    echo "I like orange"
     11 else
     12    echo "give me apple or Orange!!!!!"
     13 fi
     14
     15 echo ""
[root@server101 ~]# sh if_test3.sh
Enter string : apple
I like apple~!
[root@server101 ~]# sh if_test3.sh
Enter string : orange                       -> 대소문자 구분하므로 조심!!!!
give me apple or Orange!!!!!
[root@server101 ~]# sh if_test3.sh
Enter string : Orange
I like orange

중첩 if문 (if 문장안에 다른 if사용)

if[조건];then
실행문장
exit
elif[조건]; then
실행문장
exit
else
if[조건]; then
실행문장
fi
fi

[root@server101 ~]# vi if_test4.sh
      1 #!/bin/bash
      2 echo ""
      3 echo -n "Enter Number 1 or 2 :"
      4 read a
      5
      6 if [ $a -eq 1 ]; then
      7   echo "입력 받은 값은 $a입니다."
      8   exit
      9 elif [ $a -eq 2 ]; then
     10   echo "입력 받은 값은 $a입니다."
     11   exit
     12 else
     13   if [ $a -lt 0 ]; then
     14     echo "값이 너무 작음.."
     15     exit
     16   elif [ $a -gt 2 ]; then
     17     echo " 너무 크자너.."
     18     exit
     19   fi
     20 fi 
[root@server101 ~]# sh if_test4.sh
Enter Number 1 or 2 :1
입력 받은 값은 1입니다.
[root@server101 ~]# sh if_test4.sh
Enter Number 1 or 2 :2
입력 받은 값은 2입니다.
[root@server101 ~]# sh if_test4.sh
Enter Number 1 or 2 :3
 너무 크자너..
[root@server101 ~]# sh if_test4.sh
Enter Number 1 or 2 :-1

값이 너무 작음..

조건을 동시에 사용하기
-> if [] -a [] (and)
-> if [] -o [] (or)

[root@server101 ~]# vi if_test5.sh
      1
      2 #!/bin/bash
      3 echo ""
      4 echo -n "Enter Number 1 or 2 :"
      5 read a
      6 echo ""
      7
      8 if [ \( $a -lt 1 \) -o \( $a -gt 2 \) ]; then
      9   echo " 유효하지 않은 값임.."
     10   exit
     11 else
     12   if [ \( $a -eq 1 \) -o \( $a  -eq 2 \) ]; then
     13     echo "입력 받은 값음 $a"
     14     exit
     15   fi
     16 fi 
[root@server101 ~]# sh if_test5.sh
Enter Number 1 or 2 :1
입력 받은 값음 1
[root@server101 ~]# sh if_test5.sh
Enter Number 1 or 2 :3

유효하지 않은 값임..

연습문제 1.

학생의 시험 성적을 입력 받아서 학점을 계산하는 스크립트를 작성하세요. 학점은 점수가 96-100:A+, 90-95:A0 , 86-89:B+, 80-85:B0, 76-79:C+, 70-75:C0, 66-69:D, 나머지는 F로 계산 . 그리고 100점이 넘는 점수는 So Big 메시지를 출력, 1점보다 적은 값이 들어오면 So small 이라는 메시지를 출력하고 스크립트를 종료하게 작성하시오

[root@server101 ~]# vi exam1.sh
      9   if [ $A -gt 100 ]; then
     10     echo "so Big!~!!!!!!"
     11     exit
     12   else
     13     echo " So Small!!!!"
     14   fi
     15 else
     16   if [ \( $A -gt 95 \) -a \( $A -lt 101 \) ]; then
     17     echo " A+"
     18   elif [ \( $A -gt 89 \) -a \( $A -lt 96 \) ]; then
     19     echo "A0"
     20   elif [ \( $A -gt 85 \) -a \( $A -lt 90 \) ]; then
     21     echo "B+"
     22   elif [ \( $A -gt 79 \) -a \( $A -lt 86 \) ]; then
     23     echo "B0"
     24   elif [ \( $A -gt 75 \) -a \( $A -lt 80 \) ]; then
     25     echo "C+"
     26   elif [ \( $A -gt 69 \) -a \( $A -lt 76 \) ]; then
     27     echo "C0"
     28   elif [ \( $A -gt 65 \) -a \( $A -lt 70 \) ]; then
     29     echo "D"
     30   else
     31     echo "F"
     32  fi
     33 fi

[root@server101 ~]# sh exam1.sh
학생의 성적을 입력하세요 :78
C+
[root@server101 ~]# sh exam1.sh
학생의 성적을 입력하세요 :90
A0
[root@server101 ~]# sh exam1.sh
학생의 성적을 입력하세요 :100
 A+
[root@server101 ~]# sh exam1.sh
학생의 성적을 입력하세요 :8
F
[root@server101 ~]# sh exam1.sh
학생의 성적을 입력하세요 :30
F
[root@server101 ~]# sh exam1.sh
학생의 성적을 입력하세요 :66
D

연습문제 2. 학생으로부터 지역번호를 입력 받아서 지역명을 출력하는 스크립트를 작성하시오, 지역번호가 02:Seoul. 031:Kyoungki, 051: Busan, 052 : Ulsan .나머지는 Heaven으로 출력합니다. 단 지역번호가 0보다 작거나 100보다 크면 “Check Your number!!!” 메시지 출력수 스크립트를 종료하게 작성하시오

​[root@server101 ~]# vi exam2.sh
#!/bin/bash
echo ""
echo -n "지역번호를 입력하세요 : "
read A
if [ \( $A -lt 0 \) -o \( $A -gt 100 \) ]; then
  echo " Check your Number !!!!"
  exit
else
 if [ $A = "02" ]; then
   echo "서울"
 elif [ $A = "031" ]; then
   echo "경기"
 elif [ $A = "051" ]; then
   echo "부산"
 elif [ $A = "052" ]; then
   echo "울산"
 else
   echo "Heaven"
 fi
fi
​
​지역번호를 입력하세요 : 02
서울
[root@server101 ~]# sh exam2.sh
지역번호를 입력하세요 : 031
경기
[root@server101 ~]# sh exam2.sh
지역번호를 입력하세요 : 051
부산
[root@server101 ~]# sh exam2.sh
지역번호를 입력하세요 : 032
Heaven

case : 경우의 수가 여러개 일 경우에 유용

case 변수 in
패턴 1)
실행명령 ;;
패턴 2)
실행명령 ;;
*) -> 1.도 아니고 2 도 아닐경우
실행명령 ;;
esac

[root@server101 ~]# vi case_test1.sh
#!/bin/bash
echo ""
echo "
          [1] Web Server backup
          [2] WAS Server backup
          [3] DB  Server backup "
echo ""
echo -n "Enter your choice :"
read a
echo ""
case $a in
  1)
    sh /shell/web_backup.sh ;;
  2)
    sh /shell/was_backup.sh ;;
  3)
    sh /shell/db_backup.sh ;;
  *)
    echo "Enter [ 1, 2, 3 ]"
esac 


[root@server101 ~]# sh case_test1.sh

          [1] Web Server backup
          [2] WAS Server backup
          [3] DB  Server backup
Enter your choice :1
Web Server Backup Start!!
[root@server101 ~]# sh case_test1.sh

          [1] Web Server backup
          [2] WAS Server backup
          [3] DB  Server backup
Enter your choice :2
WAS Server Backup Start~~~!
[root@server101 ~]# sh case_test1.sh

          [1] Web Server backup
          [2] WAS Server backup
          [3] DB  Server backup
Enter your choice :3
DB Server Backup Start~~!!
[root@server101 ~]# sh case_test1.sh
          [1] Web Server backup
          [2] WAS Server backup
          [3] DB  Server backup
Enter your choice :5
Enter [ 1, 2, 3 ]

for 변수명 in 값1 값2 값3
do
실행할 문장
done

  • 화면에 1-5까지 출력
    [root@server101 shell]# vi for_test1.sh
        1 #!/bin/bash
        2 for i in 1 2 3 4 5
        3 do
        4   echo "$i"
        5 done
        6 echo ""
    [root@server101 shell]# sh for_test1.sh
    1
    2
    3
    4
    5
    
  • 반복횟수 부분의 변형
[root@server101 shell]# vi for_test2.sh
    \#!/bin/bash
    count=`ls /shell`    -> 변수 뒤에 =와 꼭 붙일것! 안붙이면 실행 안됨 !
    for i in $count
    do
     echo "$i"
    done
    echo ""

[root@server101 shell]# sh for_test2.sh
    db_backup.sh
    echo_test1.sh
    echo_test2.sh
    echo_test3.sh
    echo_test4.sh
    echo_test5.sh
    echo_test6.sh
    test.log
    test1.sh
    was_backup.sh
    web_backup.sh
``
* 반복 횟수 부분의 변형 2
 ```cpp
[root@server101 shell]# vi for_test3.sh
      1 #!/bin/bash
      2 echo ""
      3 count=`ls /shell`
      4
      5 for i in $count
      6 do
      7   echo "Easy Shell Script"
      8 done


[root@server101 shell]# sh for_test3.sh   -> 파일 수만큼 복사해서 출력
Easy Shell Script
Easy Shell Script
Easy Shell Script
Easy Shell Script
Easy Shell Script
Easy Shell Script
Easy Shell Script
Easy Shell Script
Easy Shell Script
Easy Shell Script
Easy Shell Script
  • 중첩 for문
    [root@server101 shell]# vi for_test4.sh
      #!/bin/bash
      echo""
      for i in a b c
    do
        for j in 1 2 3
    do
      echo "\$i=$i , \$j=$j"     -> $을 문자 그대로 출력하기 위해 \역슬래시 사용!
    done
    done 
    [root@server101 shell]# sh for_test4.sh
    $i=a , $j=1
    $i=a , $j=2
    $i=a , $j=3
    $i=b , $j=1
    $i=b , $j=2
    $i=b , $j=3
    $i=c , $j=1
    $i=c , $j=2
    $i=c , $j=3
    

*2단 출력하기

[root@server101 shell]# vi for_test5.sh
    \#!/bin/bash
    echo ""
    for i in 2
    do
      for j in 1 2 3 4 5 6 7 8 9
      do
       gob=`expr $i \* $j`           -> =사이에 띄어쓰는 곳 없도록 조심 !
       echo " $i X $j = $gob"
      done
    done 

[root@server101 shell]# sh for_test5.sh
     2 X 1 = 2
     2 X 2 = 4
     2 X 3 = 6
     2 X 4 = 8
     2 X 5 = 10
     2 X 6 = 12
     2 X 7 = 14
     2 X 8 = 16

주의 사항 !

  1. expr 구분에 반드시 역따옴표를 쓰기
  2. *연산자와 괄호 뒤에는 \역슬래시를 꼭 붙이기
  3. expr 구분 안에서의 모든 연산자와 기호, 변수 사이에는 공백으로 한 칸씩 띄우기

while [조건문 ] - 조건을 만족할 경우 반복 수행
do
반복할 문장
done

while 문과 for문의 차이

  • for : 반복 횟수가 결정되어 잇음
  • while : 사용자가 중지 할 때까지 수행
* 예1)
[root@server101 shell]# vi while_test1.sh
    \#!/bin/bash
    num=1
while [ \( $num -eq 1 \) -o \( $num -eq 2 \) ]
do
   echo -n "Enter Number :"
   read num
   echo "God Bless you~!!"
   echo ""
done
   echo "Incorrect Number"
   echo "Good bye~"


[root@server101 shell]# sh while_test1.sh
Enter Number :1
God Bless you~!!
Enter Number :2
God Bless you~!!
Enter Number :3
God Bless you~!!
Incorrect Number
Good bye~

예2) 사용자가 y나 Y를 입력할 때까지 계속 “Enter y| Y”출력하게 하고 맞게 입력하면 Good출력하고 종료…

[root@server101 shell]# vi while_test2.sh
    #!/bin/bash
    A=a
    while [ \( $A != "Y" \) -a \( $A != "y" \) ]
    do
    echo -n "Enter Y | y : "
    read A
    done
    echo "Good!" 
[root@server101 shell]# sh while_test2.sh
    Enter Y | y : a
    Enter Y | y : b
    Enter Y | y : y

Good!
예3) while을 이용하여 사용자에게 단수를 입력 받은 후 해당 구구단을 출력하는 스크립트

[root@server101 shell]# vi while_test3.sh
    #!/bin/bash
    echo -n " 단수를 입력하세요 : "
    read a
    i=1
    while [ $i -lt 10 ]
do
      gob=`expr $a \* $i `
      echo " $a X $i = $gob "
      i=`expr $i + 1`
done 
[root@server101 shell]# sh while_test3.sh
 단수를 입력하세요 : 3
 3 X 1 = 3
 3 X 2 = 6
 3 X 3 = 9
 3 X 4 = 12
 3 X 5 = 15
 3 X 6 = 18
 3 X 7 = 21
 3 X 8 = 24
 3 X 9 = 27

연습문제 )
사용자에게 원하는 단 수를 입력 받아 해당 단 수의 구구단을 출력 한 후 “Retry? y|Y : “ 메시지를 보인 후 y를 누르면 다시 원하는 단수를 입력받아 출력하게 하고 만약 다른문자를 누르면 종료하는 스크립트

[root@server101 shell]# vi while_exam1.sh
    #!/bin/bash

    t=y
    i=1
while [ \( $t = "y" \) -o \( $t = "Y" \) ]
do
      echo -n " 단수를 입력하세요 : "
      read a

   while [ $i -lt 10 ]
   do
    gob=`expr $a \* $i `
    echo " $a X $i = $gob "
    i=`expr $i + 1`
   done
  echo -n " Retry? Y |y :"
   read t
   i=1
done

[root@server101 shell]# sh while_exam1.sh
 단수를 입력하세요 : 3
 3 X 1 = 3
 3 X 2 = 6
 3 X 3 = 9
 3 X 4 = 12
 3 X 5 = 15
 3 X 6 = 18
 3 X 7 = 21
 3 X 8 = 24
 3 X 9 = 27
 Retry? Y |y :y
 단수를 입력하세요 : 5
 5 X 1 = 5
 5 X 2 = 10
 5 X 3 = 15
 5 X 4 = 20
 5 X 5 = 25
 5 X 6 = 30
 5 X 7 = 35
 5 X 8 = 40
 5 X 9 = 45
 Retry? Y |y :Y
 단수를 입력하세요 : 4
 4 X 1 = 4
 4 X 2 = 8
 4 X 3 = 12
 4 X 4 = 16
 4 X 5 = 20
 4 X 6 = 24
 4 X 7 = 28
 4 X 8 = 32
 4 X 9 = 36
 Retry? Y |y :f

util [ 조건문 ]
do
실행할 문장
done
-> 조건문이 거짓이면 반복문을 수행하고 조건문이 참이면 반복문을 끝낸다.

[root@server101 shell]# vi until_test1.sh
    #!/bin/bash
    echo -n " Enter Number : "
    read dan
    echo ""
    num=1
    until [ $num -eq 10 ]
do
        gob=`expr $dan \* $num `
         echo " $dan X $num = $gob "
         num=`expr $num + 1 `
done 
[root@server101 shell]# sh until_test1.sh
 Enter Number : 4
 4 X 1 = 4
 4 X 2 = 8
 4 X 3 = 12
 4 X 4 = 16
 4 X 5 = 20
 4 X 6 = 24
 4 X 7 = 28
 4 X 8 = 32
 4 X 9 = 36

연습문제 1
for문으로 구구단 만들기

[root@server101 shell]# vi for1.sh
      1 #!/bin/bash
      2
      3 for dan in 2 3 4 5 6 7 8 9
      4 do
      5   echo " $dan 단 "
      6   for i in 1 2 3 4 5 6 7 8 9
      7   do
      8      gob=`expr $dan \* $i`
      9      echo " $dan X $i = $gob "
     10   done
     11 done 
[root@server101 shell]# sh for1.sh
 22 X 1 = 2
 2 X 2 = 4
 2 X 3 = 6
 2 X 4 = 8
 2 X 5 = 10
 2 X 6 = 12
 2 X 7 = 14
 2 X 8 = 16
 2 X 9 = 18
 33 X 1 = 3
 3 X 2 = 6
 3 X 3 = 9
 3 X 4 = 12
 3 X 5 = 15
 3 X 6 = 18
 3 X 7 = 21
 3 X 8 = 24
 3 X 9 = 27
 44 X 1 = 4
 4 X 2 = 8
 4 X 3 = 12
 4 X 4 = 16
 4 X 5 = 20
 4 X 6 = 24
 4 X 7 = 28
 4 X 8 = 32
 4 X 9 = 36
 55 X 1 = 5
 5 X 2 = 10
 5 X 3 = 15
 5 X 4 = 20
 5 X 5 = 25
 5 X 6 = 30
 5 X 7 = 35
 5 X 8 = 40
 5 X 9 = 45
 66 X 1 = 6
 6 X 2 = 12
 6 X 3 = 18
 6 X 4 = 24
 6 X 5 = 30
 6 X 6 = 36
 6 X 7 = 42
 6 X 8 = 48
 6 X 9 = 54
 77 X 1 = 7
 7 X 2 = 14
 7 X 3 = 21
 7 X 4 = 28
 7 X 5 = 35
 7 X 6 = 42
 7 X 7 = 49
 7 X 8 = 56
 7 X 9 = 63
 88 X 1 = 8
 8 X 2 = 16
 8 X 3 = 24
 8 X 4 = 32
 8 X 5 = 40
 8 X 6 = 48
 8 X 7 = 56
 8 X 8 = 64
 8 X 9 = 72
 99 X 1 = 9
 9 X 2 = 18
 9 X 3 = 27
 9 X 4 = 36
 9 X 5 = 45
 9 X 6 = 54
 9 X 7 = 63
 9 X 8 = 72
 9 X 9 = 81

while문으로 구구단 만들기

[root@server101 shell]# vi while1.sh
    #!/bin/bash
    dan=2
    i=1
while [ \( $dan -ge 2 \) -a \( $dan -le 9 \) ]
do
     echo " $dan 단"
      i=1
      while [ $i -lt 10 ]
  do
            gob=`expr $dan \* $i `
        echo "$dan X $i = $gob"
            i=` expr $i + 1 `
  done
 dan=`expr $dan + 1`
done

구구단 옆으로 만들기

[root@server101 shell]# vi gugu.sh
     #!/bin/bash
     for num in 1 2 3 4 5 6 7 8 9
do
       for dan in 2 3 4 5
  do
     gob=`expr $dan \* $num `
    echo -n "   $dan X $num = $gob "
  done
  echo ""
done
echo ""
for num in 1 2 3 4 5 6 7 8 9
do
  for dan in 6 7 8 9
  do
     gob=` expr $dan \* $num `
     echo -n "   $dan X $num = $gob "
  done
  echo ""
done


[root@server101 shell]# sh gugu.sh
   2 X 1 = 2    3 X 1 = 3    4 X 1 = 4    5 X 1 = 5
   2 X 2 = 4    3 X 2 = 6    4 X 2 = 8    5 X 2 = 10
   2 X 3 = 6    3 X 3 = 9    4 X 3 = 12    5 X 3 = 15
   2 X 4 = 8    3 X 4 = 12    4 X 4 = 16    5 X 4 = 20
   2 X 5 = 10    3 X 5 = 15    4 X 5 = 20    5 X 5 = 25
   2 X 6 = 12    3 X 6 = 18    4 X 6 = 24    5 X 6 = 30
   2 X 7 = 14    3 X 7 = 21    4 X 7 = 28    5 X 7 = 35
   2 X 8 = 16    3 X 8 = 24    4 X 8 = 32    5 X 8 = 40
   2 X 9 = 18    3 X 9 = 27    4 X 9 = 36    5 X 9 = 45
   6 X 1 = 6    7 X 1 = 7    8 X 1 = 8    9 X 1 = 9
   6 X 2 = 12    7 X 2 = 14    8 X 2 = 16    9 X 2 = 18
   6 X 3 = 18    7 X 3 = 21    8 X 3 = 24    9 X 3 = 27
   6 X 4 = 24    7 X 4 = 28    8 X 4 = 32    9 X 4 = 36
   6 X 5 = 30    7 X 5 = 35    8 X 5 = 40    9 X 5 = 45
   6 X 6 = 36    7 X 6 = 42    8 X 6 = 48    9 X 6 = 54
   6 X 7 = 42    7 X 7 = 49    8 X 7 = 56    9 X 7 = 63
   6 X 8 = 48    7 X 8 = 56    8 X 8 = 64    9 X 8 = 72
   6 X 9 = 54    7 X 9 = 63    8 X 9 = 72    9 X 9 = 81
[root@server101 shell]# vi whilegugu.sh
#!/bin/bash
num=1
while [ $num -lt 10 ]
do
  dan=2
  while [ $dan -lt 6 ]
  do
  gob=`expr $dan \* $num `
  echo -n "  $dan X $num = $gob "
  dan=`expr $dan + 1 `
  done
echo ""
num=`expr $num + 1 `
done
echo""
num=1
while [ $num -lt 10 ]
do
  dan=6
  while [ $dan -lt 10 ]
  do
  gob=`expr $dan \* $num `
  echo -n "  $dan X $num = $gob "
  dan=`expr $dan + 1 `
  done
echo ""
num=`expr $num + 1 `
done

별 스크립트
문제1 답

     #!/bin/bash
    echo ""
    echo -n "Enter number: "
    read num
    echo ""

    i=1
while [ $i -le $num ]
do
   j=1
   while [ $j -le $i ]
   do
     echo -n "*"
     j=`expr $j + 1 `
   done

   i=`expr $i + 1 `
   echo ""
done
echo ""

별 스크립트
문제2 답

    #!/bin/bash
    echo ""
    echo -n "Enter number: "
    read num
    echo ""

    i=1
while [ $i -le $num ]
do
   j=1
   k=`expr $num - $i`
   while [ $j -le $num ]
   do
     if [ $j -le $k ]
     then
       echo -n " "
     else 
       echo -n "*"
     fi

     j=`expr $j + 1 `
   done

   i=`expr $i + 1 `
   echo ""
done
echo ""

별 스크립트
문제3 답

    #!/bin/bash
    echo ""
    echo -n "Enter number: "
    read num
    echo ""

  i=1
  while [ $i -le $num ]
  do
   j=1
   k=`expr $num - $i`
   l=`expr $num + $i - 1`
   while  [ $j -le $l ]
   do
     if [ $j -le $k ]
     then
       echo -n " "
     else
       echo -n "*"
     fi
     j=`expr $j + 1`
   done

   i=`expr $i + 1`
   echo ""
done
echo ""

별 스크립트
문제4 답

    #!/bin/bash
    echo ""
    echo -n "Enter number: "
    read num
    echo ""

    i=1
while [ $i -le $num ]
do
  j=1
  k=`expr $num - $i + 1`
  while [ $j -le $k ]
  do 
     echo -n "*"
     j=`expr $j + 1`
  done

  i=`expr $i + 1`
  echo ""
done
echo ""

별 스크립트
문제5 답

    #!/bin/bash
    echo ""
    echo -n "Enter number: "
    read num
    echo ""

i=1
while [ $i -le $num ]
do
  j=1
  k=`expr $num \* 2 - $i`
  while [ $j -le $k ]
  do 
     if [ $j -lt $i ]
     then
       echo -n " "
     else
       echo -n "*"
     fi

     j=`expr $j + 1`
  done

  i=`expr $i + 1`
  echo ""
done
echo ""

별 스크립트
문제6 답

#!/bin/bash
echo ""
echo -n "Enter number: "
read num
echo ""

i=1
while [ $i -le $num ]
do
   j=1
   k=`expr $num - $i`
   l=`expr $num - 1 + $i`
   while [ $j -le $l ]
   do
      if [ $j -le $k ]
      then
        echo -n " "
      else
        echo -n "*"
      fi
      j=`expr $j + 1`
    done

    i=`expr $i + 1`
    echo ""
done

i=1
while [ $i -le $num ]
do
   j=1
   k=`expr $num \* 2 - $i - 1`
   while [ $j -le $k ]
   do
     if [ $j -le $i ]
     then
        echo -n " "
     else
        echo -n "*"
     fi
     j=`expr $j + 1`
   done

   i=`expr $i + 1`
   echo ""
done
echo ""