사용자 정의 함수
사용자가 직접 함수를 작성하고 호출할 수 있다.
형식은 다음과 같다
함수 이름() {
내용들
}
func1.sh
#!/bin/sh
myFuction() {
echo "함수 안으로 들어 왔음"
return
}
echo "프로그램을 시작합니다."
myFuction
echo "프로그램을 종료합니다."
exit 0
실행
[root@localhost ~]# sh func1.sh
프로그램을 시작합니다.
함수 안으로 들어 왔음
프로그램을 종료합니다.
함수의 파라미터 사용
함수의 파라미터 즉 인자를 사용하려면 함수를 호출할 때 뒤에 파라미터를 붙여서 호출하며, 함수 안에서는 $1, $2, … 로 사용한다. 형식은 다음과 같다.
함수 이름() {
$1, $2, ... 등을 사용
}
함수 이름 파라미터 1 파라미터 2
func2.sh
!/bin/sh
hap () {
echo expr $1 + $2
}
echo "10 더하기 20을 실행합니다."
hap 10 20
exit 0
실행
[root@localhost ~]# sh func2.sh
10 더하기 20을 실행합니다.
30
eval
문자열을 명령문으로 인식한다.
다음은 디렉토리 내의 .sh 파일을 전부 리스트 하는 프로그램이다.
eval.sh
#!/bin/sh
str="ls -l *.sh"
echo $str
eval $str
exit 0
실행
[root@localhost ~]# sh eval.sh
ls -l eval.sh func1.sh func2.sh
-rw-r--r--. 1 root root 54 3월 21 11:55 eval.sh
-rw-r--r--. 1 root root 172 3월 21 11:49 func1.sh
-rw-r--r--. 1 root root 103 3월 21 11:52 func2.sh
export
외부 변수로 선언한다.
선언한 변수를 다른 프로그램에서도 사용할 수 있게한다.
exp1.sh
!/bin/sh
echo $var1
echo $var2
exit 0
exp2.sh
#!/bin/sh
var1="지역변수"
export var2="외부 변수"
sh exp1.sh
exit 0
실행
[root@localhost ~]# sh exp2.sh
외부 변수
var1은 exp1.sh 에서만 실행하는 지역변수인데 반해 var2는 exp1.sh 밖에서도 실행할 수 있는 외부 변수다. 그래서 exp2.sh에서도 실행이 가능하다.
exp1.sh에서 선언한 var2가 외부 프로그램인 exp2.sh에서 사용된 것이다.
printf
C언어의 printf() 함수와 비슷하게 형식을 지정해서 출력할 수 있다.
printf.sh
!/bin/sh
var1=100.5
var2="재미있는 리눅스"
printf "%5.2f \n\n \t %s \n" "$var1" "$var2"
exit
실행
[root@localhost ~]# sh printf.sh
100.50
재미있는 리눅스
set과 $명령
리눅스 명령을 결과로 사용하려면 ‘$명령’ 형식을 사용해야한다. 또, 결과를 파라미터로 사용하고자 할 때는 set명령과 함께 사용한다.
set.sh
!/bin/sh
echo "오늘 날짜는 $(date) 입니다"
set $(date)
echo "오늘은 $4 요일 입니다."
exit 0
$(date)는 date 명령을 실행한 결과를 보여준다. 그 결과가 $1, $2 … 등의 파라미터 변수에 저장 된다.
4행에서 date 명령의 4번째 파라미터인 ‘요일’이 출력되는 것이다.
실행
[root@localhost ~]# sh set.sh
오늘 날짜는 2024. 03. 21. (목) 12:54:20 KST 입니다
오늘은 (목) 요일 입니다.
shift
파라미터 변수를 왼쪽으로 한 단계씩 아래로 시프트(이동) 시킨다.
shift.sh
1 #!/bin/sh
2 myfunc () {
3 str=""
4 while [ "$1" != "" ] ; do
5 str="$str $1"
6 shift
7 done
8 echo $str
9 }
10 myfunc AAA BBB CCC DDD EEE FFF GGG HHH III JJJ KKK
11 exit 0
실행
[root@localhost ~]# sh shift.sh
AAA BBB CCC DDD EEE FFF GGG HHH III JJJ KKK
4행 : $1 파라미터가 비어있지 않은 동안에 반복 수행 하는 것이다. 처음 $1은 AAA고, 한 번 반복 실행하면 5, 6행에 의해 $1이 BBB가 됨
5행 : str 변수에 $1을 추가한다.
전체 파라미터를 왼쪽으로 시프트시킨다. 즉 $2 -> $1, $3 -> $2 .. 의 형태로 작업이 일어난다.