Shell Script - 실습
if문
root@ysy:~/d80# vi if.sh
root@ysy:~/d80# ./if.sh
$b = 30
if ~ else 문
root@ysy:~/d80# vi ifelse.sh
root@ysy:~/d80# ./ifelse.sh
$b = 30
다중 if 문
root@ysy:~/d80# vi multiif.sh
root@ysy:~/d80# ./multiif.sh
$b = 30 F
for 문
root@ysy:~/d80# vi for.sh
root@ysy:~/d80# ./for.sh
a = aa
a = bb
a = cc
a = dd
while 문
root@ysy:~/d80# vi while.sh
root@ysy:~/d80# ./while.sh
n = 1 , sum = 1
n = 2 , sum = 3
n = 3 , sum = 6
n = 4 , sum = 10
n = 5 , sum = 15
n = 6 , sum = 21
n = 7 , sum = 28
n = 8 , sum = 36
n = 9 , sum = 45
n = 10 , sum = 55
until 문
root@ysy:~/d80# vi until.sh
root@ysy:~/d80# ./until.sh
n = 1 , 1
n = 2 , 2
n = 3 , 3
n = 4 , 4
n = 5 , 5
n = 6 , 6
n = 7 , 7
n = 8 , 8
n = 9 , 9
n = 10 , 10
case 문
root@ysy:~/d80# vi case.sh
root@ysy:~/d80# ./case.sh
Apple
continue, break
root@ysy:~/d80# vi continuebreak.sh
root@ysy:~/d80# ./continuebreak.sh
== continue
$i ==> 0
$i ==> 1
$i ==> 2
$i ==> 3
$i ==> 4
$i ==> 6
$i ==> 7
$i ==> 8
$i ==> 9
== break
$i ==> 0
$i ==> 1
$i ==> 2
$i ==> 3
$i ==> 4
select 문
root@ysy:~/d80# vi select.sh
root@ysy:~/d80# ./select.sh
1) ls -f
2) pwd
3) date
4) who
5) exit
Select : 1
a1 h k2 4000 kk u2
ifelse.sh u3 continuebreak.sh .func1.sh.swp k1 u
hh.sh case.sh for.sh b.sh aa .
a1.c .. select.sh if.sh k3
func1.sh until.sh shift.sh while.sh multiif.sh
Select : 2
/root/d80
Select : 3
Wed May 3 09:52:49 PM KST 2023
Select : 4
j tty1 2023-05-03 10:46
j pts/0 2023-05-03 10:46
j pts/1 2023-05-03 10:47 (10.0.2.2)
j pts/2 2023-05-03 10:47 (10.0.2.2)
j pts/3 2023-05-03 11:54 (10.0.2.2)
j pts/4 2023-05-03 11:54 (10.0.2.2)
j pts/5 2023-05-03 12:08 (10.0.2.2)
j pts/6 2023-05-03 12:08 (10.0.2.2)
j pts/7 2023-05-03 15:06 (10.0.2.2)
j pts/8 2023-05-03 15:09 (10.0.2.2)
j pts/9 2023-05-03 17:55 (10.0.2.2)
j pts/13 2023-05-03 16:20 (10.0.2.2)
j pts/14 2023-05-03 16:20 (10.0.2.2)
j pts/15 2023-05-03 17:14 (10.0.2.2)
j pts/16 2023-05-03 17:14 (10.0.2.2)
Select : 5
Shift 문
root@ysy:~/d80# vi shift.sh
root@ysy:~/d80# ./shift.sh
C언어 자료구조 UNIX 오라클
자료구조 UNIX 오라클
UNIX 오라클
오라클
------------------------
C언어 자료구조 UNIX 오라클
shift 3
오라클
함수 - 1
root@ysy:~/d80# vi func1.sh
root@ysy:~/d80# ./func1.sh
sub 함수입니다
함수에서 인수 받기
$1 = 한국인, $2 = 중국인
함수에서 리턴하기
return value = 20
함수 - 2
root@ysy:~/d80# vi func2.sh
root@ysy:~/d80# ./func2.sh
3 + 5 = 8
배열
==> 선언> 배열은 1차원만 지원함
root@ysy:~/d80# declare -a bb=(3 5 7) --> bb 라는 리스트 만들기(공백으로 구분)
root@ysy:~/d80# echo $bb --> bb의 첫번째 값 노출
3
root@ysy:~/d80# echo ${bb} --> $bb 와 같음
3
root@ysy:~/d80# echo ${bb[0]} --> bb의 첫 번째 값 출력
3
root@ysy:~/d80# echo ${bb[1]} --> bb의 두 번째 값 출력
5
root@ysy:~/d80# echo ${bb[2]} --> bb의 세 번째 값 출력
7
root@ysy:~/d80# echo ${bb[*]} --> $* 하나의 문자열에 모든 매개변수 포함
3 5 7
root@ysy:~/d80# echo ${bb[@]} --> $@ 모든 매개변수를 각각 단어 단위로 분리하여 포함
3 5 7
==> 하나 추가
root@ysy:~/d80# declare -a bb[3]=4 --> bb배열의 4번째에 4라는 숫자 추가
root@ysy:~/d80# echo ${bb[*]}
3 5 7 4
root@ysy:~/d80#
==> 특정 요소만 삭제
root@ysy:~/d80# unset bb[3] --> bb배열의 4번째 값 삭제
root@ysy:~/d80# echo ${bb[*]}
3 5 7
==> 배열 개수 구하기
root@ysy:~/d80# echo ${#bb[@]} --> bb배열의 개수
3
root@ysy:~/d80# bb[3]=4 --> 요소 하나 추가
root@ysy:~/d80# echo ${#bb[@]} --> 하나 추가 되었으니 bb배열 개수 4개
4
root@ysy:~/d80# a[0]="aa" --> aa 라는 문자열을 a배열의 첫 번째 값으로 넣음
root@ysy:~/d80# a[1]="bb" --> bb 라는 문자열을 a배열의 두 번째 값을 넣음
root@ysy:~/d80# echo $a[0] $a[1] --> [0], [1] 을 인식을 못하여 첫 번째 인덱스 값만 불러옴
aa[0] aa[1]
root@ysy:~/d80# echo ${a[0]} ${a[1]} --> 변수의 블록을 {} 로 감싸주어야 함
aa bb
==> 변수를 명확히 해주는 게 좋음
root@ysy:~/d80# a=30
root@ysy:~/d80# echo " \$a = $a입니다"
$a = 30입니다
root@ysy:~/d80# echo " \$a = ${a}입니다"
$a = 30입니다
==> 정수만 설정
root@ysy:~/d80# typeset -i k[3]
root@ysy:~/d80# k[0]=1
root@ysy:~/d80# k[1]=2
root@ysy:~/d80# k[2]=3
root@ysy:~/d80# echo ${k[*]}
1 2 3
==> 배열 길이 구하기
root@ysy:~/d80# echo ${#k[@]}
3
root@ysy:~/d80# echo ${#k[*]}
3
==> 반복할 때
root@ysy:~/d80# for i in "${k[@]}"
> do
> echo "$i"
> done
1
2
3
==> 배열 해제
root@ysy:~/d80# echo ${#k[*]}
3
root@ysy:~/d80# unset k --> 배열 해제
root@ysy:~/d80# echo ${#k[*]}
0
==> 반드시 인접하지 않아도 됨. 연속적이지 않아도 됨.
root@ysy:~/d80# array[10]=40
root@ysy:~/d80# array[15]=50
root@ysy:~/d80# echo ${#array[*]}
2
root@ysy:~/d80# echo ${array[*]}
40 50
trap
^C, ^Z 등은 바로 종료됨 --> 태클
trap 명령은 시그널이 프로그램에 어떻게 대응할지 관리함
trap. kill signal 은 같음
kill -l
trap -l
ex)
trap 'echo "hahaha" > $HOME/yes' INT --> 명령을 주고 태클(^C)을 걸기
root@ysy:~/d80# trap 'echo "hahaha" > $HOME/yes' INT
root@ysy:~# ls
d80 snap
root@ysy:~/d80# ^C
root@ysy:~/d80# cd ..
root@ysy:~# ls
d80 snap yes
trap 'echo "hohoho" > $HOME/hoho' 2 --> 명령을 주고 태클(^C)을 걸기
root@ysy:~# trap 'echo "hohoho" > $HOME/hoho' 2
root@ysy:~# ls
d80 snap yes
root@ysy:~# ^C
root@ysy:~# ls
d80 hoho snap yes
파일 관련
조건문 | 의미 |
[ -e file ] | 존재 여부 |
[ -b file ] | block |
[ -c file ] | char |
[ -d file ] | directory |
[ -f file ] | 존재하면서 일반 파일인가? (디렉터리, 장치파일 아님) |
[ -g file ] | SerGID |
[ -L file ] | symbolic link |
[ -k file ] | Sticky bit |
[ -r file ] | read |
[ -u file ] | setUID |
[ -x file ] | execute |
[ -S file ] | 0보다 큰 경우 |
[ ! -option file ] | option이 거짓인 경우 |
[ file1 -nt file2 ] | file1 이 더 최근 파일인지 |
[ file1 -ot file2 ] | file1 이 더 최근 파일인지 |
예제
root@ysy:~/d80# ./a.sh
Directory 맞아요..
**주의
ㄴ 쉘에서는 띄어쓰기도 명령어로 봄
root@ysy:~/d80# k = 50
k: command not found
root@ysy:~/d80# echo $k
'네이버클라우드 > Linux' 카테고리의 다른 글
Linux 9일차 (2023-05-04) 네이버클라우드 서버 설정하기 - 기본 패키지 설치 (0) | 2023.05.04 |
---|---|
Linux 8일차 (2023-05-03) Shell Script - sed 와 awk (0) | 2023.05.04 |
Linux 8일차 (2023-05-03) Shell Script (0) | 2023.05.03 |
Linux 7일차 (2023-05-02) Linux Network - DataBase server (2) | 2023.05.03 |
Linux 7일차 (2023-05-02) Linux Network - Web server (0) | 2023.05.02 |