Live hot, Think cool

일 하다보니까 쉘 스크립트를 많이 사용하게된다.


그래서 내 블로그에 좀 정리해놓고 필요할때마다 찾아보면 좋을것 같아서 나에게 필요한 실무적인 내용을 정리해본다.


vi *.sh (* 에는 필요한 아무 이름을 입력)


을 입력하고 파일을 만든다.


vi test.sh 라고 파일을 만들었다고치자.


그 다음에는 chmod +x test.sh 또는 chmod 755 test.sh 를 쳐서


test.sh 파일을 실행가능한 파일로 바꾼다.


예약변수를 알아두면 좋다.


서버를 운영하다보면 여러 업체나 개발자들이 PATH를 설정하고 참조하는데


나중에 확인해봐야하는 경우가 생긴다.


예약 변수(Reserved Variable)

HOME사용자의 홈 디렉토리
PATH실행 파일을 찾을 경로
LANG프로그램 사용시 기본 지원되는 언어
PWD사용자의 현재 작업중인 디렉토리
FUNCNAME현재 함수 이름
SECONDS스크립트가 실행된 초 단위 시간
SHLVL쉘 레벨(중첩된 깊이를 나타냄)
SHELL로그인해서 사용하는 쉘
PPID부모 프로세스의 PID
BASHBASH 실행 파일 경로
BASH_ENV스크립트 실행시 BASH 시작 파일을 읽을 위치 변수
BASH_VERSION설치된 BASH 버전
BASH_VERSINFOBASH_VERSINFO[0]~BASH_VERSINFO[5]배열로 상세정보 제공
MAIL메일 보관 경로
MAILCHECK메일 확인 시간
OSTYPE운영체제 종류
TERM로긴 터미널 타입
HOSTNAME호스트 이름
HOSTTYPE시스템 하드웨어 종류
MACHTYPE머신 종류(HOSTTYPE과 같은 정보지만 조금더 상세하게 표시됨)
LOGNAME로그인 이름
UID사용자 UID
EUIDsu 명령에서 사용하는 사용자의 유효 아이디 값(UIDEUID 값은 다를 수 있음)
USER사용자의 이름
USERNAME사용자 이름
GROUPS사용자 그룹(/etc/passwd 값을 출력)
HISTFILEhistory 파일 경로
HISTFILESIZEhistory 파일 크기
HISTSIZEhistory 저장되는 개수
HISTCONTROL중복되는 명령에 대한 기록 유무
DISPLAYX 디스플레이 이름
IFS입력 필드 구분자(기본값:   - 빈칸)
VISUALVISUAL 편집기 이름
EDITOR기본 편집기 이름
COLUMNS현재 터미널이나 윈도우 터미널의 컬럼 수
LINES터미널의 라인 수
LS_COLORSls 명령의 색상 관련 옵션
PS1기본 프롬프트 변수(기본값: bash\$)
PS2보조 프롬프트 변수(기본값: >), 명령을 "\"를 사용하여 명령 행을 연장시 사용됨
PS3쉘 스크립트에서 select 사용시 프롬프트 변수(기본값: #?)
PS4쉘 스크립트 디버깅 모드의 프롬프트 변수(기본값: +)
TMOUT0이면 제한이 없으며 time시간 지정시 지정한 시간 이후 로그아웃


위치 매개 변수(Positional Parameters)

$0실행된 스크립트 이름
$1$1 $2 $3...${10}인자 순서대로 번호가 부여된다. 10번째부터는 "{}"감싸줘야 함
$*전체 인자 값
$@전체 인자 값($* 동일하지만 쌍따옴표로 변수를 감싸면 다른 결과 나옴)
$#매개 변수의 총 개수

특수 매개 변수(Special Parameters)

$$현재 스크립트의 PID
$?최근에 실행된 명령어, 함수, 스크립트 자식의 종료 상태
$!최근에 실행한 백그라운드(비동기) 명령의 PID
$-현재 옵션 플래그
$_지난 명령의 마지막 인자로 설정된 특수 변수


논리 연산자(Logical Operators)

문자설명
&&, -a논리 AND
||, -o논리 OR

산술 연산자(Arithmetic Operators)

문자설명
+더하기
-빼기
*곱하기
/나누기
++누승(exponentiation)
%modulo 나 mod (정수 나누기에서 나머지 값)
+=상수값 만큼 증가(plus-equal)
-=상수값 만큼 감소(minus-equal)
*=상수값을 곱함(times-equal)
/=상수값으로 나눔(slash-equal)
%=상수값으로 나눈 나머지 값(mod-equal)

비트 연산자(Bitwise Operators)

문자설명
<<비트 왼쪽 쉬프트(쉬프트 한 번당 2를 곱하는 것과 동일함)
<<=left-shift-equal
>>비트 오른쪽 쉬프트(쉬프트 한 번당 2로 나눔)
>>=right-shift-equal(<<=와 반대)
&비트 and
&=비트 and-equal
|비트 OR
|=비트 OR-equa
~비트 negate
!비트 NOT
^비트 XOR
^=비트 XOR-equa

기타 연산자(Miscellaneous Operators)

문자설명
,콤마 연산자(comma operator), 2개 이상의 산술 연산을 묶어줌

정수 비교(Integer Comparison)

문자설명
-eq같음
-ne같지 않음
>, -gt더 큼(> 이중 소괄호에서 사용 가능)
>=, -ge더크거나 같음(>= 이중 소괄호에서 사용 가능)
<, -lt더 작음(< 이중 소괄호에서 사용 가능)
<=, -le더 작거나 같음(<= 이중 소괄호에서 사용 가능)

문자열 비교(String Comparison)

문자설명
=, ==같음
!=같지 않음
<ASCII 알파벳 순서에 더 작음
>ASCII 알파벳 순서에서 더 큼
-z문자열이 NULL, 길이가 0인 경우
-n문자열이 NULL이 아님
${변수}문자열이 NULL이 아님



bash shell 이란

공부방2017. 1. 30. 20:16
"Hashbang" redirects here. For hashbangs in URLs, see Fragment identifier § Proposals.

In computing, a shebang is the character sequence consisting of the characters number sign and exclamation mark (#!) at the beginning of a script. It is also called sha-bang,[1][2] hashbang,[3][4] pound-bang,[5] or hash-pling.[6]

Under Unix-like operating systems, when a script with a shebang is run as a program, the program loader parses the rest of the script's initial line as an interpreter directive; the specified interpreter program is run instead, passing to it as an argument the path that was initially used when attempting to run the script.[7] For example, if a script is named with the path path/to/script, and it starts with the following line:


#!/bin/sh


then the program loader is instructed to run the program /bin/sh instead, passing path/to/script as the first argument.


#!를 shebang(샤방) 라인이라고 부른다.


*.sh 스크립트에 처음


#!/bin/bash

#!/usr/bin/env bash 등으로 사용하는데


이렇게 쓰면 /bin/sh를 로드하지 않고 대신 #!에 지정한 쉘을 interpreter directive(인터프리터 지시자)로 구분한다.

(https://en.wikipedia.org/wiki/Shebang_(Unix) - 발취)

========================================


bashBourne Again Shell 의 약자입니다. 가장 현대적이고 강력한* 셀입니다. Steven Bourne 이라는 사람이 만든 Bourne Shell (약칭: sh) 을, 개량한 것이 bash 이에요

* Korn shell 이라는 강력한 셀도 있지만, bash 와 달리 100% 무료는 아닙니다.


발표된 순으로 셀의 종류를 나열하자면 다음과 같습니다:

Bourne shell (sh) - 1979년에 발표

C shell (csh)

Korn shell (ksh)

Bourne Again shell (bash) - 1988에 처음 발표


(http://mwultong.blogspot.com/2006/07/shell-bash-shell.html - 발최)

========================================


리눅스에서 쓸 수 있는 모든 쉘들처럼, BASH(Bourne Again Shell)은 뛰어난 명령 라인 쉘이면서, 그 자체로도 하나의 스크립팅 언어이다. 당신은 쉘 스크립팅을 이용해서 쉘이 가진 능력을 충분히 활용할 수 있으며, 쉘 스크립팅이 아니었으면  수많은 명령을 필요로 했을 많은 일들을 자동적으로 처리할 수도 있다. 당신의 리눅스 박스에 놓여 있는 많은 프로그램들은 쉘 스크립트들이다. 만일 쉘 스크립트가 어떻게 작동하는지 배우고 싶거나 당신이 가지고 있는 쉘 스크립트를 수정하고 싶다면, bash 문법을 이해하는 것은 필수적이다. 게다가, bash 언어를 이해하면 정확히 당신이 원하는 방식으로 일을 하는 당신 자신의 프로그램을 작성할 수 있다. 


(http://coffeenix.net/doc/shell/introbashscript.htm - 발최)

========================================


Shell의 종류

bash ( Bourne-Again Shell )

프롬프트 : #

실행파일은 /bin/bash

Bourne again shell은 최초로 개발된 쉘인 Bourne shell의 변종이라 할 수 있습니다.
리눅스에서 가장 많이 사용되는 IEEE POSIX 호환이며 Borune shell과 호환되는 쉘로서 
GNU 프로젝트에 의해 만들어지고 배포되고 있습니다. 명령행 편집 기능을 제공합니다

 

sh ( Bourne Shell )

프롬프트 : $

본 쉘 보다는 개발된 C쉘이나 콘 쉘과 기능적인 면을 비교해 보면 본 쉘에 미흡한 점이 있다. 그 중 가장 큰 단점은 상호 대화형(Interactive)

방식을 취하고 있지 않다는 점이다. 이러한 상호 대화형 방식을 사용하고자 한다면 쉘을 바꿔서 작업하는 것이 좋을 것이다.

- Steven Bourne의 Bourne Shell, sh

- 쉘 명령 대본을 작성하는데 이용되는 쉘

- 강력한 명령 프로그래밍 언어 기능을 갖는 쉘

- 가장 오래 동안 모든 유닉스 시스템의 표준 구성 요소

 

csh ( C 프로그램 스타일의 Shell )

프롬프트 : %

버클리 캘리포니아 대학에서 개발된 프로그래머들에게 적합한 shell입니다. ( csh는 C쉘이며 sh는 본 쉘이다 )
대화형 사용법에서는 Bourne shell과 대부분 호환되지만 전혀 다른 프로그래밍 인터페이스를 가지고 있고, 히스토리 대체라는 복잡한

기능으로 대신하고 있지만 명령행 편집 기능은 제공하지 않습니다.

- Bill Joy의 C Shell, csh

- C언어와 유사한 언어를 사용

- 상호 대화형 방식으로 구성 

 

ksh ( Korn Shell )

프롬프트 : $

일반적으로 유닉스에서 가장 많이 사용되고 있는 shell이며 Bourne shell에 처음으로 현대적
인 shell 기능(C shell로부터 차용한 것이다.)을 도입한 shell 입니다. Bourne shell과 호환
되고, 명령행 편집 기능을 제공합니다.

 

zsh

프롬프트 : %

Korn Shell과 매우 유사한 셸이지만 Korn Shell보다 더 많고 유용한 기능 등을 추가하여 개선시킨 것이다.

 

tc Shell

프롬프트 : >

코넬 대학에서 C Shell 수정본에 Korn Shell의 기능을 포함하여 개발된 셸이다. 95%의 C Shell과 5%의 새로운 기능이 추가되어 만들어졌다.


(http://unabated.tistory.com/entry/LinuxUnix%EC%89%98-Shell-%EC%9D%98-%EC%A0%95%EC%9D%98%EC%99%80-%EC%A2%85%EB%A5%98 - 발최)