원문 : http://devmanual.gentoo.org/tools-reference/bash/index.html
bash -- Standard Shell
A thorough understanding of bash programming is vital when working with ebuilds.
bash 프로그래밍을 철저히 이해하는 것은 ebuilds로 작업을 할때 필수적이다.
* A through : 빈틉없는, 철두철미한
* vital : 필수적인
bash Conditionals
Basic Selection
기본 조건 연산자인 if 문 :
if something ; then do_stuff fi
|
Multiple Selection
Multiple pronged selection can be done using else and elif:
다양한 선택의 분기를 else와 elif를 사용하여 할 수 있다 :
* pronged : 가닥이 진, 갈래진
if something ; then do_stuff elif something_else ; then do_other_stuff elif full_moon ; then howl else turn_into_a_newt fi
|
주의 : 각각의 블럭 안에 최소한 하나의 문장은 명시를 해야한다. 다음에 오는 작업은 수행되지 않는다. specify : (구체적으로) 명시하다. |
if some_stuff ; then # A statement is required here. a blank or a comment # isn't enough! else einfo "Not some stuff" fi
|
If you really don't want to restructure the block, you can use a single colon (:) on its own as a null statement.
정말로 위 블럭 구조를 변경하길 원치 않는 다면 싱글 콜론(:)을 사용할 수도 있다.
if some_stuff ; then # Do nothing : else einfo "Not some stuff" fi
|
Selection Tests
To do comparisons or file attribute tests, [ ] or [[ ]] blocks are needed.
비교 또는 파일 속성 테스를 하기 위해서는 [] 또는 [[]] 블럭이 필요하다.
# is $foo zero length? if [[ -z "${foo}" ]] ; then die "Please set foo" fi # is $foo equal to "moo"? if [[ "${foo}" == "moo" ]] ; then einfo "Hello Larry" fi # does "${ROOT}/etc/deleteme" exist? if [[ -f "${ROOT}/etc/deleteme" ]] ; then einfo "Please delete ${ROOT}/etc/readme manually!" fi
|
Single versus Double Brackets in bash
Important: The [[ ]] form is generally safer than [ ] and should be used in all new code.
중요 : [[]] 형식은 일반적으로 [] 보다 안전하고 모든 새로운 코드에 사용 되어야 한다.
This is because [[ ]] is a bash syntax construct, whereas [ ] is a program which happens to be implemented as an internal -- as such, cleaner syntax is possible with the former. For a simple illustration, consider:
왜냐하면 [[]]는 bash 문법 구조이고 []는 내부 실행으로 발생되는 하나의 프로그램이다. -- 흔히 말하는 cleaner syntax는 이전에 가능 했다.
간단한 예를 통해 보자 :
* whereas : 두 가지 사실을 비교/대조 할 때 씀
* implement : 시행하다.
* illustration : 예/보기
bash$ [ -n $foo ] && [ -z $foo ] && echo "huh?" huh? bash$ [[ -n $foo ]] && [[ -z $foo ]] && echo "huh?" bash$
|
String Comparison in bash
bash 에서의 문자열 비교
The general form of a string comparison is string1 operator string2. The following are available:
문자열 비교의 일반적인 형식은 string1 operator string2 이다. 다음을 사용할 수 있다.:
Operator Purpose
== (also =) String equality
!= String inequality
< String lexiographic comparison (before)
> String lexiographic comparison (after)
=~ String regular expression match (bash 3 only, not currently allowed in ebuilds)
String Test in bash
bash에서의 문자열 테스트
The general form of string tests is -operator "string". The following are available:
문자열 테스트의 일반적인 형식은 -operator "string"이다. 다음을 사용할 수 있다.:
Operator Purpose
-z "string" String has zero length
-n "string" String has non-zero length
Note: To check whether a variable is set and not blank, use -n "${BLAH}" rather than -n $BLAH. The latter will cause problems in some situations if the variable is unset. 노트 : 값이 set 되어 있고 비어있지 않은 지 체크하기 위해서 -n $BLAH 보다는 -n "${BLAH}"를 사용한다.
|
Integer Comparison in bash
bash 에서의 정수 비교
The general form of integer comparisons is int1 -operator int2. The following are available:
정수 비교의 일반적인 형식은 int1 -operator int2이다. 다음을 사용할 수 있다.:
Operator Purpose
-eq Integer equality
-ne Integer inequality
-lt Integer less than
-le Integer less than or equal to
-gt Integer greater than
-ge Integer greater than or equal to
File Tests in bash
bash 에서의 File 테스트
The general form of a file test is -operator "filename". The following are available (lifted from man bash):
파일 테스트의 일반적인 형식은 -operator "filename"이다.
Operator Purpose
-a file Exists (use -e instead)
-b file Exists and is a block special file
-c file Exists and is a character special file
-d file Exists and is a directory
-e file Exists
-f file Exists and is a regular file
-g file Exists and is set-group-id
-h file Exists and is a symbolic link
-k file Exists and its sticky bit is set
-p file Exists and is a named pipe (FIFO)
-r file Exists and is readable
-s file Exists and has a size greater than zero
-t fd Descriptor fd is open and refers to a terminal
-u file Exists and its set-user-id bit is set
-w file Exists and is writable
-x file Exists and is executable
-O file Exists and is owned by the effective user id
-G file Exists and is owned by the effective group id
-L file Exists and is a symbolic link
-S file Exists and is a socket
-N file Exists and has been modified since it was last read
File Comparison in bash
bash 에서의 File 비교
The general form of a file comparison is "file1" -operator "file2". The following are available (lifted from man bash):
file 비교의 일반적인 형식은 "file1" -operator "file2"이다.
Operator Purpose
file1 -nt file2 file1 is newer (according to modification date) than file2, or if file1 exists and file2 does not.
file1 -ot file2 file1 is older than file2, or if file2 exists and file1 does not.
file1 -ef file2 file1 and file2 refer to the same device and inode numbers.
Boolean Algebra in bash
There are constructs available for boolean algebra ('and', 'or' and 'not'). These are used outside of the [[ ]] blocks. For operator precedence, use ( ).
bool 대수('and', 'or', 'not')를 사용가능한 구조가 있다. [[]] 블럭의 바깥에 사용한다. operator 이전에 () 를 사용한다.
Construct Effect
first || second first or second (short circuit)
first && second first and second (short circuit)
! condition not condition
Note: These will also sometimes work inside [[ ]] constructs, and using ! before a test is fairly common. [[ ! -f foo ]] && bar is fine. However, there are catches -- [[ -f foo && bar ]] will not work properly, since commands cannot be run inside [[ ]] blocks. 노트 : 이는 또한 때때로 [[]] 구조 안쪽에 쓰이고 꽤 흔하게 test 문법 앞에 !를 사용한다. [[ ! -f foo ]] && bar는 적절하다. 그러나 [[ -f foo && bar ]] 는 적절하지 않다. [[]] 블럭 안쪽에서 수행할 수 없다.
|
Inside [ ] blocks, several -test style boolean operators are available. These should be avoided in favour of [[ ]] and the above operators.
[] 블럭 안쪽에는 몇몇의 -test 스타일의 boolean operator들이 유효하다. [[]]의 사용을 선호하고 위의 operator들은 피해야 한다.
Bash Iterative Structures
Bash 반복 구조
There are a few simple iterative structures available from within bash. The most useful of these is a for loop. This can be used to perform the same task upon multiple items.
bash 내에 사용할 수 있는 몇몇 간단한 반복문들이 있다. 대개 사용하는 것이 for 루프이다. 이것은 여러 항목에 동일한 작업을 수행하는데 사용될 수 있다.
for myvar in "the first" "the second" "and the third" ; do einfo "This is ${myvar}" done
|
There is a second form of the for loop which can be used for repeating an event a given number of times.
이벤트가 지정된 횟수만큼 반복 사용될 수 있는 for 루프의 두번 째 형태가 있다.
for (( i = 1 ; i <= 10 ; i++ )) ; do einfo "i is ${i}" done
|
There is also a while loop, although this is usually not useful within ebuilds.
또한 비록 ebuilds내에서 일반적으로 사용하진 않지만 while 루프가 있다.
while hungry ; do eat_cookies done
|
This is most commonly used to iterate over lines in a file:
이것은 가장 일반적으로 파일의 행을 반복하는데 사용된다.
while read myline ; do einfo "It says ${myline}" done < some_file
|
See die and Subshells for an explanation of why while read < file should be used over cat file | while read.
왜 while read < file은 cat file | while read 를 사용해야 하는지에 대한 설명을 위해 die and Subshells를 참조해라.
Bash Variable Manipulation
Bash 변수 조작
There are a number of special ${} constructs in bash which either manipulate or return information based upon variables. These can be used instead of expensive (or illegal, if we're in global scope) external calls to sed and friends.
각각의 조작이나 변수들의 기본 정보 반환하는 것으로 bash에서는 약간의 틀별한 ${} 구조가 있다.
* a number of : 얼마간의(some)
'기타 활동 > 영어공부' 카테고리의 다른 글
[번역연습] SQL Server 제약 중에 PAD_INDEX의 용도는 무엇인가요? (0) | 2015.08.24 |
---|---|
[번역연습] 왜 켄트백은 테스트 주도 개발의 "재발견"이라는 인용을 했을까? (0) | 2015.08.23 |
[번역연습] 스칼라 에서 함수형 프로그래밍 원칙들 (코세라 강좌) (0) | 2015.08.21 |
Google Cloud Messaging - Implementing GCM Client (0) | 2014.12.31 |
Google Cloud Messaging - Getting Started (0) | 2014.12.31 |
댓글