■ 파라미터 변수
- 파리미터 변수는 $0(실행파일), $1(첫번째 파라미터값), $2(두번째 파라미터값), ... 형태로 생성한다.
- 전체 파라미터는 $*로 표현한다.

[user1@centos ~]$ vi p.sh [user1@centos ~]$ sh p.sh 10 20
실행파일 이름은 p.sh 입니다.
첫번째 파라미터 값은 10 입니다.
첫번째 파라미터 값은 20 입니다.
전체 파라미터 값은 10 20 입니다.
#!/bin/bash
echo "실행파일 이름은 $0 입니다."
echo "첫번째 파라미터 값은 $1 입니다."
echo "첫번째 파라미터 값은 $2 입니다."
echo "전체 파라미터 값은 $* 입니다."






■ if 문

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

# if 문 작성시 공백처리 주의


# if 조건문에 비교연산자
- 문자열 비교

"문자열1" = "문자열2" 두 문자열이 같으면 true (==)
"문자열1" != "문자열2" 두 문자열이 같지 않으면 true (!=)


- 숫자 비교

숫자1 -eq 숫자2 두 숫자가 같으면 true (==)
숫자1 -ne 숫자2 두 숫자가 같지 않으면 true (!=)
숫자1 -gt 숫자2 숫자1이 숫자2보다 크면 true (>)
숫자1 -ge 숫자2 숫자1이 숫자2보다 크거나 같으면 true (>=)
숫자1 -lt 숫자2 숫자1이 숫자2보다 작으면 true (<)
숫자1 -le 숫자2 숫자1이 숫자2보다 작거나 같으면 true (<=_
!숫자1 숫자1이 거짓이면 true (not)

 

[user1@centos ~]$ vi com_1.sh

if [ "oracle" = "oracle" ]; then
        echo "oracle enginner"
else
        echo "db enginner"
fi
[user1@centos ~]$ sh com_1.sh
oracle enginner
if [ "oracle" != "python" ]; then
        echo "python enginner"
else
        echo "oracle enginner"
fi
[user1@centos ~]$ sh com_1.sh
python enginner
echo -n "숫자를 입력해주세요 : "
read num

if [ $num -gt 0 ]; then
        echo "$num is pasitive"
elif [ $num -lt 0 ]; then
        echo "$num is negative"
else
        echo "$num is zore"
fi
[user1@centos ~]$ sh com_1.sh
숫자를 입력해주세요 : 10
10 is pasitive

[user1@centos ~]$ sh com_1.sh
숫자를 입력해주세요 : -5
-5 is negative

[user1@centos ~]$ sh com_1.sh
숫자를 입력해주세요 : 0
0 is zore



# 논리 연산자

and && 또는 -a
or || 또는 -o

 

[user1@centos ~]$ id
uid=1000(user1) gid=1000(user1) groups=1000(user1) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

[user1@centos ~]$ echo $UID    # ID값
[user1@centos ~]$ id -u
1000
[user1@centos ~]$ id -un       # ID명
user1

[user1@centos ~]$ id -g        # 그룹ID
1000
[user1@centos ~]$ id -gn       # 그룹명
user1
[user1@centos ~]$ vi um.sh [user1@centos ~]$ sh um.sh
umask 002

[root@centos ~]# sh /home/user1/um.sh
umask 022
#!/bin/bash

# UID가 1000보다 크거나 같고, 유저ID명과 그룹ID명이 같다면
if [ $UID -ge 1000 ] && [ "`id -un`" = "`id -gn`" ]; then
        echo "umask 002"
else
        echo "umask 022"
fi

# $UID : 환경변수는 그대로 사용 가능
#  "`id -un`"  : 문자열이지만 명령문을 실행하기위해 백틱(`) 사용


# 파일과 관련한 조건

-d 파일명 파일이 디렉터리면 true
-e 파일명 파일이 존재하면 true
-f 파일명 파일이 일반파일이면 true
-r 파일명 파일이 읽기가 가능하면 true
-w 파일명 파일이 쓰가가 가능하면 true
-s 파일명 파일의 크기가 0이 아니면 true
-x 파일명 파일이 실행가능한 상태면 true

 

[user1@centos ~]$ vi file_exist.sh [user1@centos ~]$ sh file_exist.sh
"EMPLOYEE_ID","FIRST_NAME","LAST_NAME","EMAIL","PHONE_NUMBER","HIRE_DATE","JOB_ID","SALARY","COMMISSION_PCT","MANAGER_ID","DEPARTMENT_ID"
100,"Steven","King","SKING","515.123.4567",2003-06-17,"AD_PRES",24000,,,90
...
#!/bin/bash

fname=/home/user1/emp.csv

if [ -e $fname ]; then
        cat $fname
else
        echo "파일이 없습니다."
fi
#!/bin/bash

if [ -e /home/user1/emp.csv ]; then
        cat /home/user1/emp.csv
else
        echo "파일이 없습니다."
fi






■ case 문

case 대상 in
    조건)
        실행문;;
    조건)
        실행문;;
esac

 

[user1@centos ~]$ vi fruit.sh [user1@centos ~]$ sh fruit.sh
This is a red fruit
#!/bin/bash

fruit="apple"

case $fruit in
        "apple")
                echo "This is a red fruit"
                ;;
        "banana")
                echo "This is a yello fruit"
                ;;
        "orange")
                echo "This is an orange fruit"
                ;;
        *)
                echo "Unknown fruit"
                ;;
esac

 

[user1@centos ~]$ vi backup.sh [user1@centos ~]$ sh backup.sh

        [1] daily backup
        [2] weekly backup
        [3] monthly backup
Enter your choice : 1
daily backup sh daily_backup.sh


[user1@centos ~]$ sh backup.sh

        [1] daily backup
        [2] weekly backup
        [3] monthly backup
Enter your choice : 4
enter[1,2,3]
#!/bin/bash

echo "
        [1] daily backup
        [2] weekly backup
        [3] monthly backup"

echo -n "Enter your choice : "
read choice

case $choice in
        1) echo "daily backup sh daily_backup.sh";;
        2) echo "weekly backup sh weekly_backup.sh";;
        3) echo "monthly backup sh monthly_backup.sh";;
        *) echo "enter[1,2,3]";;
esac






■ 반복문

1. for loop

for 변수 in 값1 값2 값3 ...
do
    반복할 문장
done




for 변수 in {값1...값3..1}
do
    반복할 문장
done

# 값1 ~ 값3, 1씩 증가
(기본값)

for 변수 in {값1...값3}
do
    반복할 문장
done




for ((초기값; 조건문; 증감식))
do
    반복할 문장
done


# C언어 스타일

for ((i=1; i<10; i++))
for ((i=10; i>0; i--))

 

[user1@centos ~]$ vi hap.sh [user1@centos ~]$ sh hap.sh
1부터 10까지의 합은 55
#!/bin/bash

hap=0

for i in 1 2 3 4 5 6 7 8 9 10
do
        hap=`expr $hap + $i`
done

echo "1부터 10까지의 합은 $hap"
#!/bin/bash

hap=0

for i in {1..10}
do
        hap=`expr $hap + $i`
done

echo "1부터 10까지의 합은 $hap"
#!/bin/bash

hap=0

for i in {1..10..2}    # 2씩 증가
do
        hap=`expr $hap + $i`
        echo -n "$i "
done

echo ""
echo "1부터 10까지의 합은 $hap"
[user1@centos ~]$ sh hap.sh
1 3 5 7 9
1부터 10까지의 합은 25

 

[user1@centos ~]$ vi dan.sh
#!/bin/bash

for i in {1..9}
do
        echo "2 * $i = " $((2*i))
done
[user1@centos ~]$ sh dan.sh
2 * 1 = 2
2 * 2 = 4
2 * 3 = 6
2 * 4 = 8
2 * 5 = 10
2 * 6 = 12
2 * 7 = 14
2 * 8 = 16
2 * 9 = 18
#!/bin/bash

for i in {1..9}
do
        result=`expr 2 \* $i`
        echo "2 * $i = $result"
done
#!/bin/bash

for i in {2..9}
do
        for j in {1..9}
        do
                echo "$i * $j = $((i*j))"
        done

        echo ""
done
2 * 1 =  2
2 * 2 =  4
2 * 3 =  6
2 * 4 =  8
...
2 * 8 =  16
2 * 9 =  18

3 * 1 =  3
3 * 2 = 6
...
#!/ in/bash

for i in {2..9}
do
        for j in {1..9}
        do
                echo -ne "$j * $i = $((i*j))\t"
        done

        echo ""
done
1 * 2 = 2       2 * 2 = 4       ...       9 * 2 = 18
1 * 3 = 3       2 * 3 = 6       ...       9 * 3 = 27
1 * 4 = 4       2 * 4 = 8       ...       9 * 4 = 36
...

 




■ eval
문자열을 명령문으로 인식하고 실행하는 명령어

[user1@centos ~]$ v_str="ls -l"  
[user1@centos ~]$ echo $v_str ls -l
[user1@centos ~]$ eval $v_str total 96
-rw-rw-r--. 1 user1 user1    0 Dec  6 10:18 =
-rw-rw-r--. 1 user1 user1    0 Dec  6 10:17 0
-rw-rw-r--. 1 user1 user1  313 Dec  6 11:47 backup.sh

 

[user1@centos ~]$ echo {1..10}
1 2 3 4 5 6 7 8 9 10
[user1@centos ~]$ vi cnt.sh
#!/bin/bash

for i in echo {1..10}
do
        echo "$i"
done
[user1@centos ~]$ sh cnt.sh
echo
1
2
3
4
5
6
7
8
9
10
#!/bin/bash

for i in `eval echo {1..10}`
do
        echo "$i"
done
[user1@centos ~]$ sh cnt.sh
1
2
3
4
5
6
7
8
9
10

 

[user1@centos ~]$ vi cnt2.sh
#!/bin/bash

v_start=1
v_end=10

for i in echo {$v_start..$v_end}
do
        echo "$i"
done
[user1@centos ~]$ sh cnt2.sh
echo
{1..10}
#!/bin/bash

v_start=1
v_end=10

for i in `eval echo {$v_start..$v_end}`
do
        echo "$i"
done
[user1@centos ~]$ sh cnt2.sh
1
2
3
4
5
6
7
8
9
10



[user1@centos ~]$ star="★"
[user1@centos ~]$ echo $star

[user1@centos ~]$ star2=""
[user1@centos ~]$ echo $star2

[user1@centos ~]$ star2=$star2$star
[user1@centos ~]$ echo $star2

[user1@centos ~]$ star2=$star2$star
[user1@centos ~]$ echo $star2
★ ★
... 누적

[user1@centos ~]$ vi star.sh
#!/bin/bash

star="★"
star2=""

echo -n "숫자를 입력하세요 : "
read num

for i in `eval echo {1..$num}`
do
        star2=$star2$star
        echo "$star2"
done
[user1@centos ~]$ sh star.sh
숫자를 입력하세요 : 5

★★
★★★
★★★★
★★★★★
#!/bin/bash

star="★"

echo -n "숫자를 입력하세요 : "
read num

for i in `eval echo {$num..1}`
do
        star2=""
        for j in `eval echo {1..$i}`
        do
                star2=$star2$star
        done

        echo "$star2"
done
[user1@centos ~]$ sh star.sh
숫자를 입력하세요 : 5
★★★★★
★★★★
★★★
★★

 

예) select power(2,3) from dual;
[user1@centos ~]$ vi power.sh [user1@centos ~]$ sh power.sh 2 3
8
#!/bin/bash

total=1
for i in `eval echo {1..$2}`
do
        total=`expr $total \* $1`
done
echo $total
#!/bin/bash

total=1
for ((i=1; i<=$2; i++))
do
        total=`expr $total \* $1`
done
echo $total

 

예) 1~10 출력. 단, 4, 6 제외
for i in {1..10}
do
        if [ $i != 4 ] && [ $i != 6 ]; then
                echo $i
        fi
done
[user1@centos ~]$ sh cnt.sh
1
2
3
5
7
8
9
10
for i in {1..10}
do
        if [ $i -ne 4 ] && [ $i -ne 6 ]; then
                echo $i
        fi
done
for ((i=1; i<=10; i++))
do
        if [ $i -ne 4 ] && [ $i -ne 6 ]; then
                echo $i
        fi
done
for i in {1..10}
do
        if [ $i -eq 4 ] || [ $i -eq 6 ]; then
                continue
        else
                echo $i
        fi
done


# continue
# break


for i in {1..5}
do
        echo $i
done
1
2
3
4
5
for i in echo {1..5}
do
        echo $i
done
echo
1
2
3
4
5
for i in 'echo {1..5}'
do
        echo $i
done
echo {1..5}
for i in `echo {1..5}`
do
        echo $i
done
1
2
3
4
5
for i in `eval echo {1..5}`
do
        echo $i
done
1
2
3
4
5
for ((i=1; i<=5; i++))
do
        echo $i
done
1
2
3
4
5

 

num=5
for i in {1..$num}
do
        echo "$i"
done
{1..5}
for i in echo {1..$num}
do
        echo "$i"
done
{1..5}
for i in `echo {1..$num}`
do
        echo "$i"
done
{1..5}
for i in 'eval echo {1..$num}'
do
        echo "$i"
done
eval echo {1..$num}
for i in `eval echo {1..$num}`
do
        echo "$i"
done
1
2
3
4
5
for ((i=1; i<=$num; i++))
do
        echo $i
done
1
2
3
4
5

 




■ while loop

while [ 조건식 ]
do
    실행문
done

 

[user1@centos ~]$ vi while.sh  
#!/bin/bash

i=1
hap=0
while [ $i -le 10 ]
do
        echo $i
        hap=`expr $hap + $i`
        i=`expr $i + 1`
done

echo "합계 : $hap"
[user1@centos ~]$ sh while.sh
1
2
3
4
5
6
7
8
9
10
합계 : 55
#!/bin/bash

i=1
sum=0
while [ $i -le $1 ]
do
        sum=`expr $sum + $i`
        i=`expr $i + 1`
done
echo "1~$1 합계 : $sum"
[user1@centos ~]$ sh hap.sh 10
1~10 합계 : 55
#!/bin/bash

i=1
sum=0
while [ $i -le $1 ]
do
        sum=$((sum+i))
        i=$((i+1))
done
echo "1~$1 합계 : $sum"

 




parameter 매개변수
if
case
for
eval
continue
break
while