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

+ Recent posts