
NUL, / 두 문자를 제외하고 전부 허용 한다.
[{[10{echoif{{AA=10}.:전부 명령이름이 될 수 있다.
위와 같이 띄어 쓰기로 인해 wk에 command가 먹히지 않는다.
wk=cd만 적용된다. 뒤, $HOME/workspace는 따로 명령이 실행된다.
wk=" cmd " 형식으로 quotes를 달아서 온전하게 명령이 들어간다.wk의 내용: cd $HOME/workspacecommand 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))letlet은 수식 연산을 수행하며 최종 연산 결과 == 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
exitreturnshell 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\"`"
