728x90

https://wiki.kldp.org/HOWTO/html/Adv-Bash-Scr-HOWTO/internalvariables.html

 

$BASH

ㄴBash 실행 파일의 경로로, 보통은 /bin/bash임

 

$IFS

입력 필드 구분자

디폴트는 공백문자(빈칸, 탭, 뉴라인)지만 콤마로 구분된 데이타 파일을 파싱하려는 경우처럼 변경이 가능합니다. $* $IFS의 첫번째 문자를 사용하는 것에 주의하세요. 예 6-1 참고.

"$*" 쿼우팅해서 쓸시 : [ 한 낱말의 형태로 ]

$* 쿼우팅 안하고 그냥 쓸시에 : [ 뛰어쓰기를 구분자로하여 위치 매개변수 적용 ]

"$@" 쿼우팅해서 쓸시 : [ 쿼우팅을 기준으로 위치매개변수 채택 ]

$@ 쿼우팅 안하고 그냥 쓸시에 : [ 뛰어쓰기를 구분자로 하여 위치 매개변수 적용 ]

 

위치 매개변수(Positional Parameters)$0, $1, $2, etc.

위치 매개변수로서, 명령어줄에서 스크립트로 넘겨지거나 함수로 넘겨지거나 set 명령어로 강제로 설정됨(예 5-5  예 11-10 참고).

$#

명령어줄 인자 [2] 의 갯수나 위치 매개변수들(예 34-2 참고)

$*

한 낱말로 표시되는 위치 매개변수들 모두

$@

$*과 똑같지만 각 매개변수는 쿼우트된 문자열로 취급됩니다. 즉, 해석되거나 확장없이 있는 그대로 넘겨집니다. 그 결과로 각 인자는 각각이 서로 다른 낱말로 구분돼서 표시됩니다.

 

 

IFS를 빈값으로 유지하고 스크립트 파일을 구동하면 원하는대로 구분자가 적용되지않아

위치매개변수의 값이 제대로 나오지 않으니 주의

 

다른 특수 매개변수 

 

[ 문자열 조작 ]

 

문자열 길이

stringZ=ABCDE

 

echo ${#stringZ}

echo `expr length $stringZ`

echo `expr "$stringZ" : '.*'`

 

문자열 시작에서부터 매칭되는 문자열조각(substring)의 길이

 

방식 1)

expr match "$string" '$substring'

ㄴ $substring은 정규표현식입니다.

 

방식 2)

expr "$string" : '$substring'

ㄴ $substring은 정규표현식입니다.

인덱스

 

방식 1)

expr index $stirng $substring
ㄴ $string에서 일치하는 $substring의 첫 문자의 위치

 

문자열조각 추출(Substring Extraction)

 

방식 1)

${string:position}

ㄴ $string의 $position부터의 문자열 조각을 추출.

ㄴ string의 매개변수가 "*"이거나 "@"라면 position에서 시작하는 위치 매개변수를 추출해냅니다.

 

방식 2)

${string:position:length}

ㄴ $string의 $position부터 $length만큼의 문자를 추출해 냅니다.

 

 

expr substr $string $position $length

ㄴ $stirng의 $position부터 $length만큼 문자를 추출해 냅니다.

expr match "$string" '\($substring\)'

ㄴ $string의 처음에서부터 정규표현식인 $substring을 추출해냅니다.

 

expr "$string" : '\($substring\)'

ㄴ $string의 처음에서부터 정규 표현식인 $substring을 추출해냅니다.

 


문자열조각 삭제(Substring Removal)

 

${string#substring}

ㄴ $string의 앞부분에서부터 가장 짧게 일치하는 $substring을 삭제.

 

${string##substring}

ㄴ $string의 앞부분에서부터 가장 길게 일치하는 $substring을 삭제.

 

${string%substring}

ㄴ$string 뒷 부분에서부터 가장 짧게 일치하는 $substring을 삭제.

${string%%substring}

ㄴ$string 뒷 부분에서부터 가장 길게 일치하는 $substring을 삭제.

 

문자열 조각 대치(Substring Replacement)

${string/substring/replacement}

처음 일치하는 $substring $replacement로 대치.

 

${string//substring/replacement}

일치하는 모든 $substring $replacement로 대치..

${string/#substring/replacement}

$substring $string 맨 앞에서 일치하면 $replacement로 대치.

 

${string/%substring/replacement}

$substring $string 맨 뒤에서 일치하면 $replacement로 대치.

 

728x90

'쉘스크립트' 카테고리의 다른 글

11.~ / 내부명령어  (0) 2022.03.04
10~ / 루프  (0) 2022.03.03
8~/ 9~/ 연산자, 변수 재검토  (0) 2022.03.03
7~ 테스트  (0) 2022.03.03
6~ / #쿼우팅  (0) 2022.03.02
728x90

산술연산자 쓰는 여러가지방법

 

1. let "n = $n +1"

2. let "n= n + 1"

3. : $((n = $n + 1))

4. : $[ n = $n + 1 ]

 

":" 가 없을시 Bash가 3번 4번 연산자를 명령어로 해석하려고하기때문에 : 가 필요하다.

 

echo -n "$n "

 

n=$[ $n + 1]

비트 연산자(bitwise operators). 비트 연산자는 쉘 스크립트에서 자주 쓰이지 않습니다. 이런 연산자들은 주로 포트나 소켓에서 값을 읽고 테스트하고 조작하는데 쓰입니다. "비트 조작(bit flipping)"은 C나 C++ 처럼 실행중에 비트연산을 할 수 있을 정도로 충분히 속도가 빠른 컴파일 언어가 더 알맞습니다.

비트 연산자

<<

비트 왼쪽 쉬프트(쉬프트 한 번당 2를 곱하는 것과 동일함)

<<=

"left-shift-equal"

let "var <<= 2"  var를 2 비트만큼 왼쪽으로 쉬프트(4 를 곱하는 것과 동일함)

>>

비트 오른쪽 쉬프트(쉬프트 한 번당 2로 나눔)

>>=

"right-shift-equal"(<<=와 반대)

&

비트 and

&=

"비트 and-equal"

|

비트 OR

|=

"비트 OR-equal"

~

비트 negate

 

!

비트 NOT

^

비트 XOR

^=

"비트 XOR-equal"

 

, 콤마 연산자(comma operator)

 

콤마 연산자는 두개 이상의 산술 연산을 묶어 줍니다. 이 연산자로 묶인 모든 연산은 부효과(side effects)가 생길 가능성을 가지고 평가되고 제일 마지막 연산의 결과만 리턴됩니다.

 

숫자 상수(Numerical Constants)

 

쉘 스크립트는 특별한 접두사나 표기법이 없다면 숫자를 10진수로 해석합니다.

 

만약에 숫자 앞에 0이 있다면 8진수(8진법)이고, 0x가 있따면 16진수(16진법)입니다.

 

#이 들어간 숫자는 진법#숫자로 계산됩니다.

 

 

변수를 조작하거나 확장시키기

 

${parameter}

ㄴ 변수인 parameter의 값이란 뜻으로써, $parameter라고 한 것과 같습니다.

 

${parameter_default}

ㄴ 매개변수가 세트되지 않았다면 default 사용

${parameter=default}, ${parameter:=default}

ㄴ 매개변수가 세트 되어 있지 않다면 기본값으로 세트.

두 형태는 거의 비슷하지만 :이 있을때는 위의 경우처럼 $parameter가 선언만 되고 값이 널일 경우에도 기본값으로 세트 시킨다는 차이점이 있습니다.

 

${parameter+alt_value}, ${parameter:+alt_value}

매개변수가 세트되어 있다면 alt_value를 쓰고 아니라면 널 스트링을 씁니다.

이 두 형태는 거의 비슷하지만 parameter가 선언되고 널일 경우에 :이 있고 없고의 차이가 나타납니다. 아래를 보세요.

변수 길이/문자열조각(substring) 삭제${#var}

문자열 길이 ($var의 문자 갯수). 배열의 경우에, ${#array}라고 하면 배열의 첫번째 요소의 길이를 알려줍니다.

참고: 예외:

  • ${#*}  ${#@}  위치 매개변수의 갯수를 알려줍니다.
  • 배열에 대해 ${#array[*]}  ${#array[@]} 라고 하면 배열 요소의 갯수를 알려줍니다.

${var#pattern}, ${var##pattern}

$pattern이 $var의 앞 부분과 가장 길거나 가장 짧게 일치하는 부분을 삭제.

${var%pattern}, ${var%%pattern}

$pattern이 $var의 뒷 부분과 가장 짧거나 가장 길게 일치하는 부분을 삭제.

변수 타입 지정: declare  typeset

declare typeset 내장 명령(이 둘은 동의어입니다.) 키워드는 변수의 특성을 제한할 수 있습니다. 이것은 몇몇 프로그래밍 언어에서 볼 수 있는 불완전한 형태의 타입 지정입니다. declare 명령어는 bash 버전 2 이후부터 가능합니다. typeset 명령어는 ksh 스크립트에서도 가능합니다.

 

declare/typeset 옵션

 

-r 읽기 전용

 

(declare -r var1 는 readonly var1 과 똑같이 동작합니다.)

 

C에서 cost 형한정어(qualifier)와 거의 비슷하고, 이런 변수의 값을 바꾸력 하면 에러 메세지가 납니다.

 

-i 정수

-a 배열

 

-f 함수

-x export

var=$value

 

변수 간접 참조

 

어떤 변수값이 다음에 나올 변수의 이름이라고 가정해봅시다. 그렇다면 그 어떤 변수로 다음 나올 변수의 값을 알아낼 수 있을까요? 이는 우리 생각처럼 제대로 동작을 하고 이를 간접 참조라고 부릅니다.

간접참조 a=\$$a

 

이중 소괄호 (The Double Parentheses Construct)

 

728x90

'쉘스크립트' 카테고리의 다른 글

10~ / 루프  (0) 2022.03.03
9~ / 변수 재검토  (0) 2022.03.03
7~ 테스트  (0) 2022.03.03
6~ / #쿼우팅  (0) 2022.03.02
5. / # 변수와 매개변수 소개  (0) 2022.03.02
728x90

[

ㄴ 테스트 전용 명령어 (해당 연산의 결과에 따른 종료 상태 (참은 0 , 거짓은 1)을 리턴합니다.

 

Bash 는 [[ $a -lt $b ]] 를 종료 상태를 리턴하는 하나의 요소로 이해합니다.

 

if는 대괄호로 조건을 묶찌 않고도 아무 명령어나 테스트 할 수 있습니다.

cmp

ㄴ compare의 약어로써 두개의 파일이 어떤 부분이 다른가를 비교할때에 사용하는 명령어이다. 

두개의 파일이 단순히 강튼가 다른가를 확인할 수있으며 또한 몇행의 몇번째 문자가 다른가를 확인할 수도 있다.

 

if는 대괄호로 조건을 묶지 않고도 아무 명령어나 테스트 할 수 있습니다.

if/then 은 중첩된 비교나 테스트가 가능합니다.

 

if [ 0 ]  // if 조건문안에 0을 넣고 테스트하면 참으로 뜨는데 왜그런지는 모르겠다.

아마 쉘스크립트 에서 타입이 없다고 했는데 그래서 Boolean 형식이 지원안되는거같음

 

if [ ]  // Null은 거짓으로 뜬다.

 

if [ xyz ] // 임의의 문자열은 참

 

if [ $xyz ] // 초기화 안된 변수 + 널 변수는 거짓

 

if [ "false" ] // 그래서 얘도 참

 

if [ "$false" ] // 초기화안된 변수로 써줘야 false 가 뜸

 

'if'와 'then'을 같은 줄 에 두려면 세미콜론을 써야합니다.

 

if [ -x "$filename" ]; then

 

if test condition-true if [ condition-true ] 은 완전히 똑같은 표현입니다. 

[  test 명령어를 부르는 토큰이기 때문에 ] 가 꼭 필요하진 않지만 새 버전의 bash 에서는 그래도 있어야 됩니다.

 

[[ ]] 는 쉘 상에서 [ ]과 동일합니다. 이 명령어는 ksh88에서 따 온 확장 테스트 명령어입니다.

 

참고: [[  ]] 사이에서는 파일명 확장이나 낱말 조각남이 일어나지 않지만

매개변수 확장이나 명령어 치환은 일어납니다.

2>/dev/null : 에러메시지 숨기기

 

왜 (( 0 )) 을찍으면 1이되는지

(( 1 ))을 찍으면 $?의 상태가 0이되는지 모르겠음.. 

 

파일 테스트 연산자

 

다음 조건이 맞다면 참을 리턴-e

존재하는 파일

-f

보통 파일(디렉토리나 디바이스 파일이 아님)

-s

파일 크기가 0 이 아님

 

-d

파일이 디렉토리

 

-b

파일이 블럭 디바이스(플로피나 시디롬 등등)

 

-c

파일이 문자 디바이스(키보드, 모뎀, 사운드 카드 등등)

 

-p

파일이 파이프

 

-h

파일이 심볼릭 링크

 

-L

파일이 심볼릭 링크

 

-S

파일이 소켓

-t

파일 디스크립터가 터미널 디바이스와 연관이 있음

스크립트의 표준입력([ -t 0 ])이나 표준출력([ -t 1 ])이 터미널인지 아닌지를 확인하는데 쓸 수 있습니다.

-r

테스트를 돌리는 사용자가 읽기 퍼미션을 갖고 있음

-w

테스트를 돌리는 사용자가 쓰기 퍼미션을 갖고 있음

-x

테스트를 돌리는 사용자가 실행 퍼미션을 갖고 있음

-g

파일이나 디렉토리에 set-group-id(sgid) 플래그가 세트되어 있음

디렉토리에 sgid 플래그가 세트되어 있다면 그 디렉토리에서 만들어지는 파일은 파일 생성자의 그룹이 아니라 그 디렉토리 소유자의 그룹에 속하게 됩니다. 이는 워킹그룹이 공유하는 디렉토리에서 유용하게 쓸 수 있습니다.

-u

파일에 set-user-id(suid) 플래그가 세트되어 있음

root가 소유자인 어떤 실행 파일에 set-user-id 플래그가 세트되어 있다면 일반 사용자가 그 파일을 실행시키더라도 root 권한으로 실행됩니다. [1] suid 는 시스템 하드웨어에 접근할 필요가 있는 실행 파일(pppd cdrecord 같은)에 유용합니다. suid 플래그가 없다면 이런 실행 파일들은 일반 사용자들이 실행 시킬 수 없습니다.

 

suid 플래그가 걸린 파일은 퍼미션에 s라고 나타납니다.-k

스티키 비트(sticky bit)가 세트

보통은 "스키키 비트"라고 알려져 있는 세이브-텍스트-모드(save-text-mode) 플래그는 특별한 형태의 파일 퍼미션입니다. 어떤 파일에 이 플래그가 세트되어 있다면 그 파일은 더 빠른 접근을 위해 캐쉬 메모리에 계속 남아 있습니다. [2] 만약에 디렉토리에 세트되어 있다면 쓰기 퍼미션을 제한합니다. 스티키 비트가 세트되어 있다면 파일이나 디렉토리 퍼미션에 t 가 붙어서 보입니다.

 

사용자는 자기가 소유하지는 않고 쓰기 퍼미션과 스티키 비트가 세트되어 있는 디렉토리에 오직 자신이 소유한 파일만 지울 수 있습니다. 이렇다면 /tmp처럼 공동으로 접근 가능한 디렉토리에서 여러 사용자가 실수로 다른 사용자의 파일을 지우거나 덮어 쓰는 것을 막아 줍니다.-O

자신이 소유자임

-G

그룹 아이디가 자신과 같음

-N

마지막으로 읽힌 후에 변경 됐음

f1 -nt f2

f1 파일이 f2 파일보다 최신임

f1 -ot f2

f1 파일이 f2 파일보다 예전것임

f1 -ef f2

f1 파일과 f2 파일이 같은 파일을 하드 링크하고 있음

!

"not" -- 앞에서 나왔던 테스트의 의미와 반대(조건이 안 맞으면 참).

-----

 

문자열 비교시 아스키 알파벳순서로 하는듯

 

if 에서 [ ] 안에 변수든 문자열이든 무조건 쿼우팅해주는 습관을 가지자.

 

728x90

'쉘스크립트' 카테고리의 다른 글

9~ / 변수 재검토  (0) 2022.03.03
8~/ 9~/ 연산자, 변수 재검토  (0) 2022.03.03
6~ / #쿼우팅  (0) 2022.03.02
5. / # 변수와 매개변수 소개  (0) 2022.03.02
2.1~2.2 / 3. / 4. # 기초단계 종료상태 특수문자  (0) 2022.03.02
728x90

쿼우팅(quoting)

ㄴ 문자열을 따옴표로 묶는것을 말합니다. 이렇게 하는 이유는 문자열안에 특수문자가 들어가 있을 경우,

쉘이나 쉘 스크립트에 의해 그 특수 문자가 재해석이나 확장되는것을 방지하기 위해서 입니다.

참고: 몇몇 프로그램이나 유틸리티들은 쿼우트된 문자열에 들어 있는 특수 문자를 재해석하거나 확장 시킬 수 있습니다. 이것은 쿼우팅의 중요한 사용법으로써 쉘이 명령어줄 매개변수를 해석하지 않고 프로그램이 해석해서 확장하도록 해 줍니다.

낱말 조각남(word splitting) [1] 을 피하려면 큰 따옴표를 쓰기 바랍니다. 이렇게 하면 인자에 공백문자가 들어 있어도 하나의 낱말로 인식하게 해 줍니다.

작은 따옴표(' ')도 큰 따옴표와 비슷하게 동작하지만 $의 특별한 의미를 꺼 버려서 변수 참조가 일어나지 않게 합니다. 작은 따옴표안의 '을 제외한 모든 특수 문자들은 단순히 문자 그대로 해석됩니다. 작은 따옴표("완전한 쿼우팅")를 큰 따옴표("부분 인용")보다 좀 더 엄격한 방법이라고 생각하면 됩니다.

참고: 작은 따옴표안에서는 이스케이프 문자(\)도 글자 그대로 인식되기 때문에 작은 따옴표로 묶인 문자열에 \을 써서 작은 따옴표 자체를 넣으려고 한다면 원하는 결과가 나오지 않습니다.

이스케이프(Escaping)는 하나의 문자를 쿼우팅하는 방법입니다. 어떤 문자 앞에 이스케이프 문자(\)가 오면 쉘에게 그 문자를 문자 그대로 해석하게 해 줍니다.

경고
echo sed같은 몇몇 명령어들에서는 이스케이핑이 특수 문자의 특수한 의미를 키도록 해 주는 반대의 효과를 가질 수도 있습니다.

\"

ㄴ 큰따옴표를 그냥 큰 따옴표로 해석

ex) echo "\"Hello\", he said."

 

 

\$

ㄴ 달러 표시를 그냥 달러 표시로 해석(\$ 뒤에 오는 변수는 참조되지 않습니다.)

ex) echo "\$variable01" # $variable01 이라고 찍힘

 

\\

ㄴ백슬래쉬를 그냥 백슬래쉬로 해석

 

이스케이프는 한 명령어를 여러줄에 걸쳐 쓸 수 있게도 해 줍니다. 보통은, 줄이 다르면 다른 명령어를 나타내지만 줄 끝에 이스케이프를 걸면 뉴라인 문자를 이스케이프시키기 때문에 그 다음줄이 원래 줄과 한 줄로 이어지게 됩니다.

참고: 줄이 파이프 문자인 |으로 끝난다면 굳이 이스케이프 문자(\)를 적어줄 필요가 없습니다. 하지만, 여러줄에 걸친 하나의 명령어에서 줄 끝에 항상 이스케이프 문자를 적어주는 것은 아주 좋은 프로그래밍 습관입니다.

728x90

'쉘스크립트' 카테고리의 다른 글

8~/ 9~/ 연산자, 변수 재검토  (0) 2022.03.03
7~ 테스트  (0) 2022.03.03
5. / # 변수와 매개변수 소개  (0) 2022.03.02
2.1~2.2 / 3. / 4. # 기초단계 종료상태 특수문자  (0) 2022.03.02
1-1~2 소개 , #!  (0) 2022.03.02
728x90

변수 치환 (Variable Substitution)

 

variable1이 변수이름이라면 $vairable1은 그 변수가 갖고 있는 데이타 아이템인 값을 나타냅니다.

 

변수를 선언하거나 할당할 때, unset 될 때, export 될 때에 $없이 쓰입니다.

 

변수 할당은 =을 쓰거나( ex) var1=27), read문에서 쓰이거나, 루프문의 처음에서 쓰입니다.( ex) for var2 in 1 2 3 )

 

참조되는 값을 큰따옴표(" ")로 묶어도 변수 치환이 일어나는 것을 막지 못합니다. 이를 부분적 쿼우팅(partial quoting)이나 "약한 쿼우팅(weak quoting)"이라고 합니다. 작은따옴표를 쓰게 되면 변수 이름이 그냥 문자 그대로 해석되어 아무런 일도 일어나지 않습니다. 이를 완전한 쿼우팅(full quoting)이나 "강한 쿼우팅(strong quoting)"이라고 합니다.

 

$variable ${variable}을 짧게 쓴 표현임에 주의하세요. 

$variable라고 써서 에러가 났을 경우에는 긴 형태로 써주면 해결될수도 있음

1. 초기화하지않거나 ,널값을 갖도록 세팅하거나 unset한경우

변수의 내용을 출력한다 하더라도 출력되지않습니다.

 

2. ' ' 작은 따옴표로 변수를 쿼우팅해주면 "$"가 문자 그대로 해석되기 때문에 변수 참조가 일어나지 않습니다.

 

변수 할당 (Variable Assignment)

 

=

ㄴ할당 연산자(앞 뒤에 공백이 있으면 안됨)

 

1. a=879

 

2. let a=16+5


3.

echo -n "\"a\" 를 넣으세요."

read a

 

4. 

for a in 7 8 9 11

do

done

 

 

# ---------------------------------------------------

a=23

echo $a

b=$a

echo $b

 

 

a=`echo Hello!` # echo 명령어의 결과를 'a'로 할당

echo $a

 

a=`ls -l` # 'ls -l' 명령어의 결과를 'a'로 할당

echo $a

 

exit 0

 

 

* Bash 변수는 타입이 없다 (untyped) *

Bash는 다른 프로그래밍 언어들과는 달리, 변수를 "타입"으로 구분하지 않습니다.

Bash 변수는 본질적으로 문자열이지만 Bash가 문맥에 따라서 정수 연산이나 변수를 비교해줍니다.

 

이 동작을 결정짓는 요소는 그 변수의 값이 숫자로만 이루어져있느나 아니냐로 구분한다고한다.

 

 

위에서 변수에 타입이 없다고했는데 형변환하는게 있으니.. 헷갈린다

 

특수한 변수 타입

 

지역 변수 

ㄴ 지역변수는 코드 블럭 [ ex) { } ] , 함수 [ ex) function function_name { comand... } 에서만 나타납니다.

 

환경 변수

ㄴ 쉘의 동작과 사용자 인터페이스에 영향을 미치는 변수

   참고 : 아주 일반적인 상황에서는 각 프로세스는 자신이 참조할 정보들을 담고 있는 변수들의 그룹인 "환경"이란 것을 갖고 있습니다. 이런 관점에서 보면, 쉘도 다른 프로세스들과 다를 바 없습니다.

 

쉘은 자신이 시작될 때마다 자신의 환경 변수에 대응하는 쉘 변수를 만들어 냅니다. 쉘 변수를 업데이트하거나 새롭게 추가하면 쉘은 자신의 환경 변수를 업데이트 시키고 쉘의 모든 자식 프로세스(쉘에서 실행시킨 명령어들)는 그 환경을 물려 받습니다.

 

위치 매개변수

 

$0 : 스크립트이름 

ㄴ 현재 디렉토리를 나타내는 ./ 가 추가되어있음

순수한 스크립트 명만 추출해내고싶다면

 

`basename $0` 

ㄴ 경로명을 떼어낼수 있음

 

$1 , $2 $3 .... ${10}

ㄴ $9보다 큰 위치 매개변수는 {중괄호}로 감싸야 한다.

 

------------------------------------------------------------------

 

variable1_=$1_

ㄴ이런식으로 변수를 위치매개 변수를 통해 초기화한다면 위치 매개변수가 비어있더라도 에러를 막을수 있음

 

# 좀 더 확실한 방법은 원하는 위치 매개변수가 넘어왔는지 테스트를 해보는 것이다.

 

shift 명령어는 위치 매개변수를 왼쪽으로 한단계씩 이동 시킨다.

$1 <--- $2, $2 <--- $3, $3 <--- $4, 등등.

원래의 $1 은 없어지지만 $0 은 바뀌지 않습니다. 위치 매개변수가 많이 필요하다면 {중괄호} 표기법으로 가능하지만(예 5-5 참고), shift 를 써서 예전 10개를 쓸 수 있습니다..

728x90

'쉘스크립트' 카테고리의 다른 글

8~/ 9~/ 연산자, 변수 재검토  (0) 2022.03.03
7~ 테스트  (0) 2022.03.03
6~ / #쿼우팅  (0) 2022.03.02
2.1~2.2 / 3. / 4. # 기초단계 종료상태 특수문자  (0) 2022.03.02
1-1~2 소개 , #!  (0) 2022.03.02
728x90

$?

ㄴ 마지막 명령어의 종료 상태를 나타낸다.

 

마지막 명령어의 종료 상태가 스크립트의 종료 상태가 된다.

 

exit로 끝났을 경우에는, 마지막으로 실행된 명령어(exit 자신을 제외하고) 종료 상태가 스크립트의 종료 상태가 된다.

ㄴ 보편적으로 0은 성공 1~ 255까지의 숫자는 에러를 나타낸다.

 

#

ㄴ 주석

 

;

ㄴ 명령어 구분자. 두개 이상의 명령어를 한 줄에서 같이 쓸 수 있게 해줍니다.

 

;;

ㄴ case 옵션 종료자. [이중 세미콜론]

 

case "$variable" in

abc) echo "$variable = abc" ;;

xyz) echo "$variable = xyz" ;;

esac

 

 

"점"(dot) 명령어. [마침표] source 명령어와 동일합니다(예 11-14 참고). 이 명령어는 bash 내장 명령(builtin)입니다.

"점"(dot)이 정규 표현식(reqular expression)으로 해석될 때는, 한 개의 문자와 일치됩니다.

또다른 문맥에서는 그냥 ls 라고 쳤을 때, 보이지 않는 "숨김" 파일을 나타내는 파일명 접두어로도 쓰입니다.

\ (이스케이프 escape)

ㄴ \X 하면 X 문자를 "이스케이프" 시키고, 'X' 라고 "쿼우팅" 시키는 것과 동일한 효과를 갖습니다. 

 

/

ㄴ 파일명 경로 구분자

 

`

ㄴ 명령어 치환 (백틱(backtics)

 

: (null command)

ㄴ 쉘의 "NOP"(아무 동작도 않함)에 해당합니다. 쉘 내장 명령인 true의 동의어 라고도 볼 수 있습니다.

주의할 점은 :은 bash 내장 명령이기 때문에 종료 상태는 0 이라는 것 입니다.

!

ㄴ 테스트나 종료 상태의 의미를 반대나 부정해준다.

 

*

ㄴ 와일드 카드 [별표]  * 문자는 정규표현식에서 0개 이상의 문자를 나타내는것과 동일하게 파일명 확장(globbing)에서 "와일드 카드" 처럼 쓰입니다.

 

?

ㄴ 와일드 카드 (하나의 문자) ? 문자는 확장 정규 표현식에서 한 문자를 나타내는 것과 마찬가지로 글로빙(globbing)에서 파일명 확장을 나타내는 한 문자짜리 "와일드 카드"의 역할을 합니다.

 

$

ㄴ 변수 치환 var1=5 , var2=23skidoo

echo $var1 # 5

echo $var2 # 23skidoo

 

${}

ㄴ 매개변수 치환

 

$*, $@

ㄴ 위치(positional) 매개변수

 

()

{xxx,yyy,zzz...}

{} 

ㄴ 코드블럭 [중괄호] "인라인 그룹"이라고도 부르는 중괄호 한 쌍은 실제로 익명의 함수를 만들어 냅니다만 보통의 함수와 달리 코드블럭 안의 변수들을 스크립트의 다른 곳에서 볼 수가 있습니다.

{ local a; a= 123: }

\;

 

[]

ㄴ 테스트 [는 쉘 내장 명령인 test와 동의어로서, 외부 명령어인 /usr/bin/test의 링크가 아니다.

 

[[ ]]

ㄴ 테스트.

 

(( ))

ㄴ 정수 확장 정수표현식을 확장하고 평가해줌

 

|

ㄴ 여러 명령어들을 연결하는 방법으로써, 한명령어의 출력을 다음 명령어나 쉘에게 전달

 

>|

ㄴ 강제 ㅈ지향

 

&

ㄴ 작업을 백그라운드로 돌리기 명령어 뒤에 &를 붕텨주면 백그라운드로 실행됩니다.

 

ㄴ 홈디렉토리

 

~+

ㄴ 현재 작업디렉토리

 

~-

ㄴ 바로 전 작업 디렉토리

 

-

표준입력(stdin)과 표준출력(stdout) 서로간의 재지향.

 

 

 

 

 

 

 

728x90

'쉘스크립트' 카테고리의 다른 글

8~/ 9~/ 연산자, 변수 재검토  (0) 2022.03.03
7~ 테스트  (0) 2022.03.03
6~ / #쿼우팅  (0) 2022.03.02
5. / # 변수와 매개변수 소개  (0) 2022.03.02
1-1~2 소개 , #!  (0) 2022.03.02
728x90

[ Bash : Bourne-Again Shell ]

 

내부 명령(built in) 

built in(고유의, 붙박이의)

 

내부 명령은 시스템 명령어와 이름이 같을수도 있지만 이런 경우 Bash가 내부적으로 다시 구현해놓은것

ex) echo, read, print, exit .. 등등

 

스크립트 명령어

 

4 (read) 2 (write) 1 (excute)

 

chmod 555 scriptname (아무나 읽고/실행 할 수 있게) 

chmod +rx scriptname (아무나 읽고/실행 할 수 있게)

chmod u+rx scriptname (스크립트 소유자만 읽고/실행할 수 있게)

 

 

$UID # 기본적으로 UID가 0인 유저만이 루트 권한을 갖는다.

 

if 문 조건식

[ -z ] : 문자열의 길이가 0이면 참
[ -n ] : 문자열의 길이가 0이 아니면 참


[ -eq ] : 값이 같으면 참
[ -ne ] : 값이 다르면 참
[ -gt ] :  값1 > 값2
[ -ge ] : 값1  >= 값2
[ -lt ] : 값1 < 값2
[ -le ] : 값1 <= 값2


[ -a ] : &&연산과 동일 and 연산
[ -o ] : ||연산과 동일 xor 연산


[ -d ] : 파일이 디렉토리면 참
[ -e ] : 파일이 있으면 참
[ -L ] : 파일이 심볼릭 링크면 참
[ -r ] : 파일이 읽기 가능하면 참
[ -s ] : 파일의 크기가 0 보다 크면 참
[ -w ] : 파일이 쓰기 가능하면 참
[ -x ] : 파일이 실행 가능하면 참
[ 파일1 -nt 파일2 ]  : 파일1이 파일2보다 최신파일이면 참
[ 파일1 -ot 파일2 ]  : 파일1이 파일2보다 이전파일이면 참
[ 파일1 -ef 파일2 ] : 파일1이 파일2랑 같은 파일이면 참

#! 스크립트의 제일 앞에서 이 파일이 어떤 해석기의 명령어 집합인지 알려주는 역할

 #! 바로 뒤에 나오는 것은 경로명으로, 스크립트에 들어있는 명령어들을 해석할 프로그램의 위치를 나타내는데 그 프로그램이 쉘인지, 프로그램 언어인지, 유틸리티인지를 나타냅니다. 이 명령어 해석기가 주석은 무시하면서 스크립트의 첫 번째 줄부터 명령어들을 실행시킵니다.

 

ex) !/bin/bash

 

[매개변수 개수 체크 로직]

if [ $# -ne 원하는_매개변수_갯수 ]
then
  echo "사용법: `basename $0` 어쩌구저쩌구"
  exit $WRONG_ARGS
fi
728x90

'쉘스크립트' 카테고리의 다른 글

8~/ 9~/ 연산자, 변수 재검토  (0) 2022.03.03
7~ 테스트  (0) 2022.03.03
6~ / #쿼우팅  (0) 2022.03.02
5. / # 변수와 매개변수 소개  (0) 2022.03.02
2.1~2.2 / 3. / 4. # 기초단계 종료상태 특수문자  (0) 2022.03.02
728x90

표준 입력 (stdin: standard input)

표준 출력 (stdout: standard output)

표준 에러 (stderr: standard error)

 

위 3가지를 표준 스트림(standard stream)이라고 하며 운영 체제에서 기본적으로 제공하는 추상화된 입출력 장치를 의미합니다.

 

tty란 전신타자기를 의미하는 (TeleTYpewriter의 약자로 TelePrinter 라고도 합니다.)

출처: wikipedia

tty 는 현재 표준 입력과 연결된 터미널이 무엇인지 출력해 주는 명령어이기도 합니다.

pty 란

pty는 Pseudo terminal 의 의미로 리눅스나 유닉스를 연결된 콘솔에서만 사용한다면 동시에 한 명밖에 사용할수 없으므로 SSH 나 Telnet, X-Windows Terminal 등 다양한 방식으로 사용하기 위한 가상 tty 입니다.

리눅스에서 pty 디바이스는 /dev/pts 아래에 있습니다.

 

 

 

 

728x90

'네트워크' 카테고리의 다른 글

[쉘 스크립트] 특수 문자  (0) 2022.02.23
프록시  (0) 2022.02.22
HTTPS 통신에대한 생각정리  (0) 2022.02.21
SSL / TLS protocol and Cipher suite  (0) 2022.02.18

+ Recent posts