반응형

RPM의 개요

출처 : 대전 국제 IT 교육 센터 정성재 강사

1. RPM이란?

(1) 개요: RedHat Package Manager의 약어로 프로그램등을 설치할 때 사용하는 방법이며

          Red Hat사에서 제안하였다. rpm은 유닉스계열의 일반적인 설치방법인 소스방법에

          비해 쉬운 설치를 지원하지만 설치되는 디렉토리의 변경이 불가능 하다. 설치된

          디렉토리나 실행명령 등은 설치후 질의를 통해 확인해야 한다. 

(2) 파일의구조

 1)기본구조

     패키지이름-버전-릴리즈.아키텍처.rpm

 2)구성설명

http://se.uzoogom.com/88

URL 추가


반응형
반응형


리눅스 netcat 설치 방법

Radhat 사용한다면

www.rpmfind.net/ 에 가서 'nc'로 검색하면 rpm 패키지가 검색 될 것이다. 

http://www.rmpfind.net/linus/rpm2html/search.php?query=nc

(Redhat 9.0 쓴다면 이걸로)

ftp://216.254.0.38/linux/redhat/9/en/os/i386/RedHat/RPMS/nc-1.10-18.i386.rpm

설치 방법은 rpm -ivh 하면 설치 됩니다. 

rpm -ivh nc-1.10-18.i386.rpm 

하면 된다.

반응형
반응형

리눅스에서 열려 있는 포트를 확인 하는 방법

열려있는 모든 포트 표시하기 

netstat -nap

n:host 명으로 표시 안함

a: 모든소켓 표시

p: 프로세스 ID와 프로그램명 표시

특정 ip 포트 확인 하기

netstat -nap | grep [아이피]:[포트]


반응형
반응형

Web.xml의 개유, 기능, 활용

1. 개요

web.xml이란?

Web Application의 Deploment Descriptor (환경 파일: 배포 서술자, DD파일)로서 xml 형식의 파일

모든 Web application은 반드시 하나의 Web.xml 파일을 가져야 함

위치 : WEB-INF 폴더 아래 

web.xml 파일 의 설정들은 Web application 시작시 메모리에 로딩됨

반응형
반응형

DB 연결 툴을 사용 하거나 할때 한글이 깨지는 경우가 있어

문자셋을 확인 하는 방법을 적어 본다. 

다음은 오라클 문자셋 확인 쿼리이다. 

select parameter,value from nls_database_parameters

where parameter like '%CHAR%';

PARAMETER                      VALUE

------------------------------ ----------------------------------------

NLS_NUMERIC_CHARACTERS         .,

NLS_CHARACTERSET               US7ASCII

NLS_NCHAR_CONV_EXCP            FALSE

NLS_NCHAR_CHARACTERSET         AL16UTF16



반응형
반응형

리눅스 커널 버전 확인

방법1:

uname -r

(Fedora 11, VM)

[root@zetawiki ~]# uname -r
2.6.30.10-105.2.23.fc11.x86_64

(CentOS 5.7, Xen VM)

[root@zetawiki ~]# uname -r
2.6.18-274.3.1.el5xen

(SUSE Linux Enterprise Server 11, Xen VM)

zetawiki:~ # uname -r
2.6.32.59-0.7-xen

(Ubuntu 12.04.3 LTS)

root@ubuntu:~# uname -r
3.8.0-29-generic
root@ubuntu:~# uname -a
Linux ubuntu 3.8.0-29-generic #42~precise1-Ubuntu SMP Wed Aug 14 16:19:23 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux

방법2:

/proc/version (레드햇 계열)

[root@CentOS64 ~]# cat /proc/version
Linux version 2.6.32-358.el6.x86_64 (mockbuild@c6b8.bsys.dev.centos.org) (gcc version 4.4.7 20120313 (Red Hat 4.4.7-3) (GCC) ) #1 SMP Fri Feb 22 00:31:26 UTC 2013


반응형

'경험치바(Experience Opint Bar)' 카테고리의 다른 글

웹의 기본 web.xml  (0) 2016.02.24
[오라클] 오라클 DB 문자셋 확인 방법  (0) 2016.02.16
리눅스 종류/버전/배포판 확인하기  (0) 2016.01.06
bash 쉘 제어구조  (0) 2015.12.28
bash 쉘 변수  (0) 2015.12.24
반응형

리눅스 배포판의 이름과 버전, 리눅스 커널 버전을 모두 답하는 것이 가장 정확하다

배포판 버전 확인

방법1: 

grep . /etc/*-release

cat /etc/*-release | uniq

(Ubuntu 14.04.3)

root@zetawiki:~# grep . /etc/*-release
/etc/lsb-release:DISTRIB_ID=Ubuntu
/etc/lsb-release:DISTRIB_RELEASE=14.04
/etc/lsb-release:DISTRIB_CODENAME=trusty
/etc/lsb-release:DISTRIB_DESCRIPTION="Ubuntu 14.04.3 LTS"
/etc/os-release:NAME="Ubuntu"
/etc/os-release:VERSION="14.04.3 LTS, Trusty Tahr"
/etc/os-release:ID=ubuntu
/etc/os-release:ID_LIKE=debian
/etc/os-release:PRETTY_NAME="Ubuntu 14.04.3 LTS"
/etc/os-release:VERSION_ID="14.04"
/etc/os-release:HOME_URL="http://www.ubuntu.com/"
/etc/os-release:SUPPORT_URL="http://help.ubuntu.com/"
/etc/os-release:BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"

(CentOS 6.5)

[root@zetawiki ~]# grep . /etc/*-release
/etc/centos-release:CentOS release 6.5 (Final)
/etc/lsb-release:LSB_VERSION=base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-noarch
/etc/redhat-release:CentOS release 6.5 (Final)
/etc/system-release:CentOS release 6.5 (Final)

(Fedora 11 Leonidas)

[root@zetawiki ~]# cat /etc/*-release | uniq
Fedora release 11 (Leonidas)

(Oracle Enterprise Linux Server 5.5)

[root@zetawiki ~]# cat /etc/*-release | uniq
Enterprise Linux Enterprise Linux Server release 5.5 (Carthage)
Red Hat Enterprise Linux Server release 5.5 (Tikanga)

(SUSE Linux Enterprise Server 11)

zetawiki:~ # cat /etc/*-release | uniq
SUSE Linux Enterprise Server 11 (x86_64)
VERSION = 11
PATCHLEVEL = 1
LSB_VERSION="core-2.0-noarch:core-3.2-noarch:core-4.0-noarch:core-2.0-x86_64:core-3.2-x86_64:core-4.0-x86_64"

방법2:

grep . /etc/issue*

(Ubuntu 14.04.3)

root@zetawiki:~# grep . /etc/issue*
/etc/issue:Ubuntu 14.04.3 LTS \n \l
/etc/issue.net:Ubuntu 14.04.3 LTS

(CentOS 6.5)

[root@zetawiki ~]# grep . /etc/issue*
/etc/issue:CentOS release 6.5 (Final)
/etc/issue:Kernel \r on an \m
/etc/issue.net:CentOS release 6.5 (Final)
/etc/issue.net:Kernel \r on an \m

(Fedora 11)

[root@zetawiki ~]# cat /etc/issue
Fedora release 11 (Leonidas)
Kernel \r on an \m (\l)

(Oracle Enterprise Linux 5.5)

[root@zetawiki ~]# cat /etc/issue
Enterprise Linux Enterprise Linux Server release 5.5 (Carthage)
Kernel \r on an \m

(SUSE Linux Enterprise Server 11)

zetawiki:~ # cat /etc/issue
 
Welcome to SUSE Linux Enterprise Server 11 SP1  (x86_64) - Kernel \r (\l).

방법3:

rpm -qa *-release

(CentOS 6.2)

[root@zetawiki ~]# rpm -qa *-release
centos-release-6-2.el6.centos.7.x86_64

(Fedora 11 Leonidas)

[root@zetawiki ~]# rpm -qa *-release
fedora-release-11-1.noarch

(Oracle Enterprise Linux Server 5.5)

[root@zetawiki ~]# rpm -qa *-release
enterprise-release-5-0.0.22

(SUSE Linux Enterprise Server 11)

zetawiki:~ # rpm -qa *-release
sles-release-11.1-1.152
lsb-release-2.0-1.2.18



반응형

'경험치바(Experience Opint Bar)' 카테고리의 다른 글

[오라클] 오라클 DB 문자셋 확인 방법  (0) 2016.02.16
리눅스 커널 버전 확인 방법  (0) 2016.01.06
bash 쉘 제어구조  (0) 2015.12.28
bash 쉘 변수  (0) 2015.12.24
bash 쉘 주석  (0) 2015.12.24
반응형

제어 구조 
제어 구조는 당신의 프로그램을 보다 간결하게 하며프로그램이 결정을 내릴  있게 한다뿐만 아니라더욱 중요한 것은 에러를 체크하도록   있다는 것이다지금까지 우리가  예제는 모두 첫번째라인에서부터 마지막 라인까지 프로그램의 모든 명령을 실행하는 프로그램이었다예를 들면 다음과 같은 방식이다:

#!/bin/bash
cp /etc/foo .
echo "Done."

이것은 bar.sh 작은 프로그램인데/etc/foo 파일을 현재의 디렉토리로 복사하고는 화면에 "Done"이라고 프린트한다 프로그램은  가지 조건 하에서 작동한다/etc/foo라고 하는 파일이 반드시 존재해야만 한다그렇지 않다면 다음과 같은 화면을 보게  것이다:

xconsole$ ./bar.sh
cp: /etc/foo: No such file or directory
Done.

당신이 보듯이문제가 있다당신의 프로그램을 실행하는 모든 사람이 그들의 시스템에 /etc/foo라는 파일을 가지고 있지는 않다그래서 /etc/foo라는 파일이 있는지 체크해서 만일  파일이 있으면 복사하도록 하고그렇지 않다면 끝나도록 당신의 프로그램을 수정하는 편이 좋을 것이다의사 코드(pseudo code)  내용을 나타내면 다음과 같다:

만일 /etc/foo 존재하면,
    /etc/foo 현재 디렉토리로 복사한다
    화면에 "Done." 출력한다.
그렇지 않으면
    화면에 "This file does not exist." 촐력한다
    exit

이것을 bash에서   있을까물론bash 제어 구조에는 ifwhileuntilforcase 있다 구조는 시작을 나타내는 starting tag 끝을 나타내는 ending tag 쌍을 이루고 있다예를 들면if 구조는 if 시작해서 fi 끝난다제어 구조는 당신의 시스템에서 발견되어지는 프로그램이 아니다그것들은 bash 내재된 특성이다이러한 제어 구조를 이용해서단지 시스템의 프로그램만을 이용해서  프로그램을 만드는 것에 그치지 않고 당신 자신만의 고유한 코드를 작성할  있다.

if..then else 다음에...

반응형

'경험치바(Experience Opint Bar)' 카테고리의 다른 글

리눅스 커널 버전 확인 방법  (0) 2016.01.06
리눅스 종류/버전/배포판 확인하기  (0) 2016.01.06
bash 쉘 변수  (0) 2015.12.24
bash 쉘 주석  (0) 2015.12.24
bash 쉘 백업 프로그램  (0) 2015.12.24
반응형

변수
변수는 기본적으로 값들을 담고 있는 "상자"이다당신은 많은 이유로 인해 변수들을 만들고 싶어할 것이다사용자 입력인자들또는 수치 값을 보관하기 위해 변수들이 필요하다다음 짧은 코드를 예로 들자:

#!/bin/bash
x=12
echo "The value of variable x is $x"

여기서  일은x 값을 12 정한 것이다echo "The value of variable x is $x" 이라는 라인은 x 현재 값을 프린트한다변수를 정의할 할당 연산자 "=사이에는 공백 문자가 있으면  된다여기 할당 연산자를 사용하는 문법이 있다:

variable_name=this_value

변수의 값은 변수 이름 앞에 달러 심벌"$" 붙임으로써 얻을  있다위의 예제에서 보듯이x 값을 echo $x  사용해서 얻을  있다.

변수의 타입에는 지역 변수와 환경 변수이렇게  가지가 있다환경 변수들은 시스템에 의해 정해지고 주로 env 명령을 사용해서   있다환경 변수는 특별한 값을 담고 있다예를 들어만일 다음과 같이 입력하면:

xconsole$ echo $SHELL
/bin/bash

현재 사용 중인 쉘의 이름을 얻을  있다환경 변수들은 /etc/profile ~/.bash_profile 안에 정의되어 있다환경 변수이든지지역 변수이든지 현재 변수 값을 체크할  echo 명령이 유용하게 쓰인다여전히 왜변수가 필요한지 이해하지 못하겠다면여기 좋은 예제가 있다:

#!/bin/bash
echo "The value of x is 12."
echo "I have 12 pencils."
echo "He told me that the value of x is 12."
echo "I am 12 years old."
echo "How come the value of x is 12?"

이제 당신은 x 값을 12 대신 8 하기로 결정했다고 하자어떻게 하겠는가? "x is 12"라고 되어 있는 모든 라인을 바꿔야만 한다잠깐 기다려 보라숫자 12 가진 다른 라인들도 있다 라인들도 바꿔야하는가아니다그것들은 x 관련이 없으니 그냥 둔다 복잡한가이제여기 변수를 사용한 것만 제외하면  같은 예제가 있다:

#!/bin/bash
x=12     # 변수 x  12 대입한다 
echo "The value of x is $x."
echo "I have 12 pencils."
echo "He told me that the value of x is $x."
echo "I am 12 years old." echo "How come the value of x is $x?"

여기서우리는 $x 변수 x 현재 , 12 프린트하는 것을   있다그래서 만일 x 값을 8 바꾼다면당신이 해야하는 일은 x=12라고 되어 있는 라인을 x=8 바꾸는 일뿐이다그러면 프로그램은 자동적으로 $x 있는 라인을 12 대신 8 바꾸어 보여  것이다다른 라인은 바뀌지 않는다뒤에서 보겠지만변수는 다른 용도로도 중요하게 사용된다.

반응형

'경험치바(Experience Opint Bar)' 카테고리의 다른 글

리눅스 종류/버전/배포판 확인하기  (0) 2016.01.06
bash 쉘 제어구조  (0) 2015.12.28
bash 쉘 주석  (0) 2015.12.24
bash 쉘 백업 프로그램  (0) 2015.12.24
bash 쉘 명령들  (0) 2015.12.24
반응형

주석 
주석을 달면 코드 읽기가 보다 쉬워진다주석을 단다고 해서 프로그램의 출력에 영향을 주지 않는다코드를 읽는 사람을 위해 주석은 특별히 만들어졌다. bash에서 첫번째 라인(#!/bin/bash) 제외한 모든 주석은 해쉬 심벌("#") 시작한다첫번째 라인은 주석이 아니다첫번째 라인 다음에 오는 "#"으로 시작하는 모든 라인은 주석이다다음의 코드를 보자:

#!/bin/bash
 프로그램은 1부터 10까지 카운트한다:
for i in 1 2 3 4 5 6 7 8 9 10;

do
    echo $i
done

만일 당신이 bash 스크립팅을 모른다고 해도주석 때문에 위의 프로그램이 무엇을 하는지 바로   있다주석을 적절하게 이용하는 것은 좋은 습관이다만일 훗날 당신의 프로그램을 유지 보수할 필요가있다면주석을 달아 놓는 것이 일을 얼마나 편하게 만드는지 알게  것이다.

한글은 가능하면 사용 하지 않는다. 

영어 공부좀 하자

반응형

'경험치바(Experience Opint Bar)' 카테고리의 다른 글

bash 쉘 제어구조  (0) 2015.12.28
bash 쉘 변수  (0) 2015.12.24
bash 쉘 백업 프로그램  (0) 2015.12.24
bash 쉘 명령들  (0) 2015.12.24
bash 쉘 첫번째 프로그램  (0) 2015.12.24
반응형

백업프로그램

보다 유용한 프로그램 ....
이제 우리는 모든 파일을 하나의 디렉토리로 옮기고 디렉토리를 내용물 모두와 함께 지운 다시  디렉토리를 만드는 프로그램을 만들 것이다 작업은 다음의 명령들을 통해 이루어질  있다:

xconsole$ mkdir trash
xconsole$ mv * trash
xconsole$ rm -rf trash
xconsole$ mkdir trash

위의 명령을  상에서 대화식으로 입력하는 대신 프로그램을 작성하자:

#!/bin/bash
mkdir trash
mv * trash
rm -rf trash
mkdir trash
echo "Deleted all files!"

위의 내용을 clean.sh으로 저장하자이제 당신이 해야  일은 clean.sh 실행하는 것뿐이다clean.sh 모든 파일을 trash디렉토리로 옮기고, trash 디렉토리를 삭제하고는 다시 만든 모든 파일이 성공적으로삭제되었다는 메시지까지 출력한다만일 당신이 명령을 입력하고 기다렸다가 다시 입력해야 하는 일을 해야 한다면 프로그램으로 자동화하는 방법을 고려하라.

반응형

'경험치바(Experience Opint Bar)' 카테고리의 다른 글

bash 쉘 변수  (0) 2015.12.24
bash 쉘 주석  (0) 2015.12.24
bash 쉘 명령들  (0) 2015.12.24
bash 쉘 첫번째 프로그램  (0) 2015.12.24
bash 쉘 스크립팅 입문  (0) 2015.12.24
반응형

명령들명령들명령들 
당신의 첫번째 프로그램이  일은 정확히 무엇인가 프로그램은 화면에 "Hello World" 문구를 프린트했다하지만 어떻게 그렇게  것일까프로그램은 명령을 사용했다프로그램 상에서 당신이 썼던딱  줄의 코드는 echo "Hello World"였다그렇다면어떤 것이 명령인가바로 echo이다echo 프로그램은 하나의 인자를 취해서  인자를 화면에 프린트한다.

인자(argument) 프로그램 이름을 입력한 다음에 따라온다첫번째 예제에서 당신이echo 넘겨  인자는 "Hello World"이다당신이 ls /home/root 명령을 입력할 ls 대한 인자는 /home/root이다그렇다면  모든 것이 뜻하는 것은 무엇인가만일 당신이 인자 하나를 취해서 화면에 프린트하는 프로그램을 가지고 있다면 프로그램 대신에 echo 사용할  있다는 것이다우리가 foo라고 하는 프로그램을가지고 있다고 가정하자 프로그램은 문자열 하나를 인자로 가져서  화면에 출력한다우리는 위의 예제를 다음과 같이 다시   있다:

#!/bin/bash
foo "Hello World"

 내용을 저장하고 chmod  실행 가능하도록 하여 실행하자:

xconsole$ ./hello
Hello World

결과는 정확하게 똑같다프로그램 이름을 제외하고 어느  곳이라도 다른 곳이 있는가전혀 없다실제로 무엇인가 작성한 것이 있는가당신이 echo 프로그램을 작성했다면 모르지만 그렇지 않다면 전혀작성한 것이 없다당신이  것이라고는 이미 주어진 인자와 함께 echo 프로그램을 당신의  프로그램에 사용한  뿐이다실제로 echo 명령 대신   있는 명령은 printf  있다특히 C 프로그래밍에 능한사람의 경우에는printf 여러 기능을 이용해서 보다 다양한 결과를   있다사실 프로그램을 만들지 않고도 위의 예제와  같은 결과를 얻을  있다:

xconsole$ echo "Hello World"
Hello World

bash  스크립팅은 다양한 제어를 가능하게 하며 또한 배우기 쉽다방금 보았듯이 프로그램에 리눅스 명령을 함께   있다 프로그램은 특정한 일을 하기 위해 특별히 조립된 여러 프로그램의 집합체이다.

반응형

'경험치바(Experience Opint Bar)' 카테고리의 다른 글

bash 쉘 주석  (0) 2015.12.24
bash 쉘 백업 프로그램  (0) 2015.12.24
bash 쉘 첫번째 프로그램  (0) 2015.12.24
bash 쉘 스크립팅 입문  (0) 2015.12.24
bash 쉘 스크립트 위치 매개 변수, 조건문  (0) 2015.12.23
반응형

첫번째 BASH 프로그램
우리의 첫번째 프로그램은 고전적인 "Hello World" 프로그램이  것이다만일 당신이 이전에 프로그램을 해본 경험이 있다면지금까지 수많은 "Hello World" 프로그램을 봐왔을 것이다하지만이것은 전통이고누가  전통을 바꾸겠는가 "Hello World" 프로그램은 단순히 "Hello World" 문구를 화면에 프린트하는 것이다그럼 우선 텍스트 편집기를 시작해서 안에 다음의 내용을 입력하라:

#!/bin/bash
echo "Hello World"

첫번째 라인은 리눅스에게  스크립트를 실행하기 위해서 bash 번역기를 사용하라고 알려준다 경우에는, bash /bin 디렉토리에 있다만일 bash 시스템의 다른 디렉토리에 있다면 위치를 첫번째라인에 써주어라스크립트 안에 있는 지시문을 실행할  어떤 인터프리터를 사용할 것인지 리눅스에게 알려주는 것이므로 번역기를 정확하게 명시하는 것은 매우 중요하다다음엔  스크립트를 hello.sh란이름으로 저장하자모두  되었으면스크립트를 실행 가능하도록 한다:

xconsole$ chmod 700 ./hello.sh

파일의 퍼미션을 어떻게 바꾸는지 모른다면 chmod 대한 매뉴얼 페이지를 참조하라. 일단 위의 명령을 실행하면 단지 파일 이름을 타이핑하는 것만으로 당신의 프로그램을 실행할  있다:

xconsole$ ./hello.sh
Hello World

됐다당신의 첫번째 프로그램이다 자체로는 지루하고 쓸모없지만모든 사람이 이런 식으로 프로그래밍을 시작한다첫번째 프로그램을 실행하기까지의 과정을 되새겨 보자코드를 작성하고파일을 저장하고, chmod 명령으로 실행 가능하도록 만들었다.

반응형
반응형

bash쉘 스크립팅 입문

리눅스에서 쓸 수 있는 모든 쉘들처럼, BASH(Bourne Again Shell)은 뛰어난 명령 라인 쉘이면서, 그 자체로도 하나의 스크립팅 언어이다. 당신은 쉘 스크립팅을 이용해서 쉘이 가진 능력을 충분히 활용할 수 있으며, 쉘 스크립팅이 아니었으면  수많은 명령을 필요로 했을 많은 일들을 자동적으로 처리할 수도 있다. 당신의 리눅스 박스에 놓여 있는 많은 프로그램들은 쉘 스크립트들이다. 만일 쉘 스크립트가 어떻게 작동하는지 배우고 싶거나 당신이 가지고 있는 쉘 스크립트를 수정하고 싶다면, bash 문법을 이해하는 것은 필수적이다. 게다가, bash 언어를 이해하면 정확히 당신이 원하는 방식으로 일을 하는 당신 자신의 프로그램을 작성할 수 있다.  

프로그래밍 또는 스크립팅? 

프로그래밍을 처음 하는 사람들은 대개 프로그래밍 언어와 스크립팅 언어 사이의 차이를 혼동한다프로그래밍 언어는 일반적으로 스크립팅 언어에 비해 보다 강력하고 보다 빠르다프로그래밍 언어의 예로는 C, C++, Java 있다프로그래밍 언어는 대개 소스 코드(최종 프로그램이 어떻게 실행될 것인가에 대한 지시문을 담고 있는 텍스트 파일)에서 시작해서 컴파일 과정을 통해 실행 가능 파일로 만들어 진다(built). 이렇게 해서 만들어진 실행 가능 파일은 다른 운영 체제로 쉽게 이식되어지지 않는다예를 들어당신이 리눅스에서 C 프로그램을 작성했다면, Windows 98시스템에서는  프로그램을 실행할  없을것이다프로그램을 실행하기 위해서는, Windows 98 시스템 하에서 소스 코드를 다시 컴파일해야만 한다스크립팅 언어 역시 소스 코드에서 시작을 하지만실행 가능 파일로 만들기 위한 컴파일 과정이 없다대신번역기(interpreter) 소스 파일에서 지시문을 읽고  지시문을 실행시킨다불행히도번역기가  지시문을 하나 하나 읽어야만 하기 때문에일반적으로 번역기를 통해 실행되는 프로그램은 컴파일된 프로그램보다 느리다스크립팅 언어의 가장  장점은 소스 파일을 어떤 운영 체제에나 쉽게 이식할  있으며 바로  자리에서 번역기를 통해 실행할  있다는 것이다이런 점은 작은 프로그램에서는 장점으로 여겨질  있지만 규모의 어플리케이션을 작성할 것을 계획하고 있다면 프로그래밍 언어를 사용하는 편이 알맞다스크립팅 언어의 예로는 Perl, Lisp, Tcl 있다.

무엇을 알아야 하는가?
당신 자신의  스크립트를 작성하기 위해서는 매일 사용하는 기본적인 리눅스 명령어를 알아야 한다예를 들면어떻게 파일을 복사이동하고 새로운 파일을 만드는지 하는 것들을 알아야만 한다반드시 알아두어야    가지는 텍스트 편집기를 쓰는 방법이다리눅스의 대표적인  가지 텍스트 편집기는 vi, emacs, pico이다만일 vi emacs 사용하는데 익숙하지 않다면, pico 사용하기 쉬운 다른 텍스트 편집기를 이용하라.

주의!!!
루트 사용자인 상태에서는 절대로 스크립팅을 연습하지 않도록 하라어떤 일이 일어날  모른다만일 당신이 코딩을 하는 도중 우연히 실수를 해서 시스템을 망쳤다 해도 나는 책임질  없다루트 권한이없는 일반 사용자 계정을 사용하라당신은 스크립팅 연습을 하기 위한 새로운 사용자를 만들기를 원할 지도 모른다 경우일어날  있는 가장 나쁜 일은 새로 만든 사용자 디렉토리가 없어지는 것에 불과하다.

반응형
반응형

1. 위치 매개변수와 명령줄 매개 변수

1) 위치 매개변수

 -> 스크립트 이름 다음에 공백 문자로 구분된 각 단어를 매개변수라 부른다.

 -> 명령줄 매개변수는 스크립트 내에서 위치 매개변수로 참고 할 수 있으며,

    $1은 첫번째, $2는 두번째 매개변수를 의미한다. 

 -> $9 이후 매개변수들은 중괄호를 이용하여 숫자부분을 ${10}처럼 묶어 주어야 한다. 

 -> 변수 $#은 전체 위치 매개 변수의 개수를 알아 보는데

     변수 $*는 전체 위치 매개변수의 내용을 알아보는데 사용한다.

 -> 위치 매개변수는 set 명령을 써서 설정(set) 또는 재설정(reset)할 수 있으며, 

     set 명령을 사용하면 이전 설정값은 지워진다. 

  -> 위치 매개변수


         $0           : 현재 쉘 스크립트의 이름                                  
         $#           : 위치 매개변수의 총 개수를 평가한다                        
         $*           : 모든 위치 매개변수를 평가한다                             
         $@           : 큰 따옴표를 사용하였을 때를 제외하고는 $*와 동일한 의미
        "$*"         : "$1 $2 $3"으로 평가한다                                 
        "$@"         : "$1" "$2" "$3"으로 평가한다                             
         $1 ... ${10} : 사용가능한 위치 매개변수
  
      예제>                  
            $ cat test
            #!/bin/bash
            echo "This script is called $0."
            echo "$0 $1 and $2"
            echo "The number of positional parameters is $#"

            $ ./test
            This script is called ./test.
            ./test  and
            The number of positional parameters is 0

            $ ./test aaa
            This script is called ./test.
            ./test aaa and
            The number of positional parameters is 1

            $ ./test aaa bbb
            This script is called ./test.
            ./test aaa and bbb
            The number of positional parameters is 2

 2) set 명령과 위치 매개변수

        -> 위치 매개변수를 재설정하면 기존의 값들은 잃어버리게 된다
        -> 모든 위치 매개변수의 설정을 해제하려면 'set --' 명령을 사용한다
        -> $0는 언제나 스크립트 이름을 가리킨다

            $ cat test
            #!/bin/bash
            echo The name of this script is $0
            echo The arguments are $*
            => $*은 모든 위치 매개변수를 의미한다

            set $(date)
            echo The date is $2, $3, $6.


            $ ./test a b c d
            The name of this script is ./test
            The arguments are a b c d
            The date is 11., 21., KST.


            $ cat test
            #!/bin/bash
            name=${1:?"requires an argument"}
            echo Hello $name

                => 특수 변수 변경자인 :?는 $1이 값을 가지고 있는지 검사한다
                => 지정한 값이 없으면 스크립트를 종료하고 메시지를 출력한다


            $ ./test
            ./test: line 2: 1: requires an argument

            $ ./test aaa
            Hello aaa


        -> $*와 $@의 차이

            => $*와 $@의 의미는 큰 따옴표 안에서 사용되는 경우에만 서로 다르다
           
            => 큰 따옴표 안에 $*를 사용하는 경우에는 매개변수들이 단일 문자로 취급된다

            => $@를 큰 따옴표 안에 사용하면 매개변수들은 서로 분리된 문자로 인식된다

                $ set 'aaa bbb' ccc ddd
                $ for i in $*

                > do
                > echo $i
                > done
                aaa
                bbb
                ccc
                ddd

                $ set 'aaa bbb' ccc ddd
                $ for i in "$*"
                > do
                > echo $i
                > done
                aaa bbb ccc ddd

                    > $*이 큰 따옴표 안에 들어있기 때문에 전체 매개변수를 하나의 문자열로 처리한다


                $ set 'aaa bbb' ccc ddd
                $ for i in $@
                > do
                > echo $i
                > done
                aaa
                bbb
                ccc
                ddd

                $ set 'aaa bbb' ccc ddd
                $ for i in "$@"
                > do
                > echo $i
                > done
                aaa bbb
                ccc
                ddd

              > $@가 큰 따옴표 안에 있으므로 각 위치 매개변수를 개개의 문자열로 처리한다


2. 조건의 표현과 흐름 제어
 1) 종료 상태
  -> 종료 상태는 명령이 성공했는지 실패했는지 검사하는 것이고 다른 하나는 표현식이 

참인지 거짓인지  판별하는 것이다

        -> 종료 상태가 0이면 성공이나 참을 의미한다

        -> 종료 상태가 0이 아니면 실패나 거짓을 의미한다

        -> ? 변수는 가장 마지막으로 실행된 명령의 종료 상태를 보관한다

           
    2) test 내장 명령

        -> 단일 대괄호와 test 명령

            => 표현식의 평가에는 일반적으로 test 명령을 사용한다

            => test 명령은 대괄호 ([ ])로도 표현할 수 있다

            => test 명령이나 대괄호를 사용하여 식을 평가할 때, 쉘은 메타문자를 전개하지 않는다

            => 변수에 값을 저장할 때는 단어 단위로 나뉘어 저장하게 되므로 스페이스를 포함한 문자열은
                따옴표로 묶어준다

        -> 이중 대괄호와 test 명령

            => 배시 2.x 버전 이상에서는 이중 대괄호 ([[ ]])를 사용하여 표현식을 평가할 수 있다

            => 단어를 분리하여 변수에 저장하지 않고 패턴 검색이 가능할 뿐만 아니라, 
                메타문자에 대한 해석도 수행한다

            => 스페이스를 포함하는 문자열에는 반드시 따옴표를 사용하여야하며, 
                스페이스의 포함 여부와 상관없이 정확히 일치하는지의 여부를 검사할 때도 따옴표를 
                사용하여야 한다

            => test 명령에서는 논리연산자 &&(and), ||(or)를 -a, -o 옵션으로 치환하여 사용할 수 있다

        -> test 명령 연산자

      => 문자열 검사                                                              
          [ string1 = string2 ]  : string1은 string2와 같다                     
          [ string1 == string2 ] : string1은 string2와 같다                            
          [ string1 != string2 ] : string1은 string2와 다르다                   
                                   (!= 양족에는 스페이스를 사용하여야 한다 )        
          [ string ]             : string은 널이 아니다                          
          [ -z string ]          : string의 길이가 0 이다                        
          [ -n string ]          : string의 길이가 0이 아니다                    
          [ -l string ]          : string의 길이(문자의 개수)                    

      => 논리 검사                                                                
          [ string1 -a string2 ] : and 연산자                                   
          [ string1 -o string2 ] : or 연산자                                    
          [ ! string1 ]          : not 연산자                                  

      => 논리검사(복합 test 명령)                                                  
          [[ pattern1 && pattern2 ]] : pattern1과 pattern2가 모두 참                
          [[ pattern1 || pattern2 ]] : pattern1과 pattern2 중에 하나가 참            
          [[ ! pattern ]]            : pattern과 같지 않다                          

      => 정수 검사                                                                
          [ int1 -eq int2 ]          : int1은 int2와 같다                           
          [ int1 -ne int2 ]          : int1은 int2와 다르다                         
          [ int1 -gt int2 ]          : int1은 int2보다 크다                         
          [ int1 -ge int2 ]          : int1은 int2보다 크거나 같다                   
          [ int1 -lt int2 ]          : int1은 int2보다 작다                         
          [ int1 -le int2 ]          : int1은 int2보다 작거나 같다                  

      => 파일 검사를 위한 이항 연산자                                               
          [ file1 -nt file2 ]        : file1이 file2보다 새로운 파일이면 참           
          [ file1 -ot file2 ]        : file1이 file2보다 오래된 파일이면 참           
          [ file1 -ef file2 ]        : file1과 file2가 동일한 장치이거나 같은         
                                       inode 번호를 가면 참                    

            $ name=kyoung
            $ grep "$name" /etc/passwd
            kyoung:x:1000:1000:kyoung,,,:/home/kyoung:/bin/bash
            $ echo $?
            0

            $ test $name != kyoung
            $ echo $?
            1

            $ [ $name = kyoung ]
            $ echo $?
            0

            $ [ $name = [Kk]????? ]
            $ echo $?
            1
           
                > test 명령에서는 와일드 카드를 사용할 수 없다 따라서 ?를 일반 문자로 취급한다


        -> let 명령과 이중 괄호로 산술연산 처리

            => 산술식 평가에도 test 명령을 사용할 수 있지만, C언어에서처럼 풍부한 연산자를 사용하고 싶다면
               let 명령의 사용을 권장한다

            => let 명령은 이중 소괄호 ((( )))로 치환하여 사용할 수 있다

            => let 명령 연산자

             -                : 음수                          
             +                : 양수                           
             !                : 논리 부정                      
             ~                : 비트 단위 부정                  
             *                : 곱셈                           
             /                : 나누기                         
             %                : 나머지                         
             +                : 덧셈                          
             -                : 뺄셈     
                     
             bash 2.x 이후 추가된 let 연산자                        
             <<               : 비트 단위 왼쪽 시프트           
             >>               : 비트 단위 오른쪽 시프트          
             <= >= <>         : 비교 연산자                    
             == !=            : 등호 연산자                    
             &                : 비트 단위 and                  
             ^                : 비트 단위 배타적 or             
             |                : 비트 단위 or                   
             &&               : 논리곱(and)                    
             ||               : 논리합(or)                     
             = *= /= %= += -= 
             <<= >>= &= ^= |= : 대입 및 복합 연산자
        


                $ x=2
                $ y=3

                $ (( x > 2 ))
                $ echo $?
                1

                $ (( x < 3 ))
                $ echo $?
                0

                $ (( x == 2 && y == 3 ))
                $ echo $?
                0

                $ (( x > 2 || y < 3 ))
                $ echo $?
                1

    - if 명령
 
        -> if문은 종료 상태 값이 0이면 명령이 성공적으로 수행되었음을 
           의미하고 키워드 then 다음의 문장들이 실행된다 
 
        -> 형식 
 
            if 명령
            then
                명령
                명령
            fi
 
 
            => 숫자 및 문자열에 대해 test 사용 - 구형식
 
                if test 조건식
                then 
                    명령
                fi
 
                또는 
 
                if [ 문자열/수식 ] then
                    명령
                fi
 
         
            => 문자열에 대해 test 사용 - 새형식
 
                if [[ 문자열 조건식 ]] then 
                    명령
                fi
 
             
            => 숫자에 대해 let 사용 - 새형식
 
                if (( 수식 ))
 
             
            $ shopt -s extglob
 
                > shopt 내장 명령이 extglob을 설정하면 확장 메타 문자를 쓸 수 있다 
         
            $ answer="not really"
 
            $ if [[ $answer = [Nn]o? ( way|t really ) ]]
            then
                echo "So sorry."
            fi
 
                > 확장 패턴 검색을 사용한다 
 
                > 이 표현식에 따르면 answer 변수의 값이 no나 No로 시작하고 괄호 안에 
                  있는 표현식이 0번 또는 1번 나오면 전체 표현식은 참이 된다 
 
 
 
        -> exit 명령과 변수      
 
            => exit 명령은 스크립트를 중지시키고 명령줄로 돌아가고자 할 때 사용한다 
 
            $ if (( $# != 2 ))
            then 
                echo "Usage: $0 mdays size " 1>&2
                exit 1
            fi
 
                > 매개변수가 2개가 아니면 오류 메시지를 표준 오류로 출력시키고 스크립트의
                  종료 상태를 1로 반환하고 종료한다
 
 
 
        -> 널 값 검사 
 
            => 변수가 널인지 검사할 때는 널의 표현에 큰 따옴표를 사용하여야한다
               그렇지 않으면 test 명령이 실패한다          
 
            $ if [ "$name" = "" ]
            then
                echo The name variable is null 
            fi
 
                > 변수 name의 값이 널이면 검사 결과는 참이되며 큰 따옴표는 널을 표현하기 위해 
                  사용한다 
 
             
 
    3) if/else 명령
 
        -> if/else 명령은 양자 택일을 표현하는데 사용한다 
 
        -> 형식 
 
            if 명령
            then 
                명령(들)
            else
                명령(들)
            fi
 
             
            $ if grep "$name" /etc/passwd >& /dev/null; then 
                echo Found $name!
            else
                echo "Can't find $name."
                exit 1
            fi
 
 
    4) if/elif/else 명령
 
        -> 다중 택일 표현이다 
 
        -> 형식 
 
            if 명령
            then 
                명령(들)
            elif 명령
            then 
                명령(들)
            elif 명령
            then 
                명령(들)
            else
                명령(들)
            fi
 
 
    5) 파일 검사 
 
        -> 스크립트를 작성하다 보면 특정 파일에 대한 정보가 필요한 경우 사용
 
        -> 파일의 권한, 형식, 기본속성 등을 확인 할 때 사용한다 
 
        -> 파일 검사 연산자 
 
          -b filename : 블럭 파일                                      
          -c filename : 문자 파일                                      
          -d filename : 디렉토리가 존재                                 
          -e filename : 파일이 존재                                     
          -f filename : 파일이 존재하고, 디렉토리가 아님                  
          -G filename : 파일이 존재하고, 유효 그룹 ID의 소유이다           
          -g filename : setGID가 설정되어 있다                          
          -k filename : 스티키 비트가 설정되어 있다                       
          -L filename : 파일이 심볼릭 링크이다                           
          -p filename : 파일이 명명된 파이프 이다                        
          -O filename : 파일이 존재하고, 유효 사용자 ID의 소유이다         
          -r filename : 파일이 읽기 가능하다                             
          -S filename : 파일이 소켓이다                                 
          -s filename : 파일 크기가 0이 아니다                           
          -t fd       : 파일 식별자가 터미널에 열려있다                   
          -u filename : setUID가 설정되어 있다                          
          -w filename : 파일에 쓰기가 가능하다                           
          -x filename : 파일이 실행 가능하다                
 
            if [ -d $file ] 
            then 
                echo "$file is a directory"
 
                    > file이 디렉토리이면 출력 
 
            elif [ -f $file ]
 
                    > file이 디렉토리가 아니면 다시 검사 
            then 
                if [ -r $file -a -w $file -a -x $file ]
                then 
                    echo "You have read, write, and execute \ permission on $file."
                fi
                     
                    > file이 읽기,쓰기,실행 모두 가능하면 출력
 
                else 
                    echo "$file is neither a file nor a directory."
 
                    > 위 내용이 모두 거짓이면 출력
 
            fi         
 
 
    6) null 명령
 
        -> null 명령은 내장 명령으로서 콜론(:)으로 나타낸다 
     
        -> 실제 아무런 작업도 하지 않으며, 단지 종료 상태를 0으로 돌려준다 
 
        -> 주로 if 다음에 어떤 작업도 지정하고 싶지 않을 때 사용한다 
 
        -> then 다음에 문장을 기술하지 않으면 오류가 발생하기 때문에, 무한 반복문을 작성할 때도 
           사용한다 
 
            name=Tom
            if grep "$name" databasefile >& /dev/null
            then
             : 
            else
                echo "$1 not found in databasefile"
                exit 1
            fi
 
                > 콜론(:)은 널 명령으로 종료 상태 값을 0으로 되돌리기 외에 아무 일도 
                  하지 않는다 
 
 
            $ DATAFILE=
            $ : ${DATAFILE:=$HOME/db/datafile}
            $ echo $DATAFILE
            /home/jody/ellie/db/datafile
 
                > 콜론(:) 명령은 아무것도 하지 않는 명령이다 
 
                > 변경자 :=에 의해 널인 변수 값이 지정한 값으로 치환된다 
 
                > 변경된 값은 DATAFILE에 영구적으로 설정된다 
 
 
    7) case 명령
 
        -> 다중 분기 명령으로 if/elif 대신 사용한다 
 
        -> case문의 변수가 value1, value2, ... 중의 하나와 일치하면 그 값 이후부터 이중 세미콜론(;;)이 
           나올때까지의 명령들이 실행된다
 
        -> 수행 후에는 esac 다음으로 프로그램의 제어가 옮겨 진다 
 
        -> case 변수와 대응되는 것이 없으면, *) 기호 다음에서 부터 esac 사이의 문장들을 수행한다 
 
        -> *)의 역할은 if/else 조건문에서 else 문장과 동일하다 
 
        -> case 변수의 값에는 와일드 카드나 |(OR연산자)를 사용할 수 있다 
 
        -> 형식
 
            case 변수 in 
            value1)
                명령(들)
                ;;
            value2)
                명령(들)
                ;;
            *)
            명령(들)
                ;;
            esac grep 단어 파일명 파일명 ...
 
 
            $ cat test
 
            echo -n "Choose a foreground color for your xterm window: "
            read color
             
            case "$color" in 
            [Bb]l??)
                xterm -fg blue -fn terminal &
                ;;
             
            [Gg]ree*)
                xterm -fg darkgreen -fn terminal &
                ;;
             
            red | orange)
                xterm -fg $color -fn terminal & 
                ;;
 
            *)
                xterm -fn terminal 
                ;;
 
            esac
 
            echo "Out of case command"
 
         
        -> here 문서와 case 명령을 이용한 메뉴 구성
 
            => here 문서와 case 명령은 함께 사용되는 경우가 잦다 
 
            => here 문서는 화면에 출력될 메뉴를 구성하는 데 사용하며, case 명령은 
               사용자의 선택을 검사하여 적절한 메뉴 항목을 수행시킨다 
 
 
            $ cat test 
 
            echo "Select a terminal type: "
            cat <<- ENDIT
                1) unix
                2) xterm
                3) sun
            ENDIT
 
            read choice
             
            case "$choice" in 
            1)     TERM=unix
                export TERM
                ;;
             
            2)     TERM=xterm
                export TERM
                ;; 
 
            3)     TERM=sun 
                export TERM
                ;;
            esac
            echo "TERM is $TERM."

반응형

+ Recent posts