💡 이 문서는 한빛미디어 - 이것이 우분투/리눅스다를 기반으로 공부하면서 체화를 위해 정리하는 글입니다. 💡
for~in문은 다음 형식과 같이 변수에 각각의 값을 넣은 후 do 안에 있는 ‘반복할 문장’을 실행한다.
for 변수 in 값1 값2 값3 ...
do
반복할 문장
done
2행 - hap=0
3행 - for i in 1 2 3 4 5 6 7 8 9 10
i 변수에 1 ~ 10까지 반복해 넣으면서 5행을 10회 실행한다.
기존의 for문과 비슷하게 for((i=1;i<=10;i++))로 변경해서 사용할 수 있다. (변경할 때 괄호가 2개인 것에 주의한다.)
seq
명령을 사용할 수도 있다. 예를 들어 seq 1 10은 1에서 10까지 숫자를 돌려준다.5행 - hap=expr $hap + $i
2행 - for fname in $(ls *.sh)
fname 변수에 ls. *.sh 명령의 실행 결과를 하나씩 넣어서 4~5행을 반복
4행 - echo " --------$fname---------"
5행 - head -3 $fname
while문은 조건식이 참인 동안 계속 반복하는 특성을 갖는다.
2행 - while [ 1 ]
조건식 위치에 [ 1 ] 또는 [ : ]이 오면 항상 참이다.
그러므로 4행을 무한히 반복 실행한다.
ctrl + c
를 눌러 취소할 수 있음
1에서 10까지의 합계를 출력
2행 - hap=0
3행 - i=1
4행 - while [ $i -le 10 ]
6행 - hap=expr $hap + $i
7행 - i=expr $i + 1
비밀번호를 입력받고, 비밀번호가 맞을 때까지 계속 입력받는 스크립트
3행 - read mypass
4행 - while [ $mypass != "1234" ]
7행 - read mypass
while문과 용도가 거의 같지만, until문은 조건식이 참일 때까지 (거짓인 동안) 계속 반복한다.
#!/bin/sh
hap=0
i=1
until [ $i -gt 10] # 10보다 커지면 참 / 거짓인 동안 실행
do
hap=`expr $hap + $i`
i = `expr $i + 1`
done
echo "1부터 10까지의 합"
exit 0
break
는 주로 반복문을 종료할 때 사용
continue
는 반복문의 조건식으로 돌아가게 함
exit
는 해당 프로그램을 완전히 종료
return
은 함수 안에서 사용할 수 있으며 함수를 호출한 곳으로 돌아가게 함
3행 - while [ 1] ; do
5행 - case $input in
6~7행 - b | B) break;;
8~10행 - c | C) echo " continue를 누르면 while의 조건으로 돌아감" continue;;
11~13행 - e | E) echo "exit를 누르면 프로그램(함수)를 완전히 종료함" exit 1;;
사용자가 직접 함수를 작성하고 호출할 수 있다
함수이름 () { # 함수를 정의
내용들...
}
함수이름 # 함수를 호출
2~5행 - myFunction (_ ~ }
함수를 정의한다.
단, 이 부분은 7행에서 호출하기 전에는 실행되지 않는다.
여기서 return 문은 함수를 호출한 곳으로 돌아가게 한다.
7행 - myFunction
함수의 파라미터 (인자)를 사용하려면 함수를 호출할 때 뒤에 파라미터를 붙여서 호출
함수 안에서는 $1, $2, … 로 사용함
함수이름 ( ){ # 함수를 정의
$1, $2, .. 등을 사용
}
함수이름 파라미터1 파라미터2 # 함수를 호출
3행 - echo expr $1 + $2
6행 - hap 10 20
문자열을 명령문으로 인식하고 실행
3행 - echo $str
4행 - eval $str
외부 변수로 선언
2~3행 - echo $var1 , echo $var2
var1과 var2 변수를 출력
2행 - var1="지역 변수"
var1에 값을 넣는다.
일반 변수(지역 변수)이므로 현재 프로그램인 exp2.sh에서만 사용된다.
3행 - export var2="외부 변수"
4행 - sh exp1.sh
C 언어의 printf() 함수와 비슷하게 형식을 지정해서 출력할 수 있다.
3행 - var2="재미있는 리눅스~~"
4행 - printf "%5.2f \n\n \t %s \n" $var1 "$var2"
%5.2f는 총 5자리며 소수점 아래 2자리까지 출력하라는 의미
\n은 1줄을 넘기는 개행 문자
\t는 Tab 문자
%s는 문자열을 출력
주의할점은 $var2의 경우 값 중간에 공백이 있으므로 변수 이름을 ““로 묶어서 오류 방지
리눅스 명령을 결과로 사용하려면 ‘$(명령)’ 형식을 사용해야 한다.
결과를 파라미터로 사용하고자 할 때는 set 명령과 함께 사용
2행 - echo "오늘 날짜는 $(date)입니다."
3행 - set $(date)
4행 - echo "오늘은 $4 요일 입니다."
파라미터 변수를 왼쪽으로 한 단계씩 아래로 시프트(이동) 시킨다.
3행 - str=""
4행 - while [ "$1" != "" ] ; do
$1 파라미터가 비어 있지 않은 동안에 반복 실행한다.
5행 - str="$str $1"
6행 - shift
전체 파라미터를 왼쪽으로 시프트시킨다.
8행 - echo $str