공백제거 먹고살기/Unix 2014. 3. 21. 13:04

sed -i -e 's/\r$//' install.sh

'먹고살기 > Unix' 카테고리의 다른 글

쉘 스크립트  (0) 2011.06.30
리눅스 실무 명령어  (0) 2011.04.29
리눅스 명령어  (0) 2011.04.29

VMware에 CentOs 를 설치하고 언어 한글로 바꾸니까 모두 깨질때

한글 폰트 설치되지 않아서 깨질수 있따.

1. 한글 설치 하기

- yum install kde-i18n-Korean

- yum install fonts-korean

2.  한글 폰트 적용 하기

- fc-cache

- fc-cache -frv

 


===========================================================
* read : 쉘스크립트파일에서 커맨드라인 입력받기

스크립트파일 안에서
read
커맨드라인에서
aaa<Enter>
다시 스크립트파일로
aaa가 들어온다.

!!! 그러면, 여러줄을 입력받으려면?
read로 스크립트파일에서 탈출하여 커맨드라인으로 간 상태서...
aaa\<Enter>
bbb\<Enter>
ccc<Enter>
하면...
스크립트파일로 aaa bbb ccc가 들어온다.

===========================================================
* eval : 쉘스크립트파일안에서 쉘명령 실행

스크립트파일안에서 문자열로 표기된 쉘명령을 실행하려면 eval을 사용해야함.
ex) 스크립트파일 안
eval "ls -al"

===========================================================
* echo와 escape(\:backslash,'':quote) : 문자열, 출력

echo 뒤 문자열은 구지 ""로 감쌀 필요없다.
ex) a=하하하
echo 호호호 $a
echo "호호호 "$a
echo "호호호 $a"
*** 다 똑같은 결과

echo의 기본옵션은 특수문자(앞에 /백슬래쉬를 붙임)에 대해 escape시킨다.
ex) echo "aaa\nbbb"
aaa\nbbb
이를 제대로 처리(해석)하려면 -e 옵션(/을 해석함)을 준다.
ex) echo -e "aaa\nbbb"
aaa
bbb
다시 특수문자를 escape시키려면 -E 옵션을 준다.
ex) echo -E "aaa\nbbb"
aaa\nbbb

-n : 스크립트파일에서 echo를 호출할 때마다 새로운 라인이 생성되어 출력되는데 이를 막고, 바로전 출력된 라인에 붙여 출력한다.(커맨드모드에선 먹지않는다.)

*** 변수값을 출력하지않고 변수명을 그대로 출력하려면?
-> ''(single quote)를 사용한다.
ex) a=aaa
echo '하하하 $a'
하하하 $a

*** ''은 모든 것을 다 escape 시키기에 full quoting이라 하고
""은 $와 같은 몇몇 제어문자는 해석하기에 partial quoting이라한다.

!!!주의) 본쉘(bin/sh) 스크립트파일에서 문자열은 개행문자(\n)없어도 파일라인상으로 그대로 읽어 처리하나, bash에서는 스크립트파일안 문자열을 개행시키려면 반드시 개행문자(\n)를 삽입해야하고 더불어 커맨드라인 상에서 제대로 표시하기위해 공백까지 제거시켜야한다(\r\n).


<tip3013> ``(backquote) : 명령어치환(Command Subsitution) [제어문자]

문자열안에 들어있는 쉘명령어를 문자열로 인식하지않고 쉘명령어로 재해석한다.
ex) echo `cat file1` #역따옴표(backquote)임에 유의!!!

*** 스크립트파일 매개변수나 read인자로 특정 명령구문을 넘길 때 유용하다.
===========================================================
* if

if [ ... ]; then #if,then을 같은줄에 쓰려면 꼭꼬 ;로 구분해라!
...
fi

if [ ... ]; then
...
elif [ ... ];then
...
else
...
fi

* test, [ ] :
- test는 조건을 판별하여 0(true)/1(false)를 반환한다.
- test는 쉘 내장명령이며, []은 이것의 또다른 표기법이다.
- test는 보통 독립적으로 쓰이지않고,
     if, case, while 등의 뒤에 붙어 조건을 판별한다.

주의!!!) [ ] 은 그 사이사이를 반드시 공백으로 띄어야한다.
[ ]을 제어문자가 아닌 하나의 명령어로 이해할 것!!!

- test는 크게 다음과 같은 3가지를 판별한다.
1)스트링
2)산술식(Interger)
3)파일

- test는 다음과 같은 이진연산자를 인자로 갖는다.

A A는 true
!A A가 아니면 true
A -a B(&&) A이고 B이면 true
A -o B(||) A이거나 B이면 true

-- string 비교시 쓰이는 연산자
A == B A와 B가 같으면 true
A != B A와 B가 다르면 true
-n A A가 not null이면 true
-z A A가 null이면 true

-- integer only 연산자
A -eq B A==B
A -ne B A!=B
A -ge B A>=B
A -gt B A>B
A -le B A<=B
A -lt B A<B
*** =,>,<,!등을 써도되나 주로 스트링비교연산자로 쓰이므로
   산술비교 시는 되도록 전자의 표기법을 따라라.

-- file only 연산자
A -ef B 동일파일
A -nt B A가 최신파일(newer modification data)
A -ot B A가 오래된파일(older ..)
-e A 파일이 있다
-s A 파일크기가 0이 아님(내용있음)
-d A directory임
-f A file임
-h(or L) A Symbolic Link
-r A 현재 사용자가 r권한 갖고 있음.
-w A .. .. ..   w .. .. ..
-x A .. .. ..   x .. .. ..
-O A 내가 소유자임
-G A Group이 같음
-N A (내가) 마지막으로 읽은 후에 변경
--------여기까지만...밑에는 잘 모르겠다-------------
-S A Scoket
-p A PIPE
-b A block device(플로피,씨디롬 등 마운트객체)
-c A character special(키보드,모뎀,사운드카드등 장치)
-g A set-group-id(sgid) flag가 설정된 파일
-u A set-user-id(suid) flag가 설정된 파일
-k A has its stick bit set
-t A file descriptor가 terminal device와 관계됨.


ex)
a=하하하
b=히히히
if [ $a!=$b ]; then # [ ] 사이 공백이 있어야함에 주의!
# then을 이어서 쓸 때 앞명령과 ;로 구분함에 주의!
echo "a is not b"
else
echo "a is b"
fi

c= # 이렇게 하면 변수c는 null값을 가진다.
if [ -z $c ]; then echo "c is null"; fi

a=3
b=10
if [ $a -gt $b ]; then
echo "a is greater then b"
else
echo "a is less then b";
fi

touch 빈파일
if [ -e "빈파일" ];then echo "file is exist!"; fi
if [ -s "빈파일" ];then echo "file size is zero"; fi



===========================================================
* case

case $변수 in
값1 ) 처리1;;
값2 ) 처리2;;
값3 ) 처리3;;
...
* ) default처리;;
esac

ex)
case $( arch ) in
i386 ) echo 80386;; #;; 두번들어감에 유의!!!
i486 ) echo 80486;;
i586 ) echo pentium;;
i686 ) echo pentium3;;
* ) echo "몰라! 이상한 머신이야..."
esac


===========================================================
* while

while [ ... ];do
...
done

ex)
i=0
while [ $i -lt 10 ];do
echo $i
i=$((i+1))
sleep 0.2
done


===========================================================
* for

*** for문은 반복횟수가 많아지면 불편하다. while문 써라.

ex)
for i in 1 2 3 4 5; do
echo $i
sleep 0.2
done