본문 바로가기

Linux/Shell

[Linux] bash Shell 명령어

  • 사용 가능한 shell list 확인하기

$ cat /etc/shells

 

  • 현재 작업 shell 확인

$ echo $SHELL

 

  • 로그인 shell 변경

$ cat /etc/passwd

$ chsh

Password:

Changing the login shell for byunghun
Enter the new value, or press ENTER for the default
        Login Shell [/bin/bash]: 바꿀 shell 넣기 ex) /bin/sh

 

  • Shell의 변수

데이터를 넣는 그릇

선언할 필요없이 사용가능

변수명 : 문자, 숫자, _(언더바)로 구성될 수 있지만, 시작은 반드시 문자나 _로 시작

  • 변수 선언 : varname=value

$ fname=byung(ex)

$ lname=hyun

$ score=94

 

  • 변수 확인 : echo, set

$ echo $fname or lname or score

출력 : byung or hyun or 94

 

$set (상당히 많은 변수들이 나오므로 grep명령어와 함께 사용 / 변수만 보여줘)

$set | grep 찾을 내용

 

  • 변수 제거 : unset varname

$ unset fname

 

  • Shell 환경변수

동작 되는 프로그램에게 영향을 주는 변수

  • 환경 변수 선언 : export varName=value

$ export NAME=hyun

$ echo $NAME

 

  • 시스템에 적용된 환경 변수 확인 : env

$ env ( grep /환경 변수만 보여줘

 

  • 기억해야할 환경변수

PATH : 명령어 탐색 경로

HOME : 홈디렉토리의 경로. cd 명령 실행시 적용

USER : 로그인 사용자 이름

SHELL : 로그인 shell의 이름

 

  • Metacharacters

Shell에서 의미를 정해놓은 문자들

\ ? () $ .. * % {} [] 등

Quoting Rul : 메타문자의 의미를 제거하고 단순 문자로 변경

- Backslash(\) : \바로 뒤의 메타 문자는 특별한 의미를 제거

- Double Quotes("") : ""내의 모든 메타문자의 의미를 제거, 단 $, ``은 제외

- Single Quotes('') : ''내의 모든 메타문자의 의미를 제거

 

Command 치환

명령어의 실행 결과를 치환하여 명령을 실행

 

Nesting Cmd

- $(Cmd)

- `Cmd`

 

ex)
$ echo "Today is $(data)"
$ echo "Today is `data`"

 

- alias : Shell의 명령에 새로운 이름을 부여 / 명령들을 조합하여 새로운 이름의 명령을 생성

관리 명령

alias 등록 : alias name='cmd'

alias 확인 : alias or alias name

alias 삭제 : unalias name

* vi .bashrc에 들어가서 alias명령어 저장할 수 있음

 

Shell의 Prompt란?

PS1 변수를 이용해 shell의 기본 프롬프트 모양을 설정

Bash shell에서만 Prompt 모양에 적용 가능한 특수 문자가 존재

\h : 호스트이름

\u : 사용자이름

\w : 작업 디렉토리 -절대경로

\W : 작업 디렉토리 - 상대경로

\d : 오늘 날짜

\t : 현재 시간

\$ : $또는 #프롬프트 모양

 

Communication Channels

 

- Redirection

STDIN    0< 0<< 입력을 키보드가 아닌 파일을 통해 받음

STOUT   1> 1>> 표준 출력을 터미널이 아닌 파일로 출력

STDERR  2> 2>> 표준 에러 출력을 터미널이 아닌 파일로 출력

ex)
$ mailx -s "제목" 보낼유저의 메일주소 0< ***.txt
ex)
$ data 1> data.out # 기존에 data.out 파일이 없으므로 파일을 생성하고 내용을 저장함
$ data >> data.out # 기존 내용에 overwrite함

 

- Pipeline

명령의 실행결과를 다음 명령의 입력으로 전달

리눅스의 명령어를 조합하여 사용

기호 : command1 | command2 | command3

  • Shell Script

Linux cmd들을 모아 놓은 ASCII text파일

실행 퍼미션을 할당해야 실행 가능

#!/bin/bash 셔뱅.해시뱅. 스크립트를 실행할 sub shell이름

Shell 구문은 기본 top-down 방식으로 해석해서 실행됨

Sub Shell

$ ls /bin/bash
$ pwd // /home/user
$ /bin/bash
////////////////
$ cd /
$ pwd
$ exit
////////////////
$ pwd // /home/user
쉘 안에서 cd를 해도, 나오면 기존의 주소에 머물러 있음

 

  • 위치 매개변수 (Positional Parameters)

입력하는 Argument들은 $0, $1, $2와 같은 변수에 저장되어 script에 전달

name of shell script : $0

first argument : $1

second argument : $2

Number of arguments in $#

List of all parameters in $@, $*

- Special shell variables

로그인 shell의 PID : $$

현재 작업 디렉토리 : $PWD

부모 프로세스 ID : $PPID