섹션 7. 입출력과 환경변수

 

리눅스 서버를 자동화하여 관리하기 위한 쉘 스크립트(Shell Script) 심화 강좌를 정리합니다.
출처 : inflearn

1. 입력과 출력(Input and Output)

Bash 스크립트의 입력 및 출력은 복잡한 주제입니다.

Bash 스크립트 입력은 다음처럼 다양한 방법이 가능합니다.

1. 명령 줄 인수
2. 환경 변수
3. 파일
4. 파일 기술자(file descriptor)로 표현 가능한 파이프, 터미널, 소켓 등

Bash 스크립트의 출력은 다음처럼 다양한 형식이 가능합니다.

1. 파일
2. 파일 디스크립터로 표현 가능한 다른 것
3. 다른 프로그램에 명령 줄 인수로
4. 혹은 다른 프로그램에 환경 변수의 형태로 넘길 수도

2. 위치 매개 변수

$1,$2,$3 …${10},${11} 에 위치 매개 변수라는 용어를 사용함.

#!/bin/bash
# rename.sh

# 확장자 변경의 예
for name in *.$1
do
 mv $name ${name%$1}$2
done
AWS_TEST:/home/shkim/edu/shell_cmd/images$ ls
Balloon.jpg  Candy.jpg  drill  glob.gif  settings_down.png  settings_up.png  shadingimage.tiff  smaller.tiff
AWS_TEST:/home/shkim/edu/shell_cmd/images$ ../rename.sh png JPG


AWS_TEST:/home/shkim/edu/shell_cmd/images$ ls
Balloon.jpg  Candy.jpg  drill  glob.gif  settings_down.JPG  settings_up.JPG  shadingimage.tiff  smaller.tiff

3. 환경변수와 export

AWS_TEST:/home/shkim$ date
Wed May  4 00:46:11 KST 2022

AWS_TEST:/home/shkim$ LANG=ko_KR.UTF-8 date
2022. 05. 04. () 00:46:26 KST
AWS_TEST:/home/shkim$ date
Wed May  4 00:46:30 KST 2022

AWS_TEST:/home/shkim$ echo $LANG
en_US.UTF-8
AWS_TEST:/home/shkim$ LANG=ko_KR.UTF-8 #환경변수 지정
AWS_TEST:/home/shkim$ date
2022. 05. 04. () 00:47:30 KST
# 로그아웃 후 재접속 하여 date 명령을 치면 환경변수는 원상복귀 됨.

# bash 자식 프로세스에게 기존 환경변수값이 상속됨.  
AWS_TEST:/home/shkim$ echo $LANG
ko_KR.UTF-8
AWS_TEST:/home/shkim$ bash
AWS_TEST:/home/shkim$ echo $LANG
ko_KR.UTF-8
#!/bin/bash
echo $LANG in locale.sh
# 스크립트 내에서도 locale 값이 유지 됨
AWS_TEST:/home/shkim$ ./locale.sh 
ko_KR.UTF-8 in locale.sh

# subshell 에서도 유효함
AWS_TEST:/home/shkim$ echo $LANG; ( echo $LANG in subshell; ); echo $LANG
ko_KR.UTF-8
ko_KR.UTF-8 in subshell
ko_KR.UTF-8
AWS_TEST:/home/shkim$ LANG1=ko_KR.UTF-8

# locale.sh
#!/bin/bash
echo $LANG1 in locale.sh # 수정

# 일반변수 LANG1 에서는 상속이 일어나지 않음
AWS_TEST:/home/shkim$ ./locale.sh 
in locale.sh
# 일반변수에서의 LANG1 은 서브쉘에서 유효함
AWS_TEST:/home/shkim$ echo $LANG1; ( echo $LANG1 in subshell; ); echo $LANG1
ko_KR.UTF-8
ko_KR.UTF-8 in subshell
ko_KR.UTF-8
# 일반변수의 LANG1을 유효하게 하려면 export 를 사용하면 됨.
AWS_TEST:/home/shkim$ export LANG1=ko_KR.UTF-8
AWS_TEST:/home/shkim$ ./locale.sh 
ko_KR.UTF-8 in locale.sh

결론 export 된 변수는 환경변수이다.

4. 변수의 범위(스코프)

5. 파일 디스크립터

6. 리다이렉션