수업 내용
[전역변수/지역변수]
전역변수 : 변수가 직접 정의되지 않은 프로그램이나 함수에도 변수의 사용이 가능하도록 설정한 변수
지역변수 : 기본으로 선언되는 변수의 방식으로 변수가 선언된 프로그램이나 함수 내에서만 사용 가능한 변수
일반적으로 모든 변수는 지역변수로 선언
메인쉘에서 서브쉘로의 변수값 전달 시 반드시 전역변수 선언 필요
** 문법
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에서 할 일
- 리눅스 종료
- 리눅스 이미지 복사(리눅스 설치된 디렉토리)
ex) C:\Users\itwill\Documents\Virtual Machines\Ubuntu
설치할 PC에서 할 일
- VMware 설치 -> 가상 네트워크 IPv4 확인(ipconfig > VMnet8)
- 복사한 리눅스 이미지 다운 (위치는 가급적 VMware 설치 디렉토리에)
- 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 기준 숫자 정렬