2018년 2월 2일 금요일

Bash 개념 및 문법(1)

 [Bash란?]
본 어게인 셸은 유닉스에서 사용하는 커맨스 셀의 일종으로 줄여서 bash라 부른다. bash는 다양한 리눅스 시스템, 맥 OS의 기본 셸이며 수많은 유닉스 계열 운영체제에서 동작한다.

[설정 파일]
~/.bashrc (bash run control) : bash를 사용할 때, bash가 참고할 사항을 정의해 놓는 파일
/etc/bashrc : 전체용 환경 설정

[기본 문법]
> : 출력 리다이렉션. 명령 실행의 표준 출력(stdout)을 파일로 저장
$ echo "hello" > ./hello.txt

< : 입력 리다이렉션. 명령 실행의 표준 입력(stdin)을 파일로 저장
$ cat < ./hello.txt

>> : 명령 실행의 표준 출력(stdout)을 파일에 추가함
$ echo "world" >> ./hello.txt

2> : 명령 실행의 표준 에러(stderr)를 파일로 저장
2>> : 명령 실행의 표준 에러(stderr)를 파일에 추가
&> : 표준 출력과 표준 에러를 모두 파일로 저장

1>&2 : 표준 출력을 표준 에러로 보냄
$ hello = $(echo 'Hello World" 1>&2) # 표준 출력으로 출력했지만 표준 에러로 보냄
$ echo $hello  # 미출력

2>&1 : 표준 에러를 표준 출력으로 보냄
$ abcd > /dev/null 2>&1

| : 파이프, 명령 실행의 표준 출력을 다른 명령의 표준 입력으로 보냄
$ ls -al | grep .txt

$ : Bash의 변수
$ hello="Hello World"
$ echo $hello

$() : 명령 실행 결과를 변수화함 (`` 와 같음)
$ sudo docker rm (docker ps -aq)
$ echo $(date)

&& : 한 줄에서 명령을 여러개 실행합니다. (단 앞에 명령어가 오류가 없어야함)
$ make && make install

; : 한 줄에서 명령을 여러개 실행 (앞에 명령어 오류가 있어도 실행함)
$ false; echo "Hello"

' ' : 문자열 처리 (안에 변수 처리안함)

" " : 문자열 처리 (안에 변수, 명령 처리함)

" ' ' " : 명령 안에서 다시 명령을 실행하고, 매개변수 지정할 때 사용
$ bash -c "/bin/echo Hello 'World'"

\" , \$hello : ' ' 안에서 "를 사용하거나 특수문자를 사용할 때 붙임

${} : 변수 치환, " " 문자열 안에서 변수를 출력할 때 사용

\ : 한 줄로된 명령을 여러 줄로 표현할 때 사용
$ sudo docker run \
-d \
--name hello \
busybox:latest

{1..10} : 연속된 숫자를 표현

{문자열,문자열} : {}안에 문자열을 여러 개 지정하여 명령 실행 횟수를 줄임
$cp ./ {hello.txt,world.txt} hello-dir/