'bash'에 해당되는 글 6건

  1. 2011.04.24 [BASH, PERL] Multiline string
  2. 2011.03.14 [BASH] String manipulation
  3. 2010.08.12 [BASH] 공백문자(space)가 포함된 파일패스 list 처리
  4. 2010.08.12 [BASH] rm -rf path/to/delete/*
  5. 2010.08.05 [BASH] Builtin: test, [
  6. 2010.07.27 [BASH] 변수

[BASH, PERL] Multiline string

CS/Shell/Perl/Python 2011. 4. 24. 15:50
참고:
http://serverfault.com/questions/72476/clean-way-to-write-complex-multi-line-string-to-a-variable

BASH

cat <<EOF

This is

Multiline

String.

EOF

read -d '' VAL<<EOF

This is

Multiline

String.

EOF


PERL

my $VALUE =<<ENDVALUE;

This is

Multiline

String.

ENDVALUE

my $VALUE = "This is

Multiline

String.

";


:

[BASH] String manipulation

CS/Shell/Perl/Python 2011. 3. 14. 13:42
참고


1. String Length

${#string}



2. Substring Extraction

${string:position}
$string에서 position에 있는 substring
만약 $string 파라메터가 "*"나 "@"이면 position에서 시작하는 위치 매개변수를 추출해 낸다.
${string:position:length}
$string에서 position부터 length까지의 substring

stringZ=abcABC123ABCabc
#           0123456789.....
#           0-based indexing.

echo ${stringZ:0}                            # abcABC123ABCabc
echo ${stringZ:1}                            # bcABC123ABCabc
echo ${stringZ:7}                            # 23ABCabc

echo ${stringZ:7:3}                         # 23A



3. Substring Removal

${string#substring}
$string의 앞 부분에서 가장 짧게 일치하는 $substring을 삭제
${string##substring}
$string의 앞 부분에서 가장 길게 일치하는 $substring을 삭제

stringZ=abcABC123ABCabc
#           |------|                shortest
#           |----------------|    longest

echo ${stringZ#a*C}       # 123ABCabc
echo ${stringZ##a*C}     # abc

${string%substring}
$string의 뒷 부분에서 가장 짧게 일치하는 $substring을 삭제
${string%%substring}
$string의 뒷 부분에서 가장 길게 일치하는 $substring을 삭제

stringZ=abcABC123ABCabc
#                                    ||    shortest
#              |------------------|    longest

echo ${stringZ#b*c}       # abcABC123ABCa
echo ${stringZ##b*c}     # a



4. Substring Replacement

${string/substring/replacement}
처음 일치하는 $substring을 $replacement로 대치. $string 자체가 변화되지는 않는다.
${string//substring/replacement}
일치하는 모든 $substring을 $replacement로 대치. $string 자체가 변화되지는 않는다.

stringZ=abcABC123ABCabc
echo ${stringZ/abc/xyz}       # xyzABC123ABCabc
                                            # Replaces first match of 'abc' with 'xyz'.

echo ${stringZ//abc/xyz}      # xyzABC123ABCxyz
                                            # Replaces all matches of 'abc' with # 'xyz'.

# Can the match and replacement strings be parameterized?
match=abc
repl=000
echo ${stringZ/$match/$repl}  # 000ABC123ABCabc
#                     ^           ^            ^^^
echo ${stringZ//$match/$repl} # 000ABC123ABC000
#                      ^          ^            ^^^               ^^^

# What happens if no $replacement string is supplied?
echo ${stringZ/abc}           # ABC123ABCabc
echo ${stringZ//abc}          # ABC123ABC

${string/#substring/replacement}
$substring이 $string의 맨 앞에서 일치하면 $replacement로 대치.
${string/%substring/replacement}
$substring이 $string의 맨 뒤에서 일치하면 $replacement로 대치.

stringZ=abcABC123ABCabc

echo ${stringZ/#abc/XYZ}          # XYZABC123ABCabc
                                                  # Replaces front-end match of 'abc' with 'XYZ'.

echo ${stringZ/%abc/XYZ}          # abcABC123ABCXYZ
                                                   # Replaces back-end match of 'abc' with 'XYZ'.

:

[BASH] 공백문자(space)가 포함된 파일패스 list 처리

CS/Shell/Perl/Python 2010. 8. 12. 14:09
FILES=$(find path -name "*.gz")
으로 파일을 찾아 루프로 넘기는 경우

for file in "$FILES"
do
    ...
done

FILES에 공백 문자가 포함된 경우("/root/some path/somefile")
file에는 /root/some 과 path/somefile 이 넘어오게 된다.

이런 경우, find는 \n으로 각 파일패스를 구분하므로, 구분자를 바꾸어 준다.

FILES=$(find path -name "*.gz")
IFS=$'\n"
for file in "$FILES"
do
    ...
done


:

[BASH] rm -rf path/to/delete/*

CS/Shell/Perl/Python 2010. 8. 12. 14:02
path/to/delete 폴더 밑의 모든 파일,폴더를 삭제할 경우

#!/bin/bash
$folders="/path/to/delete"
rm -rf "$folder/*"

과 같이 /* 까지 quote 시키면 삭제되지 않는다. 
(*이 재해석 되는 것인지... 그렇다고 rm -rf '/path/to/delete/*' 로 quote를 해주어도 동작하지 않는것을 보면 globbing 문제 때문인것 같지는 않은데...)

#!/bin/bash
$folders="/path/to/delete"
rm -rf "$folder"/*

* 부분을 quote시키지 않은 경우 정상적으로 동작한다.

:

[BASH] Builtin: test, [

CS/Shell/Perl/Python 2010. 8. 5. 09:58
참조

Evaluate a conditional expression expr. Each operator and operand must be a separate argument. Expressions are composed of the primaries described below in Bash Conditional Expressions. test does not accept any options, nor does it accept and ignore an argument of -- as signifying the end of options. 

When the [ form is used, the last argument to the command must be a ]. 

Expressions may be combined using the following operators, listed in decreasing order of precedence. The evaluation depends on the number of arguments; see below. 

! expr
: True if expr is false. 

( expr )
: Returns the value of expr. This may be used to override the normal precedence of operators. 

expr1 -a expr2
: True if both expr1 and expr2 are true. 

expr1 -o expr2
: True if either expr1 or expr2 is true.


산술 비교

val1 -eq val2 
: 변수 val1과 변수 val2 같은 경우 true

val1 -ne val2 
: 변수 val1과 변수 val2 다른 경우 true

val1 -qt val2 
: 변수 val1이 변수 val2 보다 큰 경우 true

val1 -lt val2 
: 변수 val1이 변수 val2 보다 작은 경우 true

val1 -ge val2 
: 변수 val1이 변수 val2 보다 크거나 같은 경우 true

val1 -le val2 
: 변수 val1이 변수 val2 보다 작거나 가은 경우 true


파일 검사

-e 
: 존재하는 파일인 경우 true

-b 
: 파일이 존재하고 블록장치(플로피, 시디롬, ...)인 경우 true

-c 
: 파일이 존재하고 캐릭터 장치 파일인 경우 true

-d 
: 파일이 존재하고 디렉토리인 경우 true

-h
: 파일이 심볼릭 링크

-L
: 파일이 심볼릭 링크

-S
:파일이 소켓

-t
: 파일 디스크립터가 터미널 디바이스와 연관이 있음
: 스크립트의 표준입력([ -t 0 ])이나 표준출력([ -t 1 ])이 터미널인지 아닌지를 확인하는데 쓸 수 있습니다.

-f 
: 파일이 존재하고 보통 파일(디렉토리나 디바이스 파일이 아님)인 경우 true

-h 
: 파일이 존재하고 한 개 이상의 심볼릭 링크가 설정된 경우 true

-p 
: 파일이 존재하고 파이프인 경우 true

-s 
: 파일이 존재하고 0보다 큰 경우 true

-g 
: 파일이 존재하고 SetGID가 설정된 경우 true

-u 
: 파일이 존재하고 SetUID가 설정된 경우 true

-k 
: 파일이 존재하고 Sticky bit가 설정된 경우 true

-r 
: 파일이 존재하고 읽기 가능한 경우 true

-w 
: 파일이 존재하고 쓰기가 가능한 경우 true

-x 
: 파일이 존재하고 실행 가능한 경우 true

-O
: 자신이 소유자임

-G
: 그룹 아이디가 자신과 같음

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

file1 -nt file2
: file1 파일이 file2 파일보다 최신임

file1 -ot file2
: file1 파일이 file2 파일보다 예전것임

file1 -ef file2
: file1 파일과 file2 파일이 같은 파일을 하드 링크하고 있음

문자열 비교
-z string 
: 문자열의 길이가 0인 경우 true

-n string 
: 문자열의 길이가 0이 아닌 경우 true

string1 = string2 
: 문자열 string1과 string2가 일치하는 경우

string1 != string2 
: 문자열 string1과 string2가 일치하지 않는 경우

string : 문자열이 NULL이 아닌 경우

:

[BASH] 변수

CS/Shell/Perl/Python 2010. 7. 27. 14:42

원문 : 고급 Bash 스크립팅 가이드

1. 위치 매개 변수

$0, $1, $2, etc.
: 위치 매개변수로서, 명령어줄에서 스크립트로 넘겨지거나 함수로 넘겨지거나 set 명령어로 강제로 설정됨.

$#
: 명령어줄 인자의 갯수나 위치 매개변수들

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

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


2. 내장 변수

$GROUPS
: 현재 사용자가 속해 있는 그룹. /etc/passwd에 적혀 있는 현재 사용자의 그룹 아이디 값을 보여줍니다.

$HOME
: 사용자의 홈 디렉토리로, 보통은 /home/username (예 9-10 참고)

$IFS
: 입력 필드 구분자
: 디폴트는 공백문자(빈칸, 탭, 뉴라인)지만 콤마로 구분된 데이타 파일을 파싱하려는 경우처럼 변경이 가능. $*는 $IFS의 첫번째 문자를 사용하는 것에 주의
ex)
$ bash -c 'set w x y z; IFS=":-;"; echo "$*"'
w:x:y:z

$PATH
:실행 파일의 경로, 보통은 /usr/bin/, /usr/X11R6/bin/, /usr/local/bin, 등등.

$PPID
: 어떤 프로세스의 부모 프로세스의 프로세스 아이디(pid)

$UID
: 사용자 아이디 값. /etc/passwd에 저장되어 있는 현재 사용자의 사용자 식별 숫자

$PS1
: 명령어줄에서 볼 수 있는 메인 프롬프트.

$PS2
: 2차 프롬프트로, 추가적인 입력이 필요할 때 ">" 로 표시됨.

$PS3
: 3차 프롬프트로 select 루프문에서 표시됨.

$PS4
: 4차 프롬프트로, 스크립트에 -x 옵션이 걸려서 실행될 때 스크립트의 매 줄마다 "+"로 표시됨.

$PWD
: 작업 디렉토리(현재 있는 디렉토리)


3. 특수 매개변수

$-
: 스크립트로 넘겨진 플래그들

$!
: 백그라운드로 돌고 있는 가장 최근 작업의 PID (process id)

$_
: 바로 이전에 실행된 명령어의 제일 마지막 인자로 설정되는 특수 변수.

$?
: 명령어나 함수, 스크립트 자신의 종료 상태.

$$
: 스크립트 자신의 프로세스 아이디로 보통 임시 파일 이름을 만들 때 사용.

: