Data Base/Linux

231206 Linux 파라미터 변수, if문, for문, while문, eval

잇꼬 2023. 12. 6. 17:59
728x90
반응형
SMALL

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

[user1@centos ~]$ vi p.sh
--------------------------------------------------
<실행 코드>
#1/bin/bash

echo "실행 파일 이름은 $0 입니다." => 현 파일명
echo "첫번째 파라미터 값은 $1 입니다."
echo "첫번째 파라미터 값은 $2 입니다."
echo "전체 파라미터 값은 $* 입니다."
--------------------------------------------------


[user1@centos ~]$ sh p.sh 10 20 (=:실제매개변수)

실행 파일 이름은 p.sh 입니다.
첫번째 파라미터 값은 10 입니다.
첫번째 파라미터 값은 20 입니다.
전체 파라미터 값은 10 20 입니다.
[user1@centos ~]$ sh p.sh $x+$y $x-$y  -> 문자로 인식해서 계산X
실행 파일 이름은 p.sh 입니다.
첫번째 파라미터 값은 10+3 입니다.
첫번째 파라미터 값은 10-3 입니다.
전체 파라미터 값은 10+3 10-3 입니다.

 

■ if문
주의) [ 조건 ] 공백처리!!
if [ 조건 ]; then
실행문
elif [ 조건 ]; then
실행문
else
실행문
fi

 

# if 조건문에 비교연산자
1. 문자열 비교연산자
1) "문자열1" = "문자열2" : 두 문자열이 같으면 true
2) "문자열1" != "문자열2" : 두 문자열이 같지 않으면 true
2. 숫자 비교연산자 
1) 숫자1 -eq 숫자2 : 두 숫자가 같으면 true
2) 숫자1 -ne 숫자2 : 두 숫자가 같지 않으면 true
3) 숫자1 -gt 숫자2 : 숫자1 > 숫자2 => true 
    (숫자1이 숫자2보다 크면 true)
4) 숫자1 -ge 숫자2 : 숫자1 >= 숫자2 => true
    (숫자1이 숫자2보다 크거나 같으면 true)
5) 숫자1 -lt 숫자2 : 숫자1 < 숫자2 => true 
    (숫자1이 숫자2보다 작으면 true)
6) 숫자1 -le 숫자2 : 숫자1 <= 숫자2 => true
    (숫자1이 숫자2보다 작거나 같으면 true)
7) !숫자1    : 숫자1 false => true

 

vi comm_1.sh

--------------------------------------------------
#!/bin/bash

if [ "oracle" = "oracle" ]; then
echo "oracle enginner"
else
echo "db enginner"
fi

--------------------------------------------------

[user1@centos ~]$ sh comm_1.sh
oracle enginner

 

[user1@centos ~]$ vi comm_2.sh

--------------------------------------------------
#!/bin/bash

if [ "oracle" != "python" ]; then
echo "python progarmmer"
else
echo "db enginner"
fi


--------------------------------------------------
[user1@centos ~]$ . comm_2.sh
python progarmmer

 

 

[user1@centos ~]$ vi comm_3.sh 

--------------------------------------------------
#!/bin/bash

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

if [ $num -gt 0 ]; then 
echo "$num is positive"
elif [ $num -lt 0 ]; then
echo "$num is negative"
else
echo "$num is zero"
fi


--------------------------------------------------
[user1@centos ~]$ vi comm_3.sh
[user1@centos ~]$ . comm_3.sh
숫자를 입력해주세요 : 10
10 is positive
[user1@centos ~]$ . comm_3.sh
숫자를 입력해주세요 : -2
-2 is negative
[user1@centos ~]$ . comm_3.sh
숫자를 입력해주세요 : 0
0 is zero

 

논리 연산자
1. and : && 또는 -a 
2. or : || 또는 -o 

 

[user1@centos ~]$ echo $UID
1000
[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 ~]$ id -u => 유저아이디값
1000
[user1@centos ~]$ id -g => 그룹아이디값
1000
[user1@centos ~]$ id -n
id: cannot print only names or real IDs in default format
[user1@centos ~]$ id -un => 유저아이디명
user1
[user1@centos ~]$ id -gn => 그룹아이디명
user1

 

[user1@centos ~]$ vi um.sh

--------------------------------------------------
#!/bin/bash
      환경변수                    실행명령어
if [ $UID -ge 1000 ] && [ "`id -un`" = "`id -gn`" ]; then
echo "umask 002"
else
echo "umask 022"
fi


--------------------------------------------------

[user1@centos ~]$ sh um.sh
umask 002
[user1@centos ~]$ su -
Password:
Last login: Wed Dec  6 11:46:32 +11 2023 on :0
[root@centos ~]# sh /home/user1/um.sh
umask 022

 

파일과 관련한 조건
1. -d 파일명 : 파일이 디렉터리면 true
2. -e 파일명 : 파일이 존재하면 true
3. -f 파일명 : 파일이 일반 파일이면 true
4. -r 파일명 : 파일 읽기가 가능하면 true
5. -w 파일명 : 파일 쓰기가 가능하면 true
6. -s 파일명 : 파일 크기가 0이 아닌면 true
7. -x 파일명 : 파일이 실행가능한 상태면 true

 

[user1@centos script]$ vi file_exist.sh

--------------------------------------------------
#!/bin/bash

fname=/home/user1/emp.csv

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

--------------------------------------------------

[user1@centos script]$ sh file_exist.sh

 

 

■ case문

[user1@centos script]$ vi fruit.sh

--------------------------------------------------
#!/bin/bash

fruit="apple"

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

--------------------------------------------------

 

 

[user1@centos script]$ vi backup.sh

--------------------------------------------------
#!/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 back sh weely_backup.sh";;
3)
echo "monthly back sh monthly_backup.sh";;
*)
echo "enter[1,2,3]"
esac


--------------------------------------------------

 

 

■ 반복문

1.for loop

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

 

[user1@centos script]$ vi hap.sh

------------------------------------------------
#!/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 입니다."

------------------------------------------------

 

[user1@centos script]$ vi hap2.sh

------------------------------------------------
#!/bin/bash

hap=0

for i in {1..10}
do
hap=`expr $hap + $i`
done
echo "1부터 10까지의 합은 $hap 입니다."

------------------------------------------------

 

[user1@centos script]$ vi hap3.sh

------------------------------------------------
#!/bin/bash

hap=0

for i in {1..10..2} #1부터 10까지, 2씩 증가
do
hap=`expr $hap + $i`
done
echo "1부터 10까지의 2씩 증가한 합은 $hap 입니다."

------------------------------------------------

 

[user1@centos script]$ vi dan.sh

------------------------------------------------
#!/bin/bash

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

------------------------------------------------

[user1@centos script]$ 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

 

# 배열
[user1@centos script]$ echo {1..10}
1 2 3 4 5 6 7 8 9 10
[user1@centos script]$ {1..10}
bash: 1: command not found...
[user1@centos script]$ echo {1..10..2}
1 3 5 7 9
[user1@centos script]$ vi cnt.sh
---------------------------------------------
#!/bin/bash

for i in echo {1..10}
do
        echo "$i"
done

---------------------------------------------
[user1@centos script]$ sh cnt.sh
echo
1
2
3
4
5
6
7
8
9
10

[user1@centos script]$ 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 script]$ sh cnt2.sh
echo
{1..10}

 

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

[user1@centos script]$ v_str="ls -l"
[user1@centos script]$ eval $v_str
total 64
-rw-rw-r--. 1 user1 user1 312 Dec  6 13:33 backup.sh
-rw-rw-r--. 1 user1 user1  68 Dec  6 16:12 cnt1.sh
-rw-rw-r--. 1 user1 user1  98 Dec  6 16:13 cnt2.sh
-rw-rw-r--. 1 user1 user1  54 Dec  6 16:07 cnt.sh
-rw-rw-r--. 1 user1 user1  99 Dec  6 12:14 comm_1.sh
-rw-rw-r--. 1 user1 user1 102 Dec  6 12:14 comm_2.sh
-rw-rw-r--. 1 user1 user1 196 Dec  6 12:16 comm_3.sh
-rw-rw-r--. 1 user1 user1 173 Dec  6 15:59 dan_9.sh
-rw-rw-r--. 1 user1 user1  85 Dec  6 14:16 dan.sh
-rw-rw-r--. 1 user1 user1 115 Dec  6 13:06 file_exist.sh
-rw-rw-r--. 1 user1 user1 220 Dec  6 13:22 fruit.sh
-rw-rw-r--. 1 user1 user1 228 Dec  6 16:00 gugudan.sh
-rw-rw-r--. 1 user1 user1 119 Dec  6 14:00 hap2.sh
-rw-rw-r--. 1 user1 user1 167 Dec  6 14:10 hap3.sh
-rw-rw-r--. 1 user1 user1 119 Dec  6 13:58 hap.sh
-rw-rw-r--. 1 user1 user1 115 Dec  6 12:26 um.sh

 

[user1@centos script]$ vi cnt.sh
---------------------------------------------
#!/bin/bash

for i in `eval echo {1..10}`
do
        echo "$i"
done

---------------------------------------------

 

[user1@centos script]$ vi cnt2.sh
---------------------------------------------
#!/bin/bash
v_start=1
v_end=10

for i in `eval echo {$v_start..$v_end}`
do
        echo "$i"
done
---------------------------------------------

 

# 문자열 누적

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

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

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

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

[user1@centos script]$ echo $star2
★★
[user1@centos script]$ echo $star2
★★
[user1@centos script]$ star2=$star2$star
[user1@centos script]$ echo $star2
★★★
[user1@centos script]$ star2=$star2$star
[user1@centos script]$ echo $star2
★★★★

 

반복문 ((초기값; 조건문; 증감식))
for i in {1..10}
do
echo $i
done

[user1@centos script]$ vi test.sh
---------------------------------------------
#!/bin/bash

for ((i=1; i<=10; i++))
do
echo $i
done

---------------------------------------------

[user1@centos script]$ sh test.sh
1
2
3
4
5
6
7
8
9
10

 

# for문 (()) 
for ((i=10; i>0; i--))
do
echo $i
done

ex)

select power(2,3) 
from dual;


sh power.sh 2 3
---------------------------------------------
#!/bin/bash

x=1
for i in `expr echo {1..$2}`
do
x=`expr $x \* $1`
done
echo $x

[선생님 코드]
result=1
for ((i=1; i<=$2; i++))
do
result=`expr $result \* $1`
done
echo $result

---------------------------------------------
[user1@centos script]$ sh power.sh 2 3
8

 

■ while loop

while [ 조건식 ]
do
실행문
done

 

[user1@centos script]$ vi while_test.sh
----------------------------------------------
#!/bin/bash

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

----------------------------------------------
[user1@centos script]$ sh while_test.sh
1
2
3
4
5
6
7
8
9
10

728x90
반응형
LIST

'Data Base > Linux' 카테고리의 다른 글

231207 Linux _ oralce11g 설치 및 설정 ⓐ  (1) 2023.12.07
231207 Linux_oracle linux 설치  (0) 2023.12.07
231205 Linux shell ⓑ  (1) 2023.12.05
231205 Linux csv 활용 ⓐ  (2) 2023.12.05
231205 Linux JAVA 설정  (1) 2023.12.05