분류 전체보기
- [말말] 책과 사랑에 빠진다는 것... 2010.10.14 2
- [UNIX] vim 컬러 스키마 2010.10.13
- [말말] 이세상에서 가장 아름다운 사람은.. 2010.10.10 1
- [말말] 마음으로 이야기 할때.. 2010.10.06 2
- [말말] '흔들림 없는 마음'과 성과 2010.10.01 1
- [말말] 쉬운건 없다... ~~ 2010.09.29
- [말말] 정말 책을 많이 읽어야겠다. 2010.09.24
- [UNIX] vim 인코딩 변경 2010.09.14 1
- [UNIX] ps aux 결과에 대한 설명 2010.09.03
- [MAC] root 권한 2010.08.30
- [UNIX] bash 2010.06.04
- [javascript] 변수 선언 확인 2010.06.03
- [기타] outlook 2010 pst 파일 복구 2010.06.01
- [UNIX] '/etc/security/limits.conf' 설정 2010.05.31 1
- [UNIX] cron 등록시 유의점 2010.04.06 1
- [HTML] scrollHeight,clientHeight.. 의 정확한 의미 2009.08.24
- [lang] stl, mfc, atl 등에서 사용되는 타입케스팅 관련 링크 2009.07.03 1
- [MySQL] unload 셈플 2009.07.02
- [UNIX] zterm 터미널에서 디렉토리 색깔 변경 2009.07.02
- [Server] Apache Configure 옵션 2009.01.30
[말말] 책과 사랑에 빠진다는 것...
[UNIX] vim 컬러 스키마
개발자들이 개성이 강한지라
vim 상에서도 신텍스 하이라이팅을 다르게 하고 싶은 욕구가 있으셨을 것입니다.
그래서 vim 에서는 컬러스키마를 제공하구요
그게 아래와 같이 .vimrc 파일을 수정하면 변경이 가능하지요.
colorscheme <스키마이름>
제가 공유한 링크는 스키마를 한눈에 볼수 있는 페이지입니다.
구경해보세요.
[말말] 이세상에서 가장 아름다운 사람은..
이 세상에서 가장 아름다운
사람은 마음씨 따뜻한 사람입니다
이 세상에서 가장 부유한 사람은
가슴이 넉넉한 사람입니다
이 세상에서 가장 착한 사람은
먼저 남을 생각하는 사람입니다
이 세상에서 가장 용기있는 사람은
용서할 줄 아는 사람입니다
이 세상에서 가장 필요한 사람은
삶을 성실히 가꾸는 사람입니다
이 세상에서 가장 지혜로운 사람은
사랑을 깨달은 사람입니다
이 세상에서 가장 훌륭한 사람은
이 모든 것을 행한 사람입니다.
[말말] 마음으로 이야기 할때..
어찌보면 36년이라는 기간 동안
전 마음으로 이야기하는 방법을 몰랐던것 같습니다.
마음으로 이야기할때 진실함이 배가 되고 진실함이 배가 됨으로
서로의 믿음이 강해지는데 말이죠.. ^^
그래도 다행입니다....
마음으로 이야기해야 마음을 얻을 수 있다는 것을 알았다는것을...
여러분 감사합니다. 행복하실꺼에요.. ^^
[말말] '흔들림 없는 마음'과 성과
[말말] 쉬운건 없다... ~~
근래 난 많은걸 배우고 있다.
처음으로 격어보는 상황이기도 하고
그 상황이 좋지 않음에도 좋게 변화해 보려는 시도도 해보았다..
허나
어렵다~~~ 태생이 다르기에..
to Mater~
지친다.. 쉬고 싶다..
[말말] 정말 책을 많이 읽어야겠다.
실패와 성공을 경험하지 않는 사람은 없을 것이다.
나또한 성공과 실패를 경험했다..
찬찬히 고민을 해보니 대부분의 실패는 경험부족이 대부분 원인이었고
성공은 경험을 통해 리스크를 필터하여 가능성을 높였던 것이다.
많은 경험을 원한다면 책을 읽자!!!!
앞으로 행복하고 즐거운 인생을 살기를 바란다면... ^^
ps : 반성하며 살자라고 이야기를 매번했지만 잃어버린다.. 정말정말 앞으론 그러지말자..
[UNIX] vim 인코딩 변경
fenc, enc 등을 설정해도 한글이 깨져보이는 경우가 있다.
이땐
:set ++enc=euc-kr
을 하면 잘 보인다..
전체적으로 vim 에서 인코딩 옵션들이 어떻게 동작하는지 정리해야한다.
지금은 급하니 스킵.
출처 : http://kldp.org/node/45359
한글이 UTF-8로 인코딩된 경우가 있는 데이타파일을
가끔 열때가 있죠. 이때 아래의 방법으로 제대로 볼 수 있습니다.
set tenc=korea
set enc=utf-8
tenc는 termencoding 값을 설정하는것이고
enc는 encoding 값을 설정하는 겁니다.
.vimrc에
set fileencodings=utf-8,euc-kr
만 하면 자동으로 utf-8인지 euc-kr인지 자동판별해서
fileencoding 값을 정해 줍니다
저장하면 새파일이면 터미널의 인코딩대로 저장되고
있던파일이면 원래 파일 인코딩대로 저장됩니다
만약 인코딩을 바꾸려면
:set fileencoding=utf-8
:w
하면 utf-8로 바뀌어서 저장됩니다.
반대 경우도 마찬가지..
출처는 아래와 같습니다 ~
http://vany.tistory.com/trackback/218
먼저 브니군이 작성했던 내용을 약간 가다듬으면(?) 다음과 같다.
set fileencodings=ucs-bom,utf-8,cp949,euc-kr,latin1
if v:lang =~ "utf8$" || v:lang =~ "UTF-8$"
set termencoding=utf-8
else
set termencoding=cp949
endif
위의 내용을 설명하면 이렇다.
우선 Vim 내부적으로 사용되는 인코딩을 utf-8으로 설정한다.
그리고 읽어들인 파일의 인코딩을 ucs-bom,utf-8,cp949,euc-kr,latin1 순서로 검사해서 자동으로 설정한다.
lang 변수에 설정된 인코딩 정보를 확인해서 utf-8인 경우에는 터미널 인코딩을 utf-8으로 설정하고,
그 밖의 경우에는 터미널 인코딩을 cp949로 설정한다.
set termencoding=utf-8
else
set termencoding=cp949
endif
vim 실행 후에 다음과 같이 입력해서 현재 인코딩 상황을 살펴볼 수 있다.
너무 기니까 줄여서 다음과 같다.
.vimrc에 위에서 소개한 내용을 넣어두면, 대부분의 상황에서 인코딩 설정이 자동으로 잘 잡힌다.
대부분 잘 된다는 말은, 물론 잘 안 되는 경우도 있다는 얘기다.
파일 내용 중에 깨진 문자가 들어 있는 경우에, 파일 인코딩이 잘못 검출이 되는 경우가 있다.
(본인은 mysql dump data를 vim으로 열어보다가 이와 같은 경우를 당한 적이 있다.)
이런 경우의 대처법은 이렇다.
예를 들어, 사실은 utf-8 인코딩이 맞는데 깨진 문자 때문에 latin1 인코딩으로 검출(fenc=latin1)되었다고 하자.
이 상태에서 강제로 utf-8으로 바로잡아준답시고 아래와 같이 하면..
즉, 사실은 utf-8 문서인데.. 이 문서에다가 cp949에서 utf-8으로 변환하는 로직을 돌려버린다는 것이다.
따라서 원하지 않게 문서가 수정된 상태가 되고, 만약 이 상태로 문서를 편집하거나 저장하면 완전히 맛이 가는 상황이 되는 것이다.
그렇다면 어떻게 하느냐?
vim의 ++opt argument를 사용하면 된다. 즉, 위와 같은 상황에서는 아래와 같이 하면..
문서는 수정되지 않은 상태로 보이며, utf-8 문자들은 정상적으로 보이게 된다.
이 상태에서 문서를 편집하면 되는 것이다.
오늘도 빨래 끝~ +_+
[출처] 인코딩과 한글 입출력 :set enc? fenc? tenc?|작성자 월드
[UNIX] ps aux 결과에 대한 설명
PID : Process ID
%CPU : 현재 해당 프로세스의 CPU 사용률
%MEM : 사용된 메모리의 추정치
VSZ : 현재 사용중인 가상메모리 또는 페이지. (KByte)
RSS : 현재 사용중인 Real 메모리 (KByte)
TTY : 현재 사용중인 process의 소유자가 사용중인 터미널 포트
S : 현재 프로세스의 STAT(상태)
-----------------------------------------------------------
R - running 중인 상태
S - sleeping중인 상태
I - intermediate상태
T - Signal 의 영향으로 중지된 상태
X - 메모리가 wait중인 상태
Z - 좀비 프로세서
-----------------------------------------------------------
START : process 시작 시간
TIME : 총 사용된 CPU time
COMMAND : 실행된 명령어의 이름
[MAC] root 권한
[UNIX] bash
Bash 입문자를 위한 기본적인 문법과 알고 있으면 좋은 것들만 정리했다.
(이런 것도 있구나 싶을 정도만 이해하도록 간단한 설명과 예제로 작성됨)
첫 시작은 문자 출력하기(Hello World)
고전적이지만 "hello world" 단순 출력부터 시작해보자.
파일명은 hello.sh
로 만들고 실행해보자. 단 두줄이면 끝이다.
(만일 실행이 안된다면 퍼미션을 변경해야되는데 뭔지 모르겠다면 일단 이렇게 해봐라.chmod 700 hello.sh
)
참고: echo
문장을 출력하는데 자동으로 줄바꿈 됨
참고: printf
C언어와 비슷함
#!/usr/bin/env bash
echo "hello world"
printf "hello world"
printf "%s %s" hello world
주석(Comments)
#
기호로 시작하면 주석이다.
함수(Function)
형식은 다른 언어와 차이는 없다. 그러나 function
는 생략해도 된다.
함수 명을 쓰면 함수가 호출이 되는데 주의할 것은 호출 코드가 함수 코드보다 반드시 뒤에 있어야 된다. 함수 코드 보다 앞에서 호출 시 오류가 발생한다.
string_test() {
echo "string test"
}
function string_test2() {
echo "string test 2"
echo "인자값: ${@}"
}
string_test
string_test2
# 함수에 인자값 전달하기(공백의로 뛰어서 2개의 인자값을 넘김)
string_test2 "hello" "world"
변수(Variable)
변수 사용시에는 "=" 기호 앞뒤로 공백이 없이 입력하면 대입연산자가 된다.
그리고 선언된 변수는 기본적으로 전역 변수(global variable)다. 단 함수 안에서만 지역 변수(local variable)를 사용할 수 있는데 사용할려면 변수 명 앞에 local
을 붙여주면 된다.
그런데 전역 변수는 현재 실행된 스크립트 파일에서만 유효하다. 자식 스크립트에서는 사용 할 수 없는 변수다.
변수 명 앞에 export
을 붙여주면 환경 변수(environment variable)로 설정되어 자식 스크립트에서 사용 가능하다.
환경 변수 사용시 예약 변수(reserved variable)에 주의하자.(참고로 환경 변수는 .bash_profile
에서 정의한다.)
# 전역 변수 지정
string="hello world"
echo ${string}
# 지역 변수 테스트 함수
string_test() {
# 전역 변수와 동일하게 사용함. 만약 local 뺀다면 전역 변수에 덮어씌어지게 됨
local string="local"
echo ${string}
}
# 지역 변수 테스트 함수 호출
string_test
# 지역 변수 테스트 함수에서 동일한 변수 명을 사용했지만 값이 변경되지 않음
echo ${string}
# 환경 변수 선언
export hello_world="hello world..."
# 자식 스크립트 호출은 스크립트 경로을 쓰면된다.
/home/export_test.sh
#환경 변수를 테스트하기 위해 export_test.sh 파일을 만들고 선언한 변수를 확인해본다.
echo ${hello_world}
예약 변수(Reserved Variable)
문자 | 설명 |
---|---|
HOME | 사용자의 홈 디렉토리 |
PATH | 실행 파일을 찾을 경로 |
LANG | 프로그램 사용시 기본 지원되는 언어 |
PWD | 사용자의 현재 작업중인 디렉토리 |
FUNCNAME | 현재 함수 이름 |
SECONDS | 스크립트가 실행된 초 단위 시간 |
SHLVL | 쉘 레벨(중첩된 깊이를 나타냄) |
SHELL | 로그인해서 사용하는 쉘 |
PPID | 부모 프로세스의 PID |
BASH | BASH 실행 파일 경로 |
BASH_ENV | 스크립트 실행시 BASH 시작 파일을 읽을 위치 변수 |
BASH_VERSION | 설치된 BASH 버전 |
BASH_VERSINFO | BASH_VERSINFO[0] ~BASH_VERSINFO[5] 배열로 상세정보 제공 |
MAIL | 메일 보관 경로 |
MAILCHECK | 메일 확인 시간 |
OSTYPE | 운영체제 종류 |
TERM | 로긴 터미널 타입 |
HOSTNAME | 호스트 이름 |
HOSTTYPE | 시스템 하드웨어 종류 |
MACHTYPE | 머신 종류(HOSTTYPE 과 같은 정보지만 조금더 상세하게 표시됨) |
LOGNAME | 로그인 이름 |
UID | 사용자 UID |
EUID | su 명령에서 사용하는 사용자의 유효 아이디 값(UID 와 EUID 값은 다를 수 있음) |
USER | 사용자의 이름 |
USERNAME | 사용자 이름 |
GROUPS | 사용자 그룹(/etc/passwd 값을 출력) |
HISTFILE | history 파일 경로 |
HISTFILESIZE | history 파일 크기 |
HISTSIZE | history 저장되는 개수 |
HISTCONTROL | 중복되는 명령에 대한 기록 유무 |
DISPLAY | X 디스플레이 이름 |
IFS | 입력 필드 구분자(기본값: - 빈칸) |
VISUAL | VISUAL 편집기 이름 |
EDITOR | 기본 편집기 이름 |
COLUMNS | 현재 터미널이나 윈도우 터미널의 컬럼 수 |
LINES | 터미널의 라인 수 |
LS_COLORS | ls 명령의 색상 관련 옵션 |
PS1 | 기본 프롬프트 변수(기본값: bash\$ ) |
PS2 | 보조 프롬프트 변수(기본값: > ), 명령을 "\"를 사용하여 명령 행을 연장시 사용됨 |
PS3 | 쉘 스크립트에서 select 사용시 프롬프트 변수(기본값: #? ) |
PS4 | 쉘 스크립트 디버깅 모드의 프롬프트 변수(기본값: + ) |
TMOUT | 0 이면 제한이 없으며 time 시간 지정시 지정한 시간 이후 로그아웃 |
위치 매개 변수(Positional Parameters)
문자 | 설명 |
---|---|
$0 | 실행된 스크립트 이름 |
$1 | $1 $2 $3...${10} 인자 순서대로 번호가 부여된다. 10번째부터는 "{}"감싸줘야 함 |
$* | 전체 인자 값 |
$@ | 전체 인자 값($* 동일하지만 쌍따옴표로 변수를 감싸면 다른 결과 나옴) |
$# | 매개 변수의 총 개수 |
특수 매개 변수(Special Parameters)
문자 | 설명 |
---|---|
$$ | 현재 스크립트의 PID |
$? | 최근에 실행된 명령어, 함수, 스크립트 자식의 종료 상태 |
$! | 최근에 실행한 백그라운드(비동기) 명령의 PID |
$- | 현재 옵션 플래그 |
$_ | 지난 명령의 마지막 인자로 설정된 특수 변수 |
매개 변수 확장(Parameter Expansion)
아래 예를 테스트하기 위한 변수: string="abc-efg-123-abc"
문자 | 설명 |
---|---|
${변수} | $변수 와 동일하지만 {} 사용해야만 동작하는 것들이 있음(예: echo ${string} ) |
${변수:위치} | 위치 다음부터 문자열 추출(예: echo ${string:4} ) |
${변수:위치:길이} | 위치 다음부터 지정한 길이 만큼의 문자열 추출(예: echo ${string:4:3} ) |
${변수:-단어} | 변수 미선언 혹은 NULL일때 기본값 지정, 위치 매개 변수는 사용 불가(예: echo ${string:-HELLO} ) |
${변수-단어} | 변수 미선언시만 기본값 지정, 위치 매개 변수는 사용 불가(예: echo ${string-HELLO} ) |
${변수:=단어} | 변수 미선언 혹은 NULL일때 기본값 지정, 위치 매개 변수 사용 가능(예: echo ${string:=HELLO} ) |
${변수=단어} | 변수 미선언시만 기본값 지정, 위치 매개 변수 사용 가능(예: echo ${string=HELLO} ) |
${변수:?단어} | 변수 미선언 혹은 NULL일때 단어 출력 후 스크립트 종료,(예: echo ${string:?HELLO} ) |
${변수?단어} | 변수 미선언시만 단어 출력 후 스크립트 종료(예: echo ${string?HELLO} ) |
${변수:+단어} | 변수 선언시만 단어 사용(예: echo ${string:+HELLO} ) |
${변수+단어} | 변수 선언 혹은 NULL일때 단어 사용(예: echo ${string+HELLO} ) |
${#변수} | 문자열 길이(예: echo ${#string} ) |
${변수#단어} | 변수의 앞부분부터 짧게 일치한 단어 삭제(예: echo ${string#a*b} ) |
${변수##단어} | 변수의 앞부분부터 길게 일치한 단어 삭제(예: echo ${string##a*b} ) |
${변수%단어} | 변수의 뒷부분부터 짧게 일치한 단어 삭제(예: echo ${string%b*c} ) |
${변수%%단어} | 변수의 뒷부분부터 길게 일치한 단어 삭제(예: echo ${string%%b*c} ) |
${변수/찾는단어/변경단어} | 처음 일치한 단어를 변경(예: echo ${string/abc/HELLO} ) |
${변수//찾는단어/변경단어} | 일치하는 모든 단어를 변경(예: echo ${string//abc/HELLO} ) |
${변수/#찾는단어/변경단어} | 앞부분이 일치하면 변경(예: echo ${string/#abc/HELLO} ) |
${변수/%찾는단어/변경단어} | 뒷부분이 일치하면 변경(예: echo ${string/%abc/HELLO} ) |
${!단어*}, ${!단어@} | 선언된 변수중에서 단어가 포함된 변수 명 추출(예: echo ${!string*} , echo ${!string@} ) |
배열(Array Variable)
배열 변수 사용은 반드시 괄호를 사용해야 한다.(예: ${array[1]}
)
참고: 1차원 배열만 지원함
# 배열의 크기 지정없이 배열 변수로 선언
# 참고: 'declare -a' 명령으로 선언하지 않아도 배열 변수 사용 가능함
declare -a array
# 4개의 배열 값 지정
array=("hello" "test" "array" "world")
# 기존 배열에 1개의 배열 값 추가(순차적으로 입력할 필요 없음)
array[4]="variable"
# 기존 배열 전체에 1개의 배열 값을 추가하여 배열 저장(배열 복사 시 사용)
array=(${array[@]} "string")
# 위에서 지정한 배열 출력
echo "hello world 출력: ${array[0]} ${array[3]}"
echo "배열 전체 출력: ${array[@]}"
echo "배열 전체 개수 출력: ${#array[@]}"
printf "배열 출력: %s\n" ${array[@]}
# 배열 특정 요소만 지우기
unset array[4]
echo "배열 전체 출력: ${array[@]}"
# 배열 전체 지우기
unset array
echo "배열 전체 출력: ${array[@]}"
변수 타입 지정(Variables Revisited)
Bash 변수는 타입을 구분하지 않고 기본적으로 문자열이다. 단 문맥에 따라서 연산 처리한다.
그런데 불완전한 형태의 declare
, typeset
타입 지정 명령을 지원한다.(두 명령은 동일함)
참고: 코멘트에 있는 다른 문법 사용을 추천한다.
# 읽기 전용
# readonly string_variable="hello world" 문법과 동일 함
declare -r string_variable
# 정수
# number_variable=10 문법과 동일 함
declare -i number_variable=10
# 배열
# array_variable=() 문법과 동일 함
declare -a array_variable
# 환경 변수
# export export_variable="hello world" 문법과 동일 함
declare -x export_variable="hello world"
# 현재 스크립트의 전체 함수 출력
declare -f
# 현재 스크립트에서 지정한 함수만 출력
declare -f 함수이름
논리 연산자(Logical Operators)
문자 | 설명 |
---|---|
&& , -a | 논리 AND |
|| , -o | 논리 OR |
산술 연산자(Arithmetic Operators)
문자 | 설명 |
---|---|
+ | 더하기 |
- | 빼기 |
* | 곱하기 |
/ | 나누기 |
** | 누승(exponentiation), 거듭제곱(power) |
% | modulo 나 mod (정수 나누기에서 나머지 값) |
+= | 상수값 만큼 증가(plus-equal) |
-= | 상수값 만큼 감소(minus-equal) |
*= | 상수값을 곱함(times-equal) |
/= | 상수값으로 나눔(slash-equal) |
%= | 상수값으로 나눈 나머지 값(mod-equal) |
비트 연산자(Bitwise Operators)
문자 | 설명 |
---|---|
<< | 비트 왼쪽 쉬프트(쉬프트 한 번당 2를 곱하는 것과 동일함) |
<<= | left-shift-equal |
>> | 비트 오른쪽 쉬프트(쉬프트 한 번당 2로 나눔) |
>>= | right-shift-equal(<<=와 반대) |
& | 비트 and |
&= | 비트 and-equal |
| | 비트 OR |
|= | 비트 OR-equa |
~ | 비트 negate |
! | 비트 NOT |
^ | 비트 XOR |
^= | 비트 XOR-equa |
기타 연산자(Miscellaneous Operators)
문자 | 설명 |
---|---|
, | 콤마 연산자(comma operator), 2개 이상의 산술 연산을 묶어줌 |
정수 비교(Integer Comparison)
문자 | 설명 |
---|---|
-eq | 같음 |
-ne | 같지 않음 |
> , -gt | 더 큼(> 이중 소괄호에서 사용 가능) |
>= , -ge | 더크거나 같음(>= 이중 소괄호에서 사용 가능) |
< , -lt | 더 작음(< 이중 소괄호에서 사용 가능) |
<= , -le | 더 작거나 같음(<= 이중 소괄호에서 사용 가능) |
문자열 비교(String Comparison)
문자 | 설명 |
---|---|
= , == | 같음 |
!= | 같지 않음 |
< | ASCII 알파벳 순서에 더 작음 |
> | ASCII 알파벳 순서에서 더 큼 |
-z | 문자열이 NULL, 길이가 0인 경우 |
-n | 문자열이 NULL이 아님 |
${변수} | 문자열이 NULL이 아님 |
파일 비교(File test operators)
문자 | 설명 |
---|---|
-e | 파일이 존재 |
-f | 파일이 존재하고 일반 파일인 경우(디렉토리 혹은 장치파일이 아닌 경우) |
-s | 파일이 존재하고 0보다 큰 경우 |
-d | 파일이 존재하고 디렉토리인 경우 |
-b | 파일이 존재하고 블록장치 파일인 경우 |
-c | 파일이 존재하고 캐릭터 장치 파일인 경우 |
-p | 파일이 존재하고 FIFO인 경우 |
-h | 파일이 존재하고 한 개 이상의 심볼릭 링크가 설정된 경우 |
-L | 파일이 존재하고 한 개 이상의 심볼릭 링크가 설정된 경우 |
-S | 파일이 소켓 디바이스인 경우 |
-t | 파일이 디스크립터가 터미널 디바이스와 연관이 있음 |
-r | 파일이 존재하고 읽기 가능한 경우 |
-w | 파일이 존재하고 쓰기가 가능한 경우 |
-x | 파일이 존재하고 실행 가능한 경우 |
-g | 파일이 존재하고 SetGID가 설정된 경우 |
-u | 파일이 존재하고 SetUID가 설정된 경우 |
-k | 파일이 존재하고 스티키 비트(Sticky bit)가 설정된 경우 |
-O | 자신이 소유자임 |
-G | 그룹 아이디가 자신과 같음 |
-N | 마지막으로 읽힌 후에 변경 됐음 |
file1 -nt file2 | file1 파일이 file2 파일보다 최신임 |
file1 -ot file2 | file1 파일이 file2 파일보다 예전것임 |
file1 -ef file2 | file1 파일과 file2 파일이 같은 파일을 하드 링크하고 있음 |
! | 조건이 안 맞으면 참(예: ! -e file ) |
반복문(for, while, until)
반목문 작성 시 아래 명령어(흐름제어)을 알아두면 좋다.
반복문을 빠져 나갈때: break
현재 반복문이나 조건을 건너 뛸때: continue
# 지정된 범위 안에서 반복문 필요 시 좋음
for string in "hello" "world" "..."; do;
echo ${string};
done
# 수행 조건이 true 일때 실행됨 (실행 횟수 지정이 필요하지 않은 반복문 필요 시 좋음)
count=0
while [ ${count} -le 5 ]; do
echo ${count}
count=$(( ${count}+1 ))
done
# 수행 조건이 false 일때 실행됨 (실행 횟수 지정이 필요하지 않은 반복문 필요 시 좋음)
count2=10
until [ ${count2} -le 5 ]; do
echo ${count2}
count2=$(( ${count2}-1 ))
done
조건문(if...elif...else...fi)
조건문 작성 시 주의해야될 부분은 실행 문장이 없으면 오류 발생함
string1="hello"
string2="world"
if [ ${string1} == ${string2} ]; then
# 실행 문장이 없으면 오류 발생함
# 아래 echo 문장을 주석처리하면 확인 가능함
echo "hello world"
elif [ ${string1} == ${string3} ]; then
echo "hello world 2"
else
echo "hello world 3"
fi
# AND
if [ ${string1} == ${string2} ] && [ ${string3} == ${string4} ]
..생략
# OR
if [ ${string1} == ${string2} ] || [ ${string3} == ${string4} ]
..생략
# 다중 조건
if [[ ${string1} == ${string2} || ${string3} == ${string4} ]] && [ ${string5} == ${string6} ]
..생략
선택문(case)
정규식을 지원하며 |
기호로 다중 값을 입력 가능하며 조건의 문장 끝에는 ;;
기호로 끝을 표시한다.
참고: 대문자와 소문자는 다른 문자다.
# case문 테스트를 위한 반복문
for string in "HELLO" "WORLD" "hello" "world" "s" "start" "end" "etc"; do
# case문 시작
case ${string} in
hello|HELLO)
echo "${string}: hello 일때"
;;
wo*)
echo "${string}: wo로 시작하는 단어 일때"
;;
s|start)
echo "${string}: s 혹은 start 일때"
;;
e|end)
echo "${string}: e 혹은 end 일때"
;;
*)
echo "${string}: 기타"
;;
esac
# //case문 끝
done
디버깅(Debugging)
간단하게는 echo
, exit
명령나 tee
명령어로 디버깅한다.
다른 방법으로 실행 시 옵션을 주거나 코드에 한줄만 추가하면 해볼수 있다.
Bash 옵션(스크립트 실행 시) | set 옵션(스크립트 코드 삽입) | 설명 |
---|---|---|
bash -n | set -n , set -o noexec | 스크립트 실행없이 단순 문법 오류만 검사(찾지 못하는 문법 오류가 있을수 있음) |
bash -v | set -v , set -o verbose | 명령어 실행전 해당 명령어 출력(echo ) |
bash -x | set -x , set -o xtrace | 명령어 실행후 해당 명령어 출력(echo ) |
set -u , set -o nounset | 미선언된 변수 발견시 "unbound variable" 메시지 출력 |
마무리하며
- 여기서 인자(argument)와 매개변수(parameter)는 이름만 다를 뿐 의미는 같다.
- Bash는 공백에 민감하다.
- 변수 사용은 생각하지 말고
${변수}
이렇게 쓰자.
함께보기
[javascript] 변수 선언 확인
[기타] outlook 2010 pst 파일 복구
outlook 2000 에서 2010 으로 파일 메일 이동후 pst 파일깨짐
1. 윈도우 탐색기를 열어 "C:\Program Files\Microsoft Office\Office14" 위치에서"SCANPST.EXE" 파일을 더블클릭
2. [찾아보기] 단추를 눌러 복구할 PST 파일을 선택한 후 [시작] 단추를 클릭
3. 받은 편지함에 대한 오류에 대한 메시지 창이 표시되면 정보를 확인한 후 [복구] 단추를 클릭
4. 복구가 완료되면 [확인] 단추를 클릭한 후 아웃룩을 다시 실행
위와 같이 했음에도 안되넹.. ㅡㅡ;;;
2000 으로 재 실행하였음.
추가정보 : 2000 의 scanpst.exe 의 위치는 C:\Program Files\Common Files\System\Mapi\1042\NT 에 있다.
[UNIX] '/etc/security/limits.conf' 설정
[UNIX] cron 등록시 유의점
크론은 기본적으로 환경변수를 상속 받지 않는다..
그래서 환경변수를 사용하기 위해서는 기본쉘(/bin/sh) 로 한번더 랩핑을 하거나 shell script 로 코딩을 한다.
그래서 php 로 만든 스크립트내에서 환경 변수를 사용하고 이를 크론에 등록할시엔
반드시 쉘로 랩핑을 해주어야함.
아래는 등록 및 코딩 예입니다.
*/1 * * * * * /home/tmp/aa.sh
---------- /home/tmp/aa.sh -----------
1 #!/bin/sh
2 HOSTNAME=`/bin/hostname`
3 export HOSTNAME
4 /home/tmp/aa.php
----------// /home/tmp/aa.sh -----------
---------- /home/tmp/aa.php -----------
#!/home/bin/www/php -q
<?php
$szHostnameStr = $_SERVER['HOSTNAME'];
if($szHostnameStr == "umdooserver") { echo "개발서버"; } else { echo "실서버"; }
?>
----------// /home/tmp/aa.php -----------
[HTML] scrollHeight,clientHeight.. 의 정확한 의미
막상 캡쳐하고 나니 화질이 구림..
검색해도 의미가 다들 모호해서(영어도 딸리고) 삽질을 해서 명확한 의미를 알았다.
scrollHeight : 객체 내용의 높이
offsetHeight : border 를 포함한 객체 높이
clientHeight : border 및 스크롤바를 제외한 객체 높이
이것들이 참 글로 표현하기 힘든데 특히 가장 힘든건 'scrollHeight' 이다
내용이 늘어나면 offsetHeight 보다 더 커지기도 한다.(당연한 거긴 하지만..)
다른곳에선 큰 그림만을 예제로 들고 있어서 이해하기기 어려웠다..
가장 빠른 이해는 직접 해보는거다~~~~~ ^^
[lang] stl, mfc, atl 등에서 사용되는 타입케스팅 관련 링크
stl,mfc,atl 등에서 데이터 타입이 제각각인지라
어플 <-> 웹 간에 데이터를 주고 받을때 케스팅이 필요한 경우가 있더라~
com 의 경우도 마찬가지이고. ㅠㅠ
변환방법을 찾다가 얻은 링크들이다..
LPSTR,LPCSTR,LPTSTR,LPWSTR,LPCWSTR 정보링크 : http://blog.naver.com/kkan22/80050248215
BSTR 사용 정보 링크 : http://blog.naver.com/noforest/70028493852
char*, wchar_t*, _bstr_t, CComBSTR, CString, basic_string, System.String 변환 :
[MySQL] unload 셈플
매번 찾게 된다.. 찾을때 마다 시간낭비.. ㅜㅜ
SELECT DATE_FORMAT(regist_date, '%Y-%m-%d'),count(id_or_ip)
FROM foo_tbl
WHERE regist_date > '2008-10-31 23:59:59' AND is_stop = 'Y'
GROUP BY DATE_FORMAT(regist_date, '%Y-%m-%d')
INTO OUTFILE '/tmp/foo.unl'
FIELDS TERMINATED BY '|'
LINES TERMINATED BY '\n';
머리 나쁘면 개고생~~~
[UNIX] zterm 터미널에서 디렉토리 색깔 변경
'ls' 를 날려보면
OTL
눈이 아플 정도로 디렉토리 색깔이 너무 파랗다~
그래서 설정을 변경해 보았다..
# cp /etc/DIR_COLORS.xterm ~/.dir_colors
복사후 vi 로 .dir_colors 파일을 편집해보자..
뚜껑을 열고 42라인 정도로 이동하면 아래와 같이 나온다..
# Below are the color init strings for the basic file types. A color init
# string consists of one or more of the following numeric codes:
# Attribute codes:
# 00=none 01=bold 04=underscore 05=blink 07=reverse 08=concealed
# Text color codes:
# 30=black 31=red 32=green 33=yellow 34=blue 35=magenta 36=cyan 37=white
# Background color codes:
# 40=black 41=red 42=green 43=yellow 44=blue 45=magenta 46=cyan 47=white
NORMAL 00 # global default, although everything should be something.
FILE 00 # normal file
#DIR 00;34 # directory <--- 기본설정
DIR 01;31 # directory
LINK 00;36 # symbolic link
FIFO 40;33 # pipe
SOCK 00;35 # socket
BLK 40;33;01 # block device driver
CHR 40;33;01 # character device driver
ORPHAN 01;05;37;41 # orphaned syminks
MISSING 01;05;37;41 # ... and the files they point to
위와 같이 변경후 터미널을 재 접속하면.. .두둥...
당신의 눈은 훨씬편해져 있을 것이다~~ ^^
[Server] Apache Configure 옵션
Apache 2.2.8 Option
==========================================================================================
OPTIM="-O3 -march=i686 -funroll-loops -fomit-frame-pointer" \
CFLAGS="-DDYNAMIC_MODULE_LIMIT=256" \
./configure \
--prefix=/home/dvlp \
--enable-so \
--enable-rewrite=shared \
--enable-expires=shared \
--enable-asis=shared \
--enable-auth_basic \
--enable-authn_file=shared \
--enable-authn_default=shared \
--enable-authz_groupfile=shared \
--enable-authz_user=shared \
--enable-authz_host \
--enable-authz_default=shared \
--enable-ssl=shared \
## 아래옵션은 선택사양
#--enable-echo=shared ## 디버깅시 필요
==========================================================================================
PHP
==========================================================================================
OPTIM="-O3 -march=i686" \
./configure \
--prefix=/home/dvlp \
--enable-track-vars \
--with-apxs2=/home/dvlp/bin/apxs \
--with-mysql \
--without-xml \
--without-pear
==========================================================================================
httpd.conf 에 아래 추가==========================================================================================
<IfModule php4_module>
AddType application/x-httpd-php .php .cgi .inc .html
AddType application/x-httpd-php-source .phps
</IfModule>
==========================================================================================
후속버젼
SERVER_ROOT="/install_path"
SERVER_DOC_ROOT="/install_path/www"
OPTIM="-O3 -march=i686 " ./configure \
--prefix=$SERVER_DOC_ROOT \
--libexecdir=$SERVER_ROOT/modules \
--exec-prefix=$SERVER_ROOT \
--includedir=/install_path/include \
--disable-cgi \
--enable-so \
--enable-info \
--enable-rewrite \
--enable-vhost-alias \
--enable-mods-shared=most
DSO 모듈을 빼려고 위와 같이 컴파일 하였으나 httpd.conf 상의 SERVER_ROOT 를 변경하니 SERVER_ROOT/modules 에서 찾음
결론은 저 옵션은 의미없다....
====== 기본 모듈 리스트 =======
core.c
mod_access.c
mod_auth.c
mod_include.c
mod_log_config.c
mod_env.c
mod_setenvif.c
prefork.c
http_core.c
mod_mime.c
mod_status.c
mod_autoindex.c
mod_asis.c
mod_info.c
mod_vhost_alias.c
mod_negotiation.c
mod_dir.c
mod_imap.c
mod_actions.c
mod_userdir.c
mod_alias.c
mod_rewrite.c
mod_so.c
주의사항
아래는 apache 2.2.* 버전 이상에서 configure 실행시 발생하는 이벤트이다.
========================================================================================================
checking for APR version 1.2.0 or later... yes
checking for APR-util version 1.2.0 or later... no
configure: error: APR-util version 1.2.0 or later is required</PRE>
========================================================================================================
시스템에 apr 과 apr-util 1.0 또는 1.1 이 설치되어 있기 때문에 apr 1.2 를 수동 설치하고 아래와 같은 옵션으로 configure 실행
아파치 소스로 이동 후 아래 실행
>$ cd srclib/apr ; ./configure ;make
>$ cd srclib/apr-util ; ./configure --with-apr=../apr ;make
아파치 소스 루트로 돌아와 아래 옵션 추가후 실행
>$ ./configure --with-apr=srclib/apr
--with-apr-util=srclib/apr-util
* apr 한글화 해주실분 없나요?? 굽신굽신. ㅜㅡ