본문 바로가기

리눅스

[ 15일차 ] 리눅스 쉘 프로그램 [fedora20_8_shell. ppt]

 

22.06.08 (수)

 

리눅스 쉘 프로그램

[fedora20_8_shell. ppt]

fedora20_8_shell.ppt
0.64MB

 

▶Bourne Again shell (bash) 특징

1) 명령어 Historya 기능

2) 산술 연산 기능

3) 작업 제어 기능 (제어: 조건문사용가능)

4) Prompt 제어 기능

5) tab키를 이용 파일 이름 완성 기능

6) 확장된 내부 명령어

 

▶p6. 기타 특수문자

~ 홈디렉토리

[ ] 문자집합

{ } 명령집합

! 명령문 history

* null문자를 포함한 모든 문자열 치환

? 단일 문자의 치환

\ 다음에 나오는 문자의 특별한 의미 제거

' ' 특수 문자의 의미 제거

# 주석처리

; shell 명령 분리자 (문장의 끝을 나타냄)

$ 변수의 접근

 

▶프로그램에서 변수를 나타내는 방법

1.형을 선언하고 변수 사용하기

ㄴ int k, string k 등등 c언어나 java에서 사용

2.값이 들어오면 변수의 형이 정의되는 방법

ㄴ k=10 , k='우리' 라고 해주면 자동으로 숫자형, 문자형으로 정의가 된다

자바스크립트, 리눅스의 쉘에서 사용

 

99 , 01050376133

99는 숫자로 생각하고 , 01050376133 는 문자로 생각할 수 있다 맨 앞에 0이 들어가서

ㄴ 주민번호나 핸드폰 번호 등등 은 문자로 생각한다 / 연산을 하지 않으니까

연산하는 것을 숫자로 본다

 

▶Shell 스크립트 파일 만들기

 

1. 변수는 대소문자를 구분한다.

2. 변수에서 문자 숫자 구분은 없다.

3. 숫자 A=10, 문자 A=“10”

4. 지정된 변수를 사용 할 때는 $ 기호를 사용

예) os = linux

echo $os

5. read 문 – 사용자의 표준입력을 받아 들여

변수로 사용할 때 사용.

 

read문 예제

#> vi test.sh

#! /bin/bash (여기서 #은 선언문)

echo –n “input name:” (echo-출력문)

read name (read-입력받은값을 출력)

echo $name

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

#> sh test.sh

 

 
 

▶쉘 스크립트의 장점

C 프로그램과 유사한 형태의 프로그래밍이 가능하다.

 

▶쉘 스크립트 파일

‘ #! /bin/bash ‘ 로 시작한다.

 

[실행방법]

#>sh [스크립트 파일명]

 

[퍼미션 변경 후 실행 : chmod +x 파일명] --x 는 실행권한

./[스크립트 파일명]

 

[korea@localhost ~]$ vi test.sh

[korea@localhost ~]$ ls -l

-rw-rw-r-- 1 korea korea 60 6월 8 10:07 test.sh

 

[korea@localhost ~]$ chmod +x test.sh

[korea@localhost ~]$ ls -l

-rwxrwxr-x 1 korea korea 60 6월 8 10:07 test.sh --x가 다 추가됨

 

[korea@localhost ~]$ ./test.sh --앞에 sh 안써도 실행 가능해짐

input name:

 

 

▶number.sh

#! /bin/bash

if [ 4 -gt 9 ] [ 4 -gt 9 ] --gt는 크다는 의미

then 4 > 9

echo “ A “

else

echo " B "

fi

 

 

 

 

 

▶String.sh (문자열비교)

 

#! /bin/bash

if [ aaa = "aaa" ]

then

echo " = "

else

echo "!= "

fi

 

 

 

 

▶숫자계산

 

쉘 스크립트에서 숫자의 계산은 expr 을 사용 합니다.

 

expr : 숫자 계산

+ : 더하기, - : 빼기 , / 나누기 , % 나머지

* : 곱하기 (‘\*’ 로 사용한다.)

 

[주의사항]

expr 로 지정하는 경우 역따옴표 ` ` 를 사용. (키보드1 앞에있음)

연산자 * 와 괄호 앞에는 역슬래시(\) 를 같이 사용

연산자와 숫자, 변수, 기호 사이에는 Space 가 존재해야 한다

 

vi expr1.sh

 

#! /bin/bash

num=`expr 2 + 10 - 4` --띄어쓰기 그대로 해줘야함

echo $num

 

 

 

 

vi expr2.sh

 

#! /bin/bash

 

num=`expr \( 2 + 10 \) \* 4` --연산자 * 와 괄호 앞에는 역슬래시(\) 를 같이 사용

echo $num

 

 

 

 

1- 10까지 출력

 

#! /bin/bash

echo -n "aaa:“

read A

B=11

while [ $A -lt $B ] -- -lt 는 < 의미 (작다)

do

echo $A

A=` expr $A + 1 `

done

echo " end "

 

 

 

누적합 계산

 

 

#! /bin/bash

 

echo -n "aaa:"

read A

B=11

C=0 --앞에서 변수 선언 안해줘도 초기값으로 들어감

while [ $A -lt $B ]

do

echo $A

C=` expr $C + $A`

A=` expr $A + 1`

done

echo "end"

echo "============"

echo "누적합:$C"

 

#! /bin/bash

 

echo -n "aaa:"

read A

B=11 --변수선언 안해준 것

while [ $A -lt $B ]

do

echo $A

C=` expr $C + $A`

A=` expr $A + 1`

done

echo "end"

echo "============"

echo "누적합:"$C

 

 

 

홀수만 누적합 구하기

 

#! /bin/bash

 

echo -n "aaa:"

read A

B=11

while [ $A -lt $B ]

do

if [ `expr $A % 2` -eq 1 ] -- -eq는 같다는 의미 , 2로나눈 나머지가 산술연산이기 때문에 expr을 써준다

then

echo $A

C=`expr $C + $A`

fi

A=`expr $A + 1`

done

echo "end"

echo "============"

echo "누적합:"$C

 

 

 

 


 

문자열 비교 연산자

 

숫자 비교 연산자

 

 


▶vi read1.sh

 

#! /bin/bash

 

echo " end ^^ "

echo " end ^^ "

echo " end ^^ "

echo " end ^^ "

 

end ^^

end ^^

end ^^

end ^^

ㄴ echo는 자동 줄바꿈이 됨

 

 

▶ vi read2.sh

 

#! /bin/bash

 

echo -n "1"

echo -n "2"

echo -n "3"

echo "4"

 

 

1234

ㄴ -n 옵션 쓰면 붙어서 써짐

 

 

▶vi read3.sh

 

#! /bin/bash

echo -n "Name : “

read name

echo " MY NAME IS $name ^^" -- $name 은 변수값으로 받아오는 것

 

 

 

▶조건문

 

쉘 프로그램에서의 조건문은 if , for , until

등이 있다.

 

1) if 구문

2) if ~ else 문

3) if ~ elif 문

 

 

vi if1.sh

 

#! /bin/bash

if [ 9 -gt 4 ]

then

echo "9"

fi

 

++

#! /bin/bash

if [ 9 -gt 4 ];then

echo "9"

fi

ㄴ 쉘프로그램은 라인 단위로 해석되므로 각각 다른 라인에 작성하여야 한다. 하지만 ; 을 이용하여 라인의 끝을 인식시킬 수도 있다. 많이 쓰진 않음

 

 

 

if2.sh

 

#! /bin/bash

read AA

if [ $AA -gt 0 ] -- 0보다 크면

then

echo "++++"

else

echo "----"

fi

 

 

 

▶관계연산자

-a : and -o : or

모두 참일때 참 한개이상참이면 참

 

#! /bin/bash

echo -n "input number 7, 8: "

read _num

 

if [ \( $_num -lt 7 \) -o \( $_num -gt 8 \) ]

then

echo "7, 8<--- input number(bad) “

fi

 

if [ $_num -eq 7 ]

then

echo "input number : 7 “

fi

 

if [ $_num -eq 8 ]

then

echo "input number : 8 “

fi

 

 

 

 

▶for 구문

for 문은 조건 , 반복문 입니다.

for문은 괄호 두개를 쓴다

 

 

vi for1.sh

 

#! /bin/bash

 

for i in 1 2 3 4 5

 

do

echo $i

done

 

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

vi for2.sh

 

#! /bin/bash

 

for (( i=1; i <=10; i++))

 

do

echo $i

done

 

 

 

1,2,3,4,5,6,7,8,9,10 으로 출력해보기

 

#! /bin/bash

 

for (( i=1; i<=10; i++ ))

do

if [ $i -eq 10 ]

then

echo "$i"

else

echo -n "$i,"

fi

done

 

 

 

▶seq 명령어

 

#> seq 5 -- 1에서 5까지 출력

 

1

2

3

4

5

 

#> seq 5 15 -- 5에서 15까지 출력

 

5

6

7

8

9

10

11

12

13

14

15

 

#> seq 1 5 20

-- 1에서 20사이의 수중 5씩 증가하면서 출력

1

6

11

16

 

▶중첩 for 문

 

#! /bin/bash

for i in `seq 1 3` --` ` 묶인 문자열은 명령어로 인식됨.

do

for j in `seq 4 6`

do

A=`expr $i + $j`

echo $A

done

done

 

위를 활용하여 구구단 3단 출력하기

 

#! /bin/bash

 

for i in `seq 1 9`

do

A=`expr $i \* 3`

echo " 3 x $i = $A"

done