Cohe
리눅스 쉘 명령어2 본문
쉘 명령어 2
- while 문
: 조건식이 참인 동안 계속 반복하는 구문
[형식]
while [ 조건식 ]
do
반복할 내용들....
done
while1.sh
======
#!/bin/bash << bash로 실행시켜 주세요~!
while [ 1 ]
do
echo "무한 반복합니다."
done
exit 0
예시) while 조건이 참인 경우 반복하는 것을 보여줌
- 실습
#!/bin/bash
hap=0
i=1
while [ $i -le 10 ]
do
hap=$((hap + i))
i=$((i + 1))
done
echo "1부터 10까지의 합 : $hap"
exit
- until : while문과 용도는 거의 비슷하고, 동작도 비슷함. 단, 조건식이 참이 아닌 거짓일 경우에 반복함.
while2.sh를 until로 설정해 보기
#!/bin/bash
hap=0
i=10
until [ $i -lt 0 ]
do
hap=`expr $hap + $i`
i=`expr $i - 1`
done
echo "1부터 10까지의 합 : "$hap
exit 0
- ** break, continue, exit, return
break : 주로 반복문에서 사용하고 종료할 경우에 사용.
continue : 반복문의 조건식으로 되돌리는 경우 사용.
continue.sh
========
#!/bin/bash
hap=0
i=0
while [ $i -lt 10 ]
do
i=`expr $i + 1`
if [ $i -eq 5 ]
then
echo $i
continue
fi
hap=`expr $hap + $i`
done
echo "1부터 10까지의 합: "$hap
exit 0
- exit 는 해당 프로그램을 종료 return 은 함수 안에서 사용될 수 있는 것으로 함수를
호출한 곳으로 돌아가게 함.
예시) bce.sh => break, continue, exit 예제
#!/bin/bash
echo "무한반복 입력을 시작합니다. (b: break, c:continue, e: exit)"
while [ 1 ]
do
read input
case $input in
b | B)
break;;
c | C)
echo "continue를 누르면 while의 조건으로 돌아감"
continue ;;
e | E)
echo "exit를 누르면 프로그램(함수)를 완전히 종료함"
exit 1;;
esac;
done
echo "break를 누르면 while을 빠져나와 지금 이 문장이 출력됨."
exit 0
- 파라미터(인자)를 이용하는 함수
: 함수의 파라미터(인자)를 사용하면 함수를 호출할 때에 뒤에 파라미터(인자들)를 붙여서 호출.
넘겨진 파라미터(인자) 사용은 $1, $2, $3, .... 으로 특수한 변수 값을 이용하여 불러와 사용함.
[형식]
==함수 정의==
함수이름 () {
$1, $2, $3과 같이 특수변수를 사용하여
함수 동작 내용을 작성
}
==함수 호출==
함수이름 인자1 인자2 인자3 ....
eval
와 export
의 설명 및 예시
1. eval
eval
명령은 문자열을 명령문으로 인식하고 실행하는 데 사용됩니다. 이를 통해 변수에 저장된 명령을 실행하거나, 복잡한 명령어를 구성할 수 있습니다.
예시:
# eval.sh
#!/bin/bash
# 변수 str에 명령어를 저장
str="ls -l eval.sh"
# 변수의 값을 출력
echo $str
# eval을 사용하여 변수에 저장된 명령어를 실행
eval $str
exit 0
위 예시에서는 str
변수에 저장된 문자열 ls -l eval.sh
을 eval
을 통해 실행합니다. 이는 실제로 ls -l eval.sh
명령을 실행하는 것과 동일한 효과를 가집니다.
2. export
export
명령은 변수를 환경 변수로 선언하여, 현재 쉘 스크립트뿐만 아니라 호출된 다른 프로그램이나 스크립트에서도 사용할 수 있게 만듭니다. 즉, 변수의 범위를 전역으로 확장합니다.
예시:
# exp1.sh
#!/bin/bash
# 전달받은 변수를 출력
echo $var1
echo $var2
exit 0
# exp2.sh
#!/bin/bash
# 지역 변수 선언
var1="지역변수"
# 외부 변수 선언 (export)
export var2="외부변수"
# exp1.sh 스크립트를 실행
bash exp1.sh
exit 0
위의 예시에서는 exp2.sh
에서 두 개의 변수를 정의합니다: var1
과 var2
. var1
은 단순한 지역 변수로, exp1.sh
에서 접근할 수 없습니다. 반면에 var2
는 export
를 통해 외부 변수로 선언되었기 때문에 exp1.sh
에서도 접근할 수 있습니다.
실행 결과:
exp1.sh
에서var1
은 출력되지 않으며,var2
는 "외부변수"라는 값을 출력합니다. 이는export
덕분에var2
의 값이exp1.sh
에서도 유효하게 유지되기 때문입니다.
printf
, set
, shift
명령어에 대한 설명 및 예시
1. printf
printf
명령은 C 언어의 printf
함수와 유사하게 형식화된 출력 기능을 제공합니다. 이를 통해 숫자, 문자열 등을 원하는 형식으로 출력할 수 있습니다.
예시:
# printf.sh
#!/bin/bash
# 변수 선언
var1=100.5
var2="재미있는 이시간 해피~~~스마일!!"
# 형식 지정 출력
printf "%5.2f \\n\\n \\t %s \\n" $var1 "$var2"
exit
%5.2f
는var1
을 소수점 두 자리까지 출력하며, 최소 5자리 폭을 확보합니다.%s
는var2
를 문자열로 출력합니다.$var2
는 공백을 포함할 수 있는 문자열이므로," "
로 감싸야 합니다. 공백이 포함된 문자열을 출력할 때" "
로 묶지 않으면 공백이 구분자로 해석되어 문자열이 잘릴 수 있습니다.
2. set
과 $(명령)
set
과 $(명령)
은 쉘 스크립트에서 명령어의 출력을 변수로 처리할 때 유용합니다. $(명령)
은 명령어를 실행하고 그 결과를 반환합니다. set
은 이 결과를 위치 매개변수로 설정합니다.
예시:
# set.sh
#!/bin/bash
# 현재 날짜를 출력
echo "오늘 날짜는 $(date) 입니다."
# 현재 날짜를 위치 매개변수로 설정
set $(date)
# 날짜의 네 번째 필드 (요일) 출력
echo "오늘은 $4요일 입니다."
exit 0
$(date)
는 현재 날짜와 시간을 출력합니다.set $(date)
는date
명령의 결과를 위치 매개변수로 설정하여,$1
,$2
, ...로 접근할 수 있습니다. 여기서는 날짜의 네 번째 필드인 요일($4
)을 출력합니다.
3. shift
shift
명령은 위치 매개변수를 왼쪽으로 한 단계 이동시킵니다. 이를 통해 매개변수를 순차적으로 처리할 수 있습니다.
예시:
# shift.sh
#!/bin/bash
# 함수 정의
myfunc () {
str=""
while [ "$1" != "" ]
do
str="$str $1"
shift
done
echo $str
}
# 함수 호출
myfunc AAA BBB CCC DDD EEE FFF GGG HHH III JJJ KKK
exit 0
myfunc
함수는 위치 매개변수들을 순차적으로 받아서 공백으로 구분된 문자열로 합칩니다.shift
명령은$1
을 처리한 후$2
를$1
으로 이동시키며 반복합니다.- 최종적으로 모든 매개변수가 문자열로 결합되어 출력됩니다.
이 예시에서 myfunc
는 여러 개의 인자를 받아서 이를 공백으로 구분된 문자열로 출력합니다. shift
명령을 사용하여 각 매개변수를 하나씩 처리합니다.
======================================================
문제1] 파일을 복사하는 스크립트를 작성하세요.
[동작]
복사할 파일 : (대상입력)
복사할 위치 및 파일이름 : (복사 위치 및 파일명)
copy_file.sh
스크립트
#!/bin/bash
# 복사할 파일 경로 입력 받기
read -p "복사할 파일 경로를 입력하세요: " source_file
# 복사할 위치 및 파일 이름 입력 받기
read -p "복사할 위치 및 파일 이름을 입력하세요: " destination_file
# 파일이 존재하는지 확인
if [ ! -f "$source_file" ]; then
echo "오류: 복사할 파일이 존재하지 않습니다."
exit 1
fi
# 파일 복사
cp "$source_file" "$destination_file"
# 복사 성공 여부 확인
if [ $? -eq 0 ]; then
echo "파일이 성공적으로 복사되었습니다."
else
echo "파일 복사에 실패했습니다."
exit 1
fi
exit 0
설명
- 파일 경로 입력 받기:
read -p
명령을 사용하여 사용자로부터 복사할 파일 경로와 복사할 위치 및 파일 이름을 입력받습니다. - 파일 존재 여부 확인:
if [ ! -f "$source_file" ]; then
구문을 사용하여 입력된 복사할 파일이 존재하는지 확인합니다. 존재하지 않을 경우 오류 메시지를 출력하고 스크립트를 종료합니다. - 파일 복사:
cp "$source_file" "$destination_file"
명령을 사용하여 파일을 복사합니다. - 복사 성공 여부 확인:
if [ $? -eq 0 ]; then
구문을 사용하여cp
명령의 성공 여부를 확인하고 성공 여부에 따라 적절한 메시지를 출력합니다.
- 확인
user1@myserver01:~/shellscript$ vim copy_file.sh
user1@myserver01:~/shellscript$ chmod +x copy_file.sh
user1@myserver01:~/shellscript$ ./copy_file.sh
복사할 파일 경로를 입력하세요: ./copy_file.sh
복사할 위치 및 파일 이름을 입력하세요: ./test
파일이 성공적으로 복사되었습니다.
'배포 배우기' 카테고리의 다른 글
Docker (1) | 2024.08.08 |
---|---|
CI/CD 배포 (0) | 2024.08.05 |
리눅스의 쉘 스크립트 (0) | 2024.07.29 |
가상 서버에 jar 파일 넣어서 배포하는 법 - RDS 설정 (0) | 2024.07.29 |
리눅스 다운 (0) | 2024.07.25 |