[Shell] 01. Bash 쉘 환경

Date:     Updated:

카테고리:

태그:


01) Bash shell 초기화 파일


적용 범위 내용
시스템 전체 이 파일은 시스템 관리자가 관리하는 파일, bash 쉘 사용자 전체에게 영향을 주기 위해 사용한다.
사용자 구성 이 파일은 시스템 사용자가 관리하는 파일, 사용자에 한정되어 영향을 주기 위해 사용한다.


a) 시스템 전체

  • 사용자 로그인 후 bash 쉘이 실행될 때 bash 쉘에 의해 읽어지고 실행되는 파일

  • bash 사용자 전체에게 영향을 주기 위해 사용되는 파일이기 때문에 시스템 관리자에 의해 관리된다.

파일 내용
/etc/profile 리눅스 시스템 전반에 적용되는 환경 변수들을 설정
/etc/bashrc 시스템 alias와 함수들, 시스템 전반에 적용되는 umask, 프롬프트 형태 지정


b) 사용자 구성

  • 사용자 로그인 후 bash 쉘이 실행될 때 bash 쉘에 의해 읽어지고 실행되는 파일

  • bash 쉘을 사용하는 사용자에 한정되어 영향을 주는 파일이며 사용자의 홈 디렉토리에 존재하는 파일이다.

파일 내용
$HOME/.bash_profile 사용자 환경 설정과 시작 프로그램들을 제어하는 파일, 사용자의 홈 디렉토리를 PATH 변수에 추가하는 등의 설정
$HOME/.bashrc 사용자 별 alias와 함수들 초기화
$HOME/.bash_logout 로그아웃 진행 전 배시 쉘에 의해 읽어지고 실행되는 파일


02) 변수 정의 및 호출


# '변수이름=값'
$ A=1

$ NAME=test

$ MAIL='test@test.com'

$ DATE=`date "+%Y-%m-%d %H:%M"`

# 호출
$ echo "TIME : $DATE
Hello ${NAME}, ${A}.$MAIL"
TIME : 2021-05-03 09:25
Hello test, 1.test@test.co

# 사용자로부터 값을 받기
$ read NAME
TEST
$ echo $NAME
TEST

$ cat name.sh
#!/bin/bash
echo -n "Enter your name : "
read NAME
echo
echo "Your name is $NAME."

$ bash name.sh
Enter your name : test

Your name is test.


03) 지역변수 환경변수



a) set, unset - 정의된 변수를 확인, 변수 해제

# 정의된 변수를 확인
$ NAME=test

$ set | grep ^NAME=
NAME=test

# 변수 해제 
$ unset NAME

$ set | grep ^NAME=


b) export : 환경변수 선언 및 조회, env : 환경 변수 확인

# $ 변수는 특수 변수이며 현재 프로세스에 대한 PID를 가지고 있다.
# $$의 결과값이 bash 프로세스의 PID와 동일한 것을 확인할 수 있다.
$ echo $$
1595

$ ps
    PID TTY          TIME CMD
   1595 pts/0    00:00:00 bash
   1690 pts/0    00:00:00 ps

# bash 명령을 실행하여 하위 쉘을 생성
# 그 안에서 NAME과 AGE 변수값을 호출하면 아래와 같이 값이 출력되지 않는 것을 확인할 수 있다.
$ NAME=test

$ AGE=10

$ echo "$NAME is $AGE years old."
test is 10 years old.

$ bash

$ echo $$
1730

$ ps
    PID TTY          TIME CMD
   1595 pts/0    00:00:00 bash
   1730 pts/0    00:00:00 bash
   1745 pts/0    00:00:00 ps

$ echo "$NAME is $AGE years old."
 is  years old.

$ exit
exit

$ echo $$
1595

$ ps
    PID TTY          TIME CMD
   1595 pts/0    00:00:00 bash
   1746 pts/0    00:00:00 ps

# export 명령을 사용하여 NAME 을 환경변수로 선언
$ export NAME

$ bash

$ echo $$
1750

$ ps
    PID TTY          TIME CMD
   1595 pts/0    00:00:00 bash
   1750 pts/0    00:00:00 bash
   1765 pts/0    00:00:00 ps

$ echo "$NAME is $AGE years old."
test is  years old.

# 선언한 변수를 해제하기 위해 unset 명령을 사용
$ exit
exit

$ unset NAME

$ unset AGE

$ echo "$NAME is $AGE years old."
 is  years old.


04) 특수 변수



a) 위치 파라미터

이름 설 명
$0 명령 이름을 나타냄. 여기서는 쉘 스크립트 파일명 반환
$1-${N} $1는 첫번째 인자, $2는 두번째 인자 $9는 아홉번째 인자, ${10}은 열번째 인자 반환
$# 인자의 총 수를 반환
$* 모든 인자를 반환
$@ 모든 인자를 반환


b) 기타 특수 변수

이름 설 명
$$ 현재 쉘의 PID를 반환
$? 가장 최근에 전면부로 실행한 명령의 exit 상태를 반환. 0은 명령 실행 성공, 0이 아닌 다른 수는 실패
$! 마지막 백그라운드로 실행되고 작업의 PID를 반환


05) 예약 변수와 별칭



a) 예약 변수

이름 설 명
BASH 사용하고 있는 bash 쉘의 경로
BASH_VERSION 사용하고 잇는 bash 쉘의 버전
COLUMNS 터미널의 행 수(기본 값 = 80)
DISPLAY 현재 X-Window Display 위치
HISTFILE 히스토리 파일의 이름
HISTFILESIZE 히스토리 파일 사이즈
HISTSIZE 히스토리의 개수 HOME 사용자의 홈 디렉토리
HOSTNAME 시스템의 호스트명 HOSTTYPE 시스템의 타입 값
LINES 터미널의 라인 수
LOGNAME 로그인 사용자 명
LS_COLORS ls 명령어 사용 시 파일 종류별 색상 지정
MAIL 메일 저장 위치
MAILCHECK 메일 점검 시간(기본 값 = 60초)
MANPATH man 페이지의 경로
OSTYPE 운영체제의 타입
PATH 명령을 찾을 검색 경로
PS1 주 프롬프트 문자열 설정 값
UID 현재 사용자의 UID 값


b) 별칭

# 별칭 정의
$ fs
-bash: fs: command not found

$ alias fs='df -kF xfs | tail -n +2'

$ fs
/dev/mapper/rl-root  17811456 1681220  16130236  10% /
/dev/sda1             1038336  248940    789396  24% /boot

# 별칭 내용 확인 및 제거
$ alias fs
alias fs='df -kF xfs | tail -n +2'

$ unalias fs

$ alias fs
-bash: alias: fs: not found


06) 함수



a) 함수 선언 형식

함수이름() {

  명령1;

  명령2;

  ...;  }


b) 함수 사용 예제

# 예제 01
$ cat test.sh
#!/bin/bash

hello() {
echo "Hello, $USERNAME
Date & Time : `date`";
}

echo "-----------------"
pwd
echo "-----------------"
hello

$ bash test.sh
-----------------
/root
-----------------
Hello, root
Date & Time : Wed May  3 04:20:34 PM KST 2023


# 예제 02
$ cat test.sh
#!/bin/bash

arguments(){
echo "script filename is $0
first argument is $1
second argument is $2";
}

arguments 1 2

$ bash test.sh
script filename is test.sh
first argument is 1
second argument is 2


# 예제 03
$ cat test.sh
#!/bin/bash

getinfo(){
echo -n "user account name: ";read ACCNAME
echo -n "default shell: ";read SHELLPATH
echo -n "user account comment: ";read SHELLCOMMENT
}

createuser(){
useradd -s $1 -c $2 $3
}

getinfo
createuser $SHELLPATH $SHELLCOMMENT $ACCNAME

if [ $? -eq 0 ]; then
        echo;echo "$ACCNAME user account created complete."
        grep $ACCNAME /etc/passwd
fi

$ bash test.sh
user account name: test02
default shell: /bin/bash
user account comment: testuser

test02 user account created complete.
test02:x:1001:1001:testuser:/home/test02:/bin/bash

BASH 카테고리 내 다른 글 보러가기

댓글 남기기