NUL
, /
두 문자를 제외하고 전부 허용 한다.
[
{
[10
{echo
if{
{AA=10}
.
:
전부 명령이름이 될 수 있다.
wk
에 command
가 먹히지 않는다.wk=cd
만 적용된다. 뒤, $HOME/workspace
는 따로 명령이 실행된다.wk=" cmd "
형식으로 quotes를 달아서 온전하게 명령이 들어간다.wk
의 내용: cd $HOME/workspace
command arg1 arg2 arg3 ...
$0 $1 $2 $3 ...
Argument | Description |
---|---|
$0 | 실행된 스크립트 이름 |
$1 | 첫 번째 Argument$1 $2 $3...$9 ${10}... 10번째 부터는 { } 로 감싸줄 것 |
$* | 전체 인자 값. |
$@ | 전체 인자 값. 위 $* 와의 차이는 아래에서 설명 |
$# | Argument의 총 갯수 |
$*
, $@
차이$*
는 ""
상관 없이 공백
기준으로 문자열을 파라미터로 인식한다.for
문에는 "$@"
쓰자.$$, $BASHPID, $PPID, $?, $!, $-, $_
Variable | description |
---|---|
$$ | 현재 실행 중인 쉘의 PID |
$BASHPID | 현재 실행 중인 Bash의 PID |
$PPID | 부모 PID |
$? | 최근 실행된 명령어 종료 상태 |
$! | 최근에 실행한 백그라운드 명령의 PID |
$- | 현재 옵션 플래그 |
$_ | 이전 명령에서 사용된 마지막 인수를 값으로 가진다. 사용된 인수가 없다면, 명령 이름이 된다. | (pipe)로 연결된 명령들은 subshell에서 실행되므로 제외된다. |
$$, $BASHPID, $PPID
예$_
예|
: pipe로 연결된 명령들은 subshell에서 실행되므로 제외된다.(( ))
: 산술 표현식(Arithmetic Expression)+,-,*,/
등 계산에 사용되는 수학 연산(( a=1+4 ))
if (( a < b))
let
let
은 수식 연산을 수행하며 최종 연산 결과 == 0, return 1$ let var=10
$ let var=var+5
$ echo $var
15
$ let "var = var + 5"
$ echo $var
20
let var=10
(( var = var + 5 ))
++, --
-,+
! ~
: 논리 반전, 비트 반전* / %
<< >>
: 왼쪽 shift, 오른쪽 shift<= >= < > == !=
& ^ |
: 비트 연산&& ||
: 논리연산expr ? expr : expr
삼항연산= *= /= %= += -= <<= >>= &= ^= !=
{ }
: 인라인 그룹{ cmd1; cmd2; }
는 마치 하나의 명령${ }
는 매개변수 확장에 사용된다. { }
과 구분할 것( )
를 사용한 서브 쉘은 외부에 영향 X, exit는 서브쉘만 종료{ }
를 사용한 인라인 그룹은 외부에 영향 줌, exit를 쓰면 현재 쉘 종료됨{ }
간단 사용 예[ ]
: test[
는 테스트용if [ $? -eq 0 ]
(
는 서브쉘로 공백 상관 X# 변수 AA가 명령이 되고 = 10 는 각각 인수로 인식
$ AA = 10
AA: command not found
$ AA=10
$ BB="Hello World!"
$ echo $AA
10
$ echo $BB
Hello World!
0
만 정상 종료(참)!
: 부정(NEGATE), 테스트, 종료상태 무효, 되돌리기if [ ! -f ${F_PATH} ]; then
echo "hello world!"
fi
exit
return
shell function 에서 return
명령은 프로그래밍 언어와 달리 연산 결과를 반환하는데 사용되지 않는다.
return 명령을 사용해 함.수.에.서!!! 종료 상태값을 지정한다.(exit
와 헷갈리지 말기)
func() { expr $1 + $2 ; return 5 ; }
$
를 이용한 확장${ }
: parameter expansion기본적으로 "${VAR}"
는 쉘 변수에서 딱 여기까지 변수임을 나타낸다.
$AA
, ${AA}
, ${AA:-5}
, ${AA%.*}
...
확장 | Description |
---|---|
${변수-문자열} | 변수가 설정되지 않은 경우 문자열로 변수를 치환 |
${변수:-문자열} | 변수가 설정되지 않았거나 Null로 설정된 경우 문자열로 변수 치환 |
${변수=문자열} | 변수가 설정되지 않은 경우 문자열을 변수에 저장하고 변수 치환 |
${변수:=문자열} | 변수가 설정되지 않았거나 Null로 설정된 경우 문자열을 변수에 저장하고 변수 치환 |
${변수+문자열} | 변수가 설정된 경우 문자열로 변수 치환 |
${변수:+문자열} | 변수가 설정되고, Null 이외의 값으로 설정된 경우 문자열로 변수 치환 |
${변수?에러메세지} | 변수가 설정된 경우 변수의 값을 사용하며, 설정되지 않은 경우 표준 오류 출력으로 에러 메시지를 출력 |
${변수:?에러메세지} | 변수가 Null |
${VAR-STR}
$ HI="hello"
$ echo "${HI-world}"
hello
$ unset HI
$ echo "${HI-world}"
world
$ HI=""
$ echo "${HI-world}"
$
${VAR:-STR}
$ OS="fedora"
$ echo "${OS:-ubuntu}"
fedora
$ OS=""
$ echo "${OS:-ubuntu}"
ubuntu
${VAR+STR}
$ OS="ubuntu"
$ echo "${OS+redhat}"
redhat
$ unset OS
$ OS=""
$ echo "${OS+redhat}"
redhat
${VAR:+STR}
$ OS="ubuntu"
$ echo "${OS:+redhat}"
redhat
$ OS=""
$ echo "${OS:+redhat}"
$
$(( ))
: arithmetic expansion$(( 1 + 2 ))
...$( )
: command substitution, ` ` 와 비슷RESULT=$( 명령 )
을 하면, 명령의 결과로 나오는 STDOUT을 담을 수 있다.RETURN=$(${SSH_CMD} "du -sh ${HOST_WORKSPACE}/*/*/sstate-cache")
RETURN="`${SSH_CMD} \"du -sh ${HOST_WORKSPACE}/*/*/sstate-cache\"`"