함수는 특정 목적을 수행하는 프로그램 모듈을 의미
함수정의
함수이름() {
수행하고자 하는 명령
return -> 생략가능
}
함수호출
:
함수이름
:
함수 생성 및 활용
#! /bin/sh
echo "함수 생성 및 활용"
add()
{
total=`expr $1 + $2`
echo "연산 결과 : $num1 + $num2 = $total"
}
echo "두 수를 입력해주세요"
echo "첫번째 수 입력"
read num1
echo "두번째 수 입력"
read num2
add $num1 $num2
exit 0
eval : 문자열을 명령문으로 인식
echo "문자열을 명령문으로 인식 eval"
echo "문자열로 인식"
filename="ls /tmp" 문자열그대로 ls /tmp 출력
echo $filename
echo "명령문으로 인식 eval"
eval $filename 명령어 ls /tmp와 같은 결과
exit 0
printf : 문자열 출력
#! /bin/sh
echo "키보드로 실수를 입력 및 출력"
echo "실수를 입력하세요"
read float_num
echo "문자열로 값을 입력하세요"
read input_str
echo "실수의 출력형태 지정"
printf "%5.2f \n "$float_num
echo "-----------------------"
echo "문자열 출력형식 지정"
printf "%s \n " "$input_str"
printf "%s \n " $input_str
exit 0
set과 $로 명령어 형식 지정
명령어를 매개변수로 받아 사용
#! /bin/sh
echo "set과 $로 명령어 형식 지정"
echo "오늘의 날짜 출력 : $(date)"
set $(date)
echo "오늘의 요일 출력 : $4 요일"
exit 0
결과 :
set과 $로 명령어 형식 지정
오늘의 날짜 출력 : 2022. 07. 21. (목) 10:09:33 KST
오늘의 요일 출력 : (목) 요일
실습
오늘의 년도 출력 : 2022년도
월일 출력 : 7월 21일
echo "오늘의 년도 출력 : $1 년도"
echo "월일 출력 : $2월 $3일"
결과
오늘의 년도 출력 : 2022. 년도
월일 출력 : 07.월 21.일
표준 스트림(standard stream)
입출력 전환(I/O Redirection)
리다이렉션이란 말그대로 방향을 변경하는 것이다.
표준 출력 파일(stdout)과 표준 입력 파일(stdin) 변경을 허용하는 것
ex)
# who
centos 2022-07-21 09:32 (:0)
root 2022-07-21 09:32 (192.168.56.1)
# who > output.txt
# ls
eval.sh hello.txt output.txt printf_test.sh
developer function_test.sh print_date.sh
cat output.txt
centos 2022-07-21 09:32 (:0)
root 2022-07-21 09:32 (192.168.56.1)
# who >> output.txt : >> -> 덮어쓰기X 이어쓰기
# cat output.txt
centos :0 2022-07-21 09:32 (:0)
root pts/0 2022-07-21 09:32 (192.168.56.1)
centos :0 2022-07-21 09:32 (:0)
root pts/0 2022-07-21 09:32 (192.168.56.1)
#
표준 에러
ex)
# ls -l /bin/usr
ls: cannot access /bin/usr: 그런 파일이나 디렉터리가 없습니다
# ls -l /bin/usr > err.txt
ls: cannot access /bin/usr: 그런 파일이나 디렉터리가 없습니다
# cat err.txt
# ls -l /bin/usr 2> err.txt
# cat err.txt
ls: cannot access /bin/usr: 그런 파일이나 디렉터리가 없습니다
명령문자
종류 | 의미 |
---|---|
& | 명령을 백그라운드에서 실행 |
$ | 변수에 접근 가능 |
; | 명령의 끝 |
# | 주석 |
: 와일드 카드로 표준 입출력을 지정하는 경우도 있다