연산자 | 의미 | 표현 |
-eq | (같음) | if [ $a -eq $b ] |
-ne | (같지 않음) | if [ $a -ne $b ] |
-gt | (보다 큼) | if [ $a -gt $b ] |
-ge | (크거나 같음) | if [ $a -ge $b ] |
-lt | (보다 작음) | if [ $a -lt $b ] |
-le | (작거나 같음) | if [ $a -le $b ] |
> | (보다 큼) | (($a > $b)) |
>= | (크거나 같음) | (($a >= $b)) |
< | (보다 작음) | (($a < $b)) |
<= | (작거나 같음) | (($a <= $b)) |
연산자 | 의미 | 표현 |
= | (같음) | if [ "$a" = "$b" ] |
== | (같음) | if [ "$a" == "$b" ] |
!= | (같지 않음) | if [ "$a" != "$b" ] |
-z | (문자열이 "null"임. 길이가 0) | if [ -z "$a" ] |
! -z | (문자열이 "null"이 아님.) | if [ ! -z "$a" ] |
-n | (문자열이 "null"이 아님.) | if [ -n "$a" ] |
> | (ASCII값이 보다 큼.) | if [[ "$a" > "$b" ]] if [ "$a" \> "$b" ] |
< | (ASCII값이 보다 작음.) | if [[ "$a" < "$b" ]] if [ "$a" \< "$b" ] |
참고 |
|
|
[[ "$a" == a* ]] | $a 가 "a"로 시작하면 참 (패턴 매칭) | |
[[ "$a" == "a*" ]] | $a 가 "a*" 와 같다면 참 | |
[ "$a" == a* ] | 잘못된 표현 | |
[ "$a" == "a*" ] | $a 가 "a*" 와 같다면 참 |
[ 복합 비교 ]
연산자 | 의미 | 표현 |
-a | (논리 and) | if [ $a -eq 0 -a $b -eq 1 ] |
-o | (논리 or) | if [ $a -eq 0 -o $b -eq 1 ] |
&& | (논리 and) | if [ $a -eq 0 ] && [ $b -eq 1 ] if [[ $a -eq 0 && $b -eq 1 ]] |
|| | (논리 or) | if [ $a -eq 0 ] || [ $b -eq 1 ] if [[ $a -eq 0 || $b -eq 1 ]] |
연산자 | 의미 | 표현 |
-d | Directory | if [ -d FILE ] |
-f | File | if [ -f FILE ] |
-e | Exist | if [ -e FILE ] |
-r | Readable | if [ -r FILE ] |
-w | Writable | if [ -w FILE ] |
-x | Execuable | if [ -x FILE ] |
-s | if [ -s FILE ] | |
-O | Same Owner | if [ -O FILE ] |
-G | Same Group | if [ -G FILE ] |
-nt | Newer Than | if [ FILE1 -nt FILE2 ] |
-ot | Older Than | if [ FILE1 -ot FILE2 ] |
참조 : http://btyy.tistory.com/43?category=608614
※ find & grep
1. find
- 특정 파일을 검색 할 때 사용한다.
( 해당 경로 제일 하위까지 모두 검색한다 )
- 옵션은 여러개 중첩해서 사용 할 수 있다.
- find <path> <option> ...
-name <value>
#>find /etc -name "passwd"
-print 검색한 내용을 이름만 보는 방식
#>find /etc -name "passwd" -print
( -print 옵션은 기본값으로 설정 되있어서 적어주지 않아도 똑같이 출력 된다 )
-ls 검색한 내용을 자세히 보는 방식
#>find /etc -name "passwd" -ls
-delete 검색한 내용을 삭제
#>find /etc -name "passwd" -delete
-empty 검색한 내용 중에서 비어있는 파일만 보여주는 방식
#>find /etc -name "passwd" -empty
-type <value> : 해당 타입만 출력한다.
-type d 디렉터리 파일
-type f 일반 파일
-type l 링크 파일
-type b 장치 파일
ex) #>find /root -name "test" -type d -ls
( /root에서 이름이 test인 디렉터리 파일을 자세히 본다 )
* 파일은 이 외에도 종류가 더 있지만 위에는 자주 쓰이는 것들이다.
-exec <command> {} \;
#>mv 찾은파일 /tmp
#>find /root -name "test" -type f -exec mv 찾은파일 /tmp \;
* -exec를 사용할때는 항상 \;로 끝내준다.
* {} 안에는 찾은 파일들이 들어간다.
( -type과 -exec 옵션을 이용해서 이름이 test인 파일을 찾아서 삭제한걸 볼 수 있다 )
-size n ( +n | n | -n )
#>find /etc -size 2535c ( c는 바이트 단위를 나타낸다 )
* n에 붙는 +, -는 n보다 크기가 크거나 작은걸 찾을때 사용한다.
( find 명령어에 -size 옵션을 이용해서 /etc 디렉터리 안에 있는 2535바이트 파일을 찾았다 )
-user <user_name>
-group <group_name>
-perm <octal> : 해당 권한을 가지고 있는 모든 파일을 찾는다.
( -perm을 이용해 /home 디렉터리 안에 권한이 700인 파일들을 찾았다 )
* 권한을 표시하는 octal앞에 - 를 붙여주면 해당 설정 권한이 모두 있는 파일들을 전부 출력한다.
ex) #>find /home -perm -700 -ls
( 파일 권한 중에 소유자 권한이 rwx만 만족한다면
그룹권한과 다른 사용자 권한은 상관하지 않고 모두 출력한다 )
-atime n : n일 이전에 접근한 파일
( 하루가 지나거나 내용이 수정 되었을때 접근 시간이 바뀐다 )
-mtime n : n일 이전에 내용이 수정된 파일
-ctime n : n일 이전에 속성이 수정된 파일
( stat 명령어를 이용해서 파일을 확인하면 atime, mtime, ctime을 확인 할 수 있다 )
* 하루 이전은 n앞에 -를 붙여주고 하루 이후는 부호를 붙이지 않는다.
-inum n : 아이노드를 이용해서 검색하는 방법
( 위에 stat file1에서 확인 해보면 file1의 아이노드가 위와 같기 때문에
아이노드를 이용해 file1을 찾았다 )
2. grep
- 파일에서 내용으로 검색한다.
-r <value> 기본값으로 -r을 빼도 똑같은 결과가 나온다.
-c <value> 해당 value 값이 들어간 라인 수를 출력한다.
-i <value> 대소문자 상관없이 검색한다.
-n <value> 해당 value의 줄번호와 같이 출력된다.
-v <value> 해당 value가 들어가있지 않은 라인만 출력한다.
* 옵션을 중첩 사용은 -i -n이나 -in 둘다 사용이 가능하다.
표준에러
(참조 : http://linuxism.tistory.com/367)
shell(#mode)에서 간단하게 명령어를 통해 테스트를 진행하면서 "/dev/null 2>&1"의 의미를 알아본다,
아래 명령어는 표준 출력을 /dev/null로 redirection 하라는 의미로 표준출력을 버리라는 의미다,
하지만, test라는 file이 존재하지 않는 경우 아래와 같은 표준에러가 출력된다,
rm: cannot remove 'test': No such file or directory
#
방금 언급했지만, 이것은 "표준출력"이 아닌 "표준에러"이기 때문에 화면에 출력이 된것이다,
다시 강조하면 /dev/null 로 redirection 을 통해 화면 출력을 하지 않는것은 표준출력에 한해서 해당된다.
자 그렇다면, 표준에러를 버리고 싶다면 아래와 같이 사용하도록 하자,
2>&1 는 표준에러를 표준출력으로 redirection 하라는 의미다.
(0, 1, 2는 각각 표준입력, 표준출력, 그리고 표준에러를 의미)
정리하면 "rm test"의 표준출력을 /dev/null로 버리는데, 표준에러는 표준출력으로 redirection한다.
결국 결과는 표준출력이 되기 때문에 /dev/null로 버려지고, 화면에 결과가 뿌려지지 않게 되는 것이다.
/dev/null과 2>&1를 같이 사용하지 않는 경우 위의 예제는 결국 표준출력되기 때문에 화면에 에러 내용이 출력된다,
'프로그램언어+ > Shell Script&Linux' 카테고리의 다른 글
Photon OS로 Docker Host로 운영 (0) | 2019.03.18 |
---|---|
리눅스 원격프로그램 사용하기(xrdp) (0) | 2019.03.18 |
주요정보통신기반시설 진단 쉘스크립트(일부) (0) | 2018.12.20 |
간단한 구구단 게임 만들기(설명없음) (0) | 2018.11.15 |