Oracle 24일차

수업 내용

[전역변수/지역변수]

전역변수 : 변수가 직접 정의되지 않은 프로그램이나 함수에도 변수의 사용이 가능하도록 설정한 변수
지역변수 : 기본으로 선언되는 변수의 방식으로 변수가 선언된 프로그램이나 함수 내에서만 사용 가능한 변수

일반적으로 모든 변수는 지역변수로 선언
메인쉘에서 서브쉘로의 변수값 전달 시 반드시 전역변수 선언 필요

** 문법
export 변수명=값
또는
변수명=값
export 변수명

# 23_export1.sh - 이게 메인이니깐 이거 실행시켜야 됨
#!/bin/sh

# main shell program
var1=1         # 지역변수
export var2=2  # 전역변수

# sub shell program
sh 24_export2.sh  # var2 값만 서브쉘로 전달 됨

# 24_export2.sh
#!/bin/sh

# sub shell main
echo "sub shell start"
echo "1st var : $var1"
echo "2nd var : $var2"

[파라미터 변수]

쉘 실행 시 쉘 내부로 인수를 빠르게 전달하기 위한 방식
쉘 실행 시 차례대로 입력되는 인수를 숫자를 통해 전달

EX)
sh passwd.sh scott oracle # $1 : scott, $2 : oracle

$0 : 현재 실행되는 파일 명
$* : 모든 위치변수 값

# 25_parameter.sh
#!/bin/sh

# parameter 변수 (위치변수)
# shell이 실행될 때 그 뒤에 입력되는 입력값을 차례대로
# shell 내부로 전달하기 위해 사용하는 변수

echo "file name : $0"
echo "1st var : $1"
echo "2nd var : $2"
echo "3rd var : $3"
echo "end"

[사용자 정의 함수]

사용자가 직접 만드는 함수
새로운 기능을 갖는 함수 생성 시 필요
반복되는 문장을 하나의 함수로 선언

** 문법
# 함수 선언
함수명() {
내용
}
# 함수 호출
함수명 인수1 인수2 …

# 26_func1.sh
#!/bin/sh

# 두 수를 입력받아 두 수의 합을 리턴하는 함수 생성
fsum() {
  echo "$1 + $2 = $(expr $1 + $2)"
}

fsum 100 200

# ... 반복 함수
func1() {
  echo "프로그램을 종료하겠습니다\c"
  for i in . . .
  do
    echo "$i\c"
    sleep 1
  done
  echo
}

func1

[전역함수]

일반적으로 함수가 정의된 쉘 내부에서만 해당 함수 사용 가능
미리 정의된 함수를 다른 쉘에 전달 시 함수가 정의된 파일을 실행시키고 메인쉘 호출

** 문법
. /파일경로/파일명

# 27_func2.sh - 26_func1.sh 를 불러와서 사용하는 예
#!/bin/sh

. /home/itwill/linux_ex/ch9/26_func1.sh

fsum 100 200
func1

[특수 기호]

** 정규식 관련
* : 임의의 0개 이상의 문자 의미
? : 임의의 문자 1개 의미
[] : []안의 문자 중 1개 의미. [0-9] 이런식으로 범위를 표현할 수도 있음.

** 디렉토리 관련
~ : home디렉토리 의미
– : 이전 디렉토리 의미

** 명령 관련
; : 연결된 명령을 왼쪽부터 실행
| : 왼쪽 명령의 실행결과를 오른쪽 명령에 입력으로 전달

** 특수 문자 관련
‘ : 모든 특수 문자를 일반 문자로 간주
” : $, “, \, * 을 제외한 특수 문자를 일반 문자로 간주
\ : 바로 뒤에 오는 특수 문자를 일반 문자로 간주

** 입출력 관련
>, >> : 출력 리다이렉션
<, << : 입력 리다이렉션

** 파일디스크립터
0 : 표준입력
1 : 표준출력
2 : 표준오류

[리눅스 이식 방법]

설치된 PC에서 할 일

  1. 리눅스 종료
  2. 리눅스 이미지 복사(리눅스 설치된 디렉토리)
    ex) C:\Users\itwill\Documents\Virtual Machines\Ubuntu

설치할 PC에서 할 일

  1. VMware 설치 -> 가상 네트워크 IPv4 확인(ipconfig > VMnet8)
  2. 복사한 리눅스 이미지 다운 (위치는 가급적 VMware 설치 디렉토리에)
  3. VMware 실행
    Open a Virtual Machine > 복사한 디렉토리 선택
    -> vmx 파일 실행 > move or copy 중 copy 선택
    -> 기동 후 IP확인(ifconfig)
    -> putty로 접속

[printf]

<포맷>
%d : 정수
%f : 실수
%s : 문자열

예)
%7d : 빈 앞자리를 공백으로 채우는 7자리의 정수
%07d : 빈 앞자리를 0으로 채우는 7자리 정수
%.2f : 빈 자리는 0으로 채워서 소수점 두 자리까지 표시하는 실수
%7s : 빈 앞자리를 공백으로 채우는 7자리 문자열
%-7s : 빈 뒷자리를 공백으로 채우는 7자리 문자열

[정렬]

ls

ls결과를 여러 조건에 맞게 정렬 가능

** 문법
ls [옵션] [경로]

** 옵션
-r : reverse
-S : 사이즈 큰 파일부터
-t : 시간순 정렬
-v : 자연정렬(이름에 숫자가 포함된 경우 숫자 기준으로 정렬해줌)

sort

문서 정렬

** 문법
sort [옵션] 파일명

** 옵션
-k : 필드 위치 지정 ex) -k2 : 두번째 필드로 정렬
-n : 숫자 정렬
-r : reversce 정렬
-t : 필드구분자 지정 ex) -t, : , 로 분리 구분
-u : unique 값 리턴. 즉, 중복된 행 한 번만 출력

ex)
find /home/itwill/linux_ex/ch9 -name “*.sh” | sort -t/ -k6 -n # 파일 이름 기준 숫자 정렬
sort -t: -k3 -n /etc/passwd # uid 기준 숫자 정렬

Leave a Comment