■ 파라미터 변수
- 파리미터 변수는 $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
'Linux & CentOS' 카테고리의 다른 글
41 LINUX .bash_profile, cut, awk, sort, uniq, echo, 연산, Shell (2) | 2023.12.05 |
---|---|
40 LINUX user, group, 권한, tar (1) | 2023.12.04 |
39 LINUX date, time, Redirection, wc, grep, cp, mv, rename, vi (1) | 2023.12.01 |
38 LINUX VM, CentOS, ls, pwd, cd, mkdir, rmdir, rm 외 (1) | 2023.11.30 |