awk는 기능이 무척 다양하기에 쉘에서 동작함에도 불구하고 'awk는 프로그래밍 이다!'라고 말하는 전문가 들이 많다.

그래서 이번강의 부터 재미있는 awk 프로그램을 활용하는 방법들에 대해 차근차근 알아 보도록 하자.

1. awk로 텍스트 파일의 원하는 열만 출력 하기

우선 텍스트 파일은 이렇게 구성 되어 있다고 가정하자.


file.txt

fire born ask
letter land smile



해당 파일의 3번째 열을 출력한다.

-- 터미널 텍스트 박스 (Terminal text box) --

<Drag와 복사가 가능합니다.>


root@test:~$ awk '{print $3}' file.txt


ask
 smile

-> 파일의 첫번째 줄 3번째열에 해당 되는 'ask' 단어가 출력 되었다.





응용하여 행과 열을 동시에 출력해 보자.

-- 터미널 텍스트 박스 (Terminal text box) --

<Drag와 복사가 가능합니다.>

// 주석


root@test:~$ head -2 file.txt |tail -1 |awk '{print $2}'


land

-> 파일의 두번째 행의 2번째 열인 'head'를 출력한다.




 

도움이 되셨다면 '♡' 버튼을 꼭눌러 주시면 감사 하겠습니다.



아무래도 리눅스를 접하게 되면 터미널 다음으로 가장 많이 쓰이는 프로그램이 바로 '에디터' 이다.


여기서 필자가 말하는 '에디터' 라는 것은 워드프로세서를 말하는 것이 아닌 '소스 에디터'를 의미힌다.


소스 에디터는 기본적인 텍스트 작성 뿐만이 아니라 스니펫(구문 자동화) 및 자동 완성 그리고 소스에 대한 구문 컬러 구분을 그 기본으로 한다.


콘솔에서 쓰는 가장 대표적인 에디터는 아무래도 'vi'일 것이다.


하지만 이제 더 이상 vi나 vim 그리고 그 유명한 emacs는 구세대 적이다.


아직까지도 많은 프로그래머들이 고집적으로 위에 언급한 고전 에디터를 사용하고 있지만 구식적이며 편집에 많은 시간이 소모 되는 것이 명백한 사실이다.


솔직히 까고 말해서 콘솔 터미널에서 가장 간편한 에디터는 'nano' 이다.



'에디터 nano'



nano는 유저가 가장 간편해 하는 화살표를 사용하여 이동하고 그  자리에서 바로 편집할수 있는 간편성 인터페이스를 제공한다.

뿐만 아니라 ctrl 단축키를 이용한 바로 설정을 적용시켜 콘솔에서 가장 빠르게 편집할수 있는 에디터 이며 동시에 해당 소스에 맞는 컬러 프린트를 별다른 설정 없이 다양하게 제공한다.


다음은 gui 환경에서 유명한 심플 에디터를 말하자면 대표적으로 gedit 들수 있다. 그 밖에 mousepad등 여러가지가 있겠지만 옵션과 플러그 기능을 포함해서 그 중 gedit가 가장 뛰어나다. 그렇기에 gedit 만 소개할 것이다.



'에디터 gedit'


지에디트는 위 사진과 같이 각종 플러그인을 적용하면 파일관리자에 개인사전 스니펫, 자동완성기능, 파이썬 콘솔, 터미널 콘솔 플러그인 까지 내장 시킬수 있는 강력한 소프트웨어 이다. 이와 같이 각종 플러그인을 적용 시키는 방법에 대해서는 다음에 설명 블로깅 하도록 할 계획이다.


마지막으로 소개할 에디터는 'Atom' 이라는 에디터 이다.


아톰은 꽤 전문적인 에디터 툴 로서 범위가 상대적으로 다른 에디터들 보다 가장 크다고 볼 수 있다.



'에디터 Atom'


아톰 에디터는 대체적으로 지에디트와 구성이 흡사 하지만 스케일 면에서 그것을 훨씬 뛰어 넘는다. 수많은 개발자들이 자신이 만든 플러그인을 공유&배포 하기도 하고 소프트웨어 자체에서 이것을 검색 하여 설치가 가능하다. 뿐만 아니라 자신에게 간편한 소스코드 스니펫을 구성할수 있으며 이것을 백업하는 것이 자유롭다.


그리고 자동완성 기능이 현존하는 모든 에디터 중에서 가장 뛰어나다.


뿐만 아니라 지에디트처럼 파일관리자나 터미널 플러그인 그리고 파이썬 인터프리터 까지 내장이 가능하다.


무엇보다 이 소프트웨어의 가장 훌륭한 점은 바로 '색'의 표현일 것이다.




지금까지 이렇게 대표적인 잘나가는 에디터 세가지를 소개해 보았다.


그 밖에 geany, vscode 등이 있다.


에디터를 처음부터 잘 고르는 것이 중요한 이유는 자신에게 가장 편리한 에디터를 써야 코딩하는데 가장 빠르며 간편하며 한번 그 에디터를 쓰면 거의 오랫동안 단골로 사용하기 때문이다.


자~ 당신은 이제 어떤 에디터 소프트웨어를 사용할 것인가?


도움이 되셨다면 '♡' 버튼을 꼭눌러 주시면 감사 하겠습니다.


[Name]   



ldic



[ Section ]   


utils


[ Version - 날짜]


0.1-2 (Thu, 03 Nov 2016 17:57:31 +0900 )


[ 지원 아키텍쳐 ]   


x86_64, i386, armhf, arm64


[ 지원 운영체제 ]   


Linux_debian_ubuntu : xenial, wily, vivid, trusty, preceis, linux mint.....


[ 빌드 & 컴파일러 ]


bash


[ 의존 패키지 ]


language-pack-ko, fonts-nanum



[ 설명 ]   


리눅스를 위한 콘솔 터미널에서 작동하는 사전 입니다.


[ 특징 및 변경 사항 : Changes log ]   


 * First release.   


[ 개발자 ]


C O S M O S project.


site: http://cosmosproject2015.tistory.com


e-mail : cosmosproject15@gmail.com


[ 설치 방법 ]   


-- 터미널 텍스트 박스 (Terminal text box) --

<Drag와 복사가 가능합니다.>



root@test:~$ sudo apt-add-repository ppa:cosmosp2016/apps


root@test:~$ sudo apt-get update

root@test:~$ sudo apt install ldic




[실행]   


-- 터미널 텍스트 박스 (Terminal text box) --

<Drag와 복사가 가능합니다.>


root@test:~$ ldic







[사용 방법]


-- 터미널 텍스트 박스 (Terminal text box) --

<Drag와 복사가 가능합니다.>

root@test:~$ ldic





[ 소스 다운로드 ]  


준비중



리눅스 에서 C언어라고 해서 윈도우에서 소스코딩을 하는 것과 별반 차이가 없다.


오히려 리눅스의 모든 시스템 프로그램들과 커널은 대부분 C언어로 이루어져 있다.


윈도우와 틀린 것이 있다면 리눅스는 C언어를 'GCC'라는 프로그램으로써 컴파일 해야 한다는 것이다. 하지만 이점으로써 오히려 컴파일에 있어서 더욱 자유로워 질수 있다고 필자는 말하고 싶다.


C언어는 프로그래밍의 가장 기초적이고 입문적이라고 할 수 있으나 세대적으로 따지자면 가장 구식 이라고도 볼 수 있을 것이다.


굳이 그 이유를 따지자면 영역 설정과 더불어 변수와 설정에 있어서 파이썬 아니 bash java 프로그래밍 보다는 까다 로운 것이 사실이기 때문이다.


하지만 현재의 프로그래밍 스크립트 방식은 대부분 그 형식을 c언어에서 따 온 것이 사실이다. 


그렇기에 C를 먼저 배운다면 대부분의 프로그래밍 스크립트 또한 이해가 빨라져 금방 습득 하기 마련이다.


그럼 본격적으로 C 언어 스크립트의 기초와 컴파일 과정을 알아 보도록 하자.


첫 번째로 만들 소스 파일은 많은 기초 교육을 담고 있는 숫자를 입력 받아 그것을 정수, 16진수, 8진수, 2진수로 재 출력 해주는 소스 코드 이다.


Source_File name : transn1.c

[Download_none]

Type : C

클립보드로 복사 → (본문 클릭)

무제


여기서 배울 것은


1. 주석문


/*  <- 주석의 시작


*/  <-주석의 종료 



2. 라이브러리 헤더 로드



#include <header.h>  < header.h 파일을 로드해 온다.> 



3. 본문의 시작


int main () {  <- 본문의 시작


<- 본문의 종료 


4. 기초 변수 선언


int a;  <- a 라는 이름의 변수 선언

int b[10];  <- b라는 이름의 변수를 10바이트 크기로써 선언

char c[]; <- c라는 이름의 변수를 문자형으로써 선언


5. 입력 받기 문


scanf("%d",a);   <- a 변수에 정수(%d)로써 사용자에게 입력을 받아 처리한다.



6. 출력 문


printf("hello and your number is %d",a);  <- "hello and your number is"라는 문자열과 함께 a변수에 지정된 값을 정수로써 출력 한다.


7.for 문 


for (a = 0; a < 5; a++)

{

printf("hello");

<- "hello"란 문자를 지정한 변수 a를 활용하여 0 - 5 총 5번을 반복 하겠끔 한다.


그렇다면 이제 본격적으로 코딩한 파일을 컴파일 해 보도록 하자.


먼저 위의 소스코드를 'transn1.c'로 저장한다.


-- 터미널 텍스트 박스 (Terminal text box) --

<Drag와 복사가 가능합니다.>

// tn1이라는 파일이름으로 만든 transn1.c파일을 컴파일을 시도 한다.


root@test:~$ gcc -o tn1 transn1.c


-> 아무런 메세지가 나오지 않으면 성공한 것이다.


root@test:~$ ./tn1

insert number:


-> 아무 숫자들을 입력해 보자.

343432
입력하신 값의 정수 표현은 343432
입력하신 값의 16진수로의 표현은 0x53d88
입력하신 값의 8진수로의 표현은 01236610
입력하신 값의 2진수로의 표현은 1010011110110001000입니다.


-> 프로그램이 계산 및 출력에 성공했다. 




도움이 되셨다면 '♡' 버튼을 꼭눌러 주시면 감사 하겠습니다.





리눅스 에서 C언어라고 해서 윈도우에서 소스코딩을 하는 것과 별반 차이가 없다.


오히려 리눅스의 모든 시스템 프로그램들과 커널은 대부분 C언어로 이루어져 있다.


윈도우와 틀린 것이 있다면 리눅스는 C언어를 'GCC'라는 프로그램으로써 컴파일 해야 한다는 것이다. 하지만 이점으로써 오히려 컴파일에 있어서 더욱 자유로워 질수 있다고 필자는 말하고 싶다.


C언어는 프로그래밍의 가장 기초적이고 입문적이라고 할 수 있으나 세대적으로 따지자면 가장 구식 이라고도 볼 수 있을 것이다.


굳이 그 이유를 따지자면 영역 설정과 더불어 변수와 설정에 있어서 파이썬 아니 bash java 프로그래밍 보다는 까다 로운 것이 사실이기 때문이다.


하지만 현재의 프로그래밍 스크립트 방식은 대부분 그 형식을 c언어에서 따 온 것이 사실이다. 


그렇기에 C를 먼저 배운다면 대부분의 프로그래밍 스크립트 또한 이해가 빨라져 금방 습득 하기 마련이다.


그럼 본격적으로 C 언어 스크립트의 기초와 컴파일 과정을 알아 보도록 하자.


첫 번째로 만들 소스 파일은 많은 기초 교육을 담고 있는 숫자를 입력 받아 그것을 정수, 16진수, 8진수, 2진수로 재 출력 해주는 소스 코드 이다.


Source_File name : transn1.c

[Download_none]

Type : C

클립보드로 복사 → (본문 클릭)

무제


여기서 배울 것은


1. 주석문


/*  <- 주석의 시작


*/  <-주석의 종료 



2. 라이브러리 헤더 로드



#include <header.h>  < header.h 파일을 로드해 온다.> 



3. 본문의 시작


int main () {  <- 본문의 시작


<- 본문의 종료 


4. 기초 변수 선언


int a;  <- a 라는 이름의 변수 선언

int b[10];  <- b라는 이름의 변수를 10바이트 크기로써 선언

char c[]; <- c라는 이름의 변수를 문자형으로써 선언


5. 입력 받기 문


scanf("%d",a);   <- a 변수에 정수(%d)로써 사용자에게 입력을 받아 처리한다.



6. 출력 문


printf("hello and your number is %d",a);  <- "hello and your number is"라는 문자열과 함께 a변수에 지정된 값을 정수로써 출력 한다.


7.for 문 


for (a = 0; a < 5; a++)

{

printf("hello");

<- "hello"란 문자를 지정한 변수 a를 활용하여 0 - 5 총 5번을 반복 하겠끔 한다.


그렇다면 이제 본격적으로 코딩한 파일을 컴파일 해 보도록 하자.


먼저 위의 소스코드를 'transn1.c'로 저장한다.


-- 터미널 텍스트 박스 (Terminal text box) --

<Drag와 복사가 가능합니다.>

// tn1이라는 파일이름으로 만든 transn1.c파일을 컴파일을 시도 한다.


root@test:~$ gcc -o tn1 transn1.c


-> 아무런 메세지가 나오지 않으면 성공한 것이다.


root@test:~$ ./tn1

insert number:


-> 아무 숫자들을 입력해 보자.

343432
입력하신 값의 정수 표현은 343432
입력하신 값의 16진수로의 표현은 0x53d88
입력하신 값의 8진수로의 표현은 01236610
입력하신 값의 2진수로의 표현은 1010011110110001000입니다.


-> 프로그램이 계산 및 출력에 성공했다. 




도움이 되셨다면 '♡' 버튼을 꼭눌러 주시면 감사 하겠습니다.




파이썬으로 스스로 문제를 만들어 내는 인공지능 수학 선생님 프로그램을 만들기 


파이썬은 프로그래밍 모듈중 계산에 있어서 가장 우수하며 손쉬운 스크립트 방식을 제공한다.


먼저 그러한 점을 직접 확인하기 위하여 터미널을 열고 파이썬 인터프리터를 실행해 보자.


-- 터미널 텍스트 박스 (Terminal text box) --

<Drag와 복사가 가능합니다.>

// 파이썬을 그대로 실행한다.


root@test:~$ python


Python 2.7.12 (default, Jul  1 2016, 15:12:24)
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 5*6


-> 여기서 부터 계산 식을 직접 입력해 본다.


>>> 30  


 -> 바로 계산이 되는 것을 확인 할 수 있다.



이렇게 파이썬 모듈에서 간단히 제공하는 인터프리터를 통하여 계산 문제를 수행해 보았다.


이뿐만이 아니라 파이썬은 자체적인 계산모듈을 통하여 사용자가 입력하는 계산 식과 답(결과)가 틀린지를 판단할수 있는 단순하면서도 강력한 기초 정수식 함수 라이버리리를 기본적으로 제공한다.


-- 터미널 텍스트 박스 (Terminal text box) --

<Drag와 복사가 가능합니다.>



// 사용자가 직접 식과 답안을 인터프리터에 제출해 본다.


>>> 5*20 == 15


False


-> 모듈이 판단하여 틀렸다는 메시지를 반환 한다.



// 이번에는 제대로 된 답안을 제출 해 본다.


>>> 5*20 == 100


True


-> 정답이라는 결과를 반환한다.

 da




이러한 파이썬의 기본적인 계산 능력을 활용하여 간단한 산수 문제들을 랜덤으로 제출 해주는 작은 프로그램을 하나를 만들어 보고자 한다. 


Source_File name : matht.py

[Download]

Type : python

클립보드로 복사 → (본문 클릭)

무제


-- 터미널 텍스트 박스 (Terminal text box) --

<Drag와 복사가 가능합니다.>

// 만든 'matht.pt' 파이썬 소스 파일을  실행한다.


root@test:~$ python matht.py


(*)는 곱하기 입니다.
문제 1

64-95

정답을 입력 하세요.


-> 정답을 입력하며 총 열개 문항을 진행해 보자.









github 다운로드

-- 터미널 텍스트 박스 (Terminal text box) --

<Drag와 복사가 가능합니다.>


root@test:~$ git clone https://github.com/cosmosproject15/math_teacher












파이썬으로 스스로 문제를 만들어 내는 인공지능 수학 선생님 프로그램을 만들기 


파이썬은 프로그래밍 모듈중 계산에 있어서 가장 우수하며 손쉬운 스크립트 방식을 제공한다.


먼저 그러한 점을 직접 확인하기 위하여 터미널을 열고 파이썬 인터프리터를 실행해 보자.


-- 터미널 텍스트 박스 (Terminal text box) --

<Drag와 복사가 가능합니다.>

// 파이썬을 그대로 실행한다.


root@test:~$ python


Python 2.7.12 (default, Jul  1 2016, 15:12:24)
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 5*6


-> 여기서 부터 계산 식을 직접 입력해 본다.


>>> 30  


 -> 바로 계산이 되는 것을 확인 할 수 있다.



이렇게 파이썬 모듈에서 간단히 제공하는 인터프리터를 통하여 계산 문제를 수행해 보았다.


이뿐만이 아니라 파이썬은 자체적인 계산모듈을 통하여 사용자가 입력하는 계산 식과 답(결과)가 틀린지를 판단할수 있는 단순하면서도 강력한 기초 정수식 함수 라이버리리를 기본적으로 제공한다.


-- 터미널 텍스트 박스 (Terminal text box) --

<Drag와 복사가 가능합니다.>



// 사용자가 직접 식과 답안을 인터프리터에 제출해 본다.


>>> 5*20 == 15


False


-> 모듈이 판단하여 틀렸다는 메시지를 반환 한다.



// 이번에는 제대로 된 답안을 제출 해 본다.


>>> 5*20 == 100


True


-> 정답이라는 결과를 반환한다.

 da




이러한 파이썬의 기본적인 계산 능력을 활용하여 간단한 산수 문제들을 랜덤으로 제출 해주는 작은 프로그램을 하나를 만들어 보고자 한다. 


Source_File name : matht.py

[Download]

Type : python

클립보드로 복사 → (본문 클릭)

무제


-- 터미널 텍스트 박스 (Terminal text box) --

<Drag와 복사가 가능합니다.>

// 만든 'matht.pt' 파이썬 소스 파일을  실행한다.


root@test:~$ python matht.py


(*)는 곱하기 입니다.
문제 1

64-95

정답을 입력 하세요.


-> 정답을 입력하며 총 열개 문항을 진행해 보자.









github 다운로드

-- 터미널 텍스트 박스 (Terminal text box) --

<Drag와 복사가 가능합니다.>


root@test:~$ git clone https://github.com/cosmosproject15/math_teacher











대부분 파이썬(python)은 소스코드 그대로를 실행해서 사용하는 것이 일반적이다.

그렇다면 가장 중요하게 생각해야 할 점은 이썬을 굳이 컴파일 해야 하는 이유는 무엇인가? 일 것이다.

C언어의 경우는 소스코드를 해당 시스템의 바이너리로 변환해주는 컴파일 과정을 반드시 거쳐야만 실행이 가능한 구조를 가지고 있다.

하지만 파이썬의 경우에는 시스템에 파이썬 라이브러리가 깔려 있다면 자체 인터프리터 프로세스 기능을 활용하여 소스코드 그 자체로써의 실행이 가능해 진다.

물론 이 과정에서 시스템은 이미 해당 바이너리에 일치하는 파이썬 라이브러리 모듈을 가지고 있기 때문에 바이너리가 틀려도 얼마든지 실행될수 있다는 장점을 가지고 있다.

하지만 프로그래밍을 한 번 이상 해 본 사람은 뭔가 애매모호한 파이썬의 결점에 대해서 생각해 볼 수 밖에 없어 진다.

바로 해당 시스템에 소스코딩에 사용된 임포트(IMPORT) 라이브러리와나 기존의 베이스 기반은 파이썬 모듈이 없다면...

이것은 매우 중요한 문제이다.

예를 들어 기초 파일시스템을 설계 할때나 즉 파이썬이 설치 되지 않은 상태에서는 해당 소스코드 파일이 실행이 불가능 하기 때문이다.

즉 그 자체로서는 소프트웨어가 될수 없는 반드시 부모 프로세스인 파이썬이 있어야만 실행이 되는 비운의 운명인 것이다.

일부 의견들 중에는 파이썬을 컴파일 하는 이유가 '암호화'의 목적이 있다고 하는 경우가 있는데 그것은 매우 비전문적인 의견 이라고도 볼 수가 있다.

컴파일의 목적은 암호화가 목적이 아니라 독자적인 아키텍쳐로써의 실행을 가능케 하기 위한 바이너리화를 그 목적으로 두고 있으며 컴파일된 파일은 아스키 문자와 16진수로의 리딩이 가능하다. 뿐만 아니라 C언어나 파이썬은 디컴파일러를 수행할수 있는 소프트웨어가 존재한다.

또 파이썬의 컴파일의 장점을 또 한가지 예를 든다면 예를 들어 똑같은 GTK+(Gimp tool kit for gui)를 수행하는 각각의 컴파일 된 C언어와 파이썬 파일을 보았을때 용량에서 부터 큰 차이를 가진다.

즉 파이썬이 C언어 보다 컴파일된 크기가 훨씬 가볍다.


그렇다면 다음 장에서 부터 직접 적으로 파이썬을 컴파일 해보도록 하자.


도움이 되셨다면 '♡' 버튼을 꼭눌러 주시면 감사 하겠습니다.


BASH 쉘 프로그래밍으로 인공지능 '가위, 바위, 보' 게임을 만들어 보자.


리눅스에서 bash는 윈도우와 비교한다면 autobat 과 비슷하다고 볼수 있다 라는 것은... 훼이크고

그렇다고 말하는 사람들이 있지만 그것과는 사실 게임이 되지 않는다.


즉 bash 가 더욱 강력하고 하나의 소프트웨어를 만들 정도로 어마어마 하다 이거지~


bash는 쉘스크립트로 불리움으로써 유닉스 체계를 전부 응용하여 다룰수 있는 전역 프로그래밍 이라고 말할수 있다.


원래는 그낭 sh 로 불리우지만 기존의 sh에서 여러 기능이 업그레이드 되면서 bash 가 탄생한 것이다.

뿐만 아니라 bash가 이전 sh를 기반으로 하지만 유닉스 시스템 체계에서 이 둘은 개별적으로 존재 한다.


또 bash의 스크립트 방식으로 프로그래밍을 짰을 경우 { #!/bin/sh } 모듈을 로드해서 실행 할 경우 정상적으로 동작 하지 않을 수 있다.

그렇기에 현재로써는 주로 개발자들은 bash { #!/bin/bash }를 채택해서 사용 하는 경우가 일반적이다.


자 그렇다면 bash shell script programming을 이용해서 심플한 인공지능 형태의 '가위, 바위, 보' 게임을 만들어 보자.

여기서 중점으로 다뤄야하는 소스 형태는 크게 다섯 가지로 분류 된다.


첫째, 변수 지정


pn=0
yn=0


∴ 위는 승리 횟수 카운트 저장을 위한 숫자 0부터 시작하는 기본적은 변수 적용이다.


둘째, 함수 지정

rpsai() {

if [ $pc = 1 ]; then
    echo "
저는 가위를 냈습니다."
    if [ $rps = 1 ]; then
        echo "
        우린 비겼습니다."
        echo "
당신의 점수는 $yn 저의 점수는 $pn 입니다."
    fi
fi

}  


∴ rpsai 란 이름으로 인공지능 설정을 위한 if문을 응용한 전체 함수를 지정한다.


셋째, if문

if [ $rps = 1 ]; then
        echo "
당신은 1 (가위)를 내셨습니다."

# 지정한 rpsai 함수를 불러온다.

        rpsai       
fi


∴ 사용자 키 입력시 발생하는 스크립트를 처리하는 if 문 설계


넷째, read문

# 사용자의 입력을 받아 들이는 read 문 변수를 지정한다.

read -n 1 -p "nput key [1(가위), 2(바위), 3(보), 0(종료)]" rps


∴ rps란 이름으로 변수를 만들어 사용자 입력을 연동 (저장) 시킨다.

사실 read문은 기존 스크립트가 아닌 유닉스 기본 프로그램 중 하나고 콘솔의 명령 체계를 이용하는 것이다.


다섯째, while문

while [ : ]; do

script

done


∴ while문은 계속해서 반복수행하는 스크립트를 구성할수 있다.


실행을 위한 전체 소스코드

Source_File name : rps

[Download]

Type : Bash

클립보드로 복사 → (본문 클릭)

무제


코딩을 완료 하고 'rps'로 저장하였으면 터미널을 열고 본격적으로 실행을 위한 준비를 한다.

-- 터미널 텍스트 박스 (Terminal text box) --

<Drag와 복사가 가능합니다.>

//  실행이 가능하겠끔 파일의 속성을 변환 시킨다.


root@test:~$ chmod +x rps


//  이제 실행을 해본다.


root@test:~$ ./rps

This program is 'Rock Paper Scissors game' by type simple AI.
How to play game?
    You need select 1(가위), 2(바위), 3(보), 0(exit)

Enter or any key to let's start!'

-> Enter키나 아무키를 눌러 게임을 시작하자.


Ok. let's start.'

Input key [1(가위), 2(바위), 3(보), 0(종료)]



위와 같이 게임이 진행 된다.



소스 다운로드 :


github : https://github.com/cosmosproject15/rps_game

-- 터미널 텍스트 박스 (Terminal text box) --

<Drag와 복사가 가능합니다.>

// git 명령으로 소스를 다운받는다.


root@test:~$ git clone https://github.com/cosmosproject15/rps_game


// 다운 받은 폴더로 진입한다.


root@test:~$ cd rps_game


// 실행한다.


root@test:~/rps_game$ ./rps

This program is 'Rock Paper Scissors game' by type simple AI.
How to play game?
    You need select 1(가위), 2(바위), 3(보), 0(exit)

Enter or any key to let's start!'



도움이 되셨다면 '♡' 버튼을 꼭눌러 주시면 감사 하겠습니다.

BASH 쉘 프로그래밍으로 인공지능 '가위, 바위, 보' 게임을 만들어 보자.


리눅스에서 bash는 윈도우와 비교한다면 autobat 과 비슷하다고 볼수 있다 라는 것은... 훼이크고

그렇다고 말하는 사람들이 있지만 그것과는 사실 게임이 되지 않는다.


즉 bash 가 더욱 강력하고 하나의 소프트웨어를 만들 정도로 어마어마 하다 이거지~


bash는 쉘스크립트로 불리움으로써 유닉스 체계를 전부 응용하여 다룰수 있는 전역 프로그래밍 이라고 말할수 있다.


원래는 그낭 sh 로 불리우지만 기존의 sh에서 여러 기능이 업그레이드 되면서 bash 가 탄생한 것이다.

뿐만 아니라 bash가 이전 sh를 기반으로 하지만 유닉스 시스템 체계에서 이 둘은 개별적으로 존재 한다.


또 bash의 스크립트 방식으로 프로그래밍을 짰을 경우 { #!/bin/sh } 모듈을 로드해서 실행 할 경우 정상적으로 동작 하지 않을 수 있다.

그렇기에 현재로써는 주로 개발자들은 bash { #!/bin/bash }를 채택해서 사용 하는 경우가 일반적이다.


자 그렇다면 bash shell script programming을 이용해서 심플한 인공지능 형태의 '가위, 바위, 보' 게임을 만들어 보자.

여기서 중점으로 다뤄야하는 소스 형태는 크게 다섯 가지로 분류 된다.


첫째, 변수 지정


pn=0
yn=0


∴ 위는 승리 횟수 카운트 저장을 위한 숫자 0부터 시작하는 기본적은 변수 적용이다.


둘째, 함수 지정

rpsai() {

if [ $pc = 1 ]; then
    echo "
저는 가위를 냈습니다."
    if [ $rps = 1 ]; then
        echo "
        우린 비겼습니다."
        echo "
당신의 점수는 $yn 저의 점수는 $pn 입니다."
    fi
fi

}  


∴ rpsai 란 이름으로 인공지능 설정을 위한 if문을 응용한 전체 함수를 지정한다.


셋째, if문

if [ $rps = 1 ]; then
        echo "
당신은 1 (가위)를 내셨습니다."

# 지정한 rpsai 함수를 불러온다.

        rpsai       
fi


∴ 사용자 키 입력시 발생하는 스크립트를 처리하는 if 문 설계


넷째, read문

# 사용자의 입력을 받아 들이는 read 문 변수를 지정한다.

read -n 1 -p "nput key [1(가위), 2(바위), 3(보), 0(종료)]" rps


∴ rps란 이름으로 변수를 만들어 사용자 입력을 연동 (저장) 시킨다.

사실 read문은 기존 스크립트가 아닌 유닉스 기본 프로그램 중 하나고 콘솔의 명령 체계를 이용하는 것이다.


다섯째, while문

while [ : ]; do

script

done


∴ while문은 계속해서 반복수행하는 스크립트를 구성할수 있다.


실행을 위한 전체 소스코드

Source_File name : rps

[Download]

Type : Bash

클립보드로 복사 → (본문 클릭)

무제


코딩을 완료 하고 'rps'로 저장하였으면 터미널을 열고 본격적으로 실행을 위한 준비를 한다.

-- 터미널 텍스트 박스 (Terminal text box) --

<Drag와 복사가 가능합니다.>

//  실행이 가능하겠끔 파일의 속성을 변환 시킨다.


root@test:~$ chmod +x rps


//  이제 실행을 해본다.


root@test:~$ ./rps

This program is 'Rock Paper Scissors game' by type simple AI.
How to play game?
    You need select 1(가위), 2(바위), 3(보), 0(exit)

Enter or any key to let's start!'

-> Enter키나 아무키를 눌러 게임을 시작하자.


Ok. let's start.'

Input key [1(가위), 2(바위), 3(보), 0(종료)]



위와 같이 게임이 진행 된다.



소스 다운로드 :


github : https://github.com/cosmosproject15/rps_game

-- 터미널 텍스트 박스 (Terminal text box) --

<Drag와 복사가 가능합니다.>

// git 명령으로 소스를 다운받는다.


root@test:~$ git clone https://github.com/cosmosproject15/rps_game


// 다운 받은 폴더로 진입한다.


root@test:~$ cd rps_game


// 실행한다.


root@test:~/rps_game$ ./rps

This program is 'Rock Paper Scissors game' by type simple AI.
How to play game?
    You need select 1(가위), 2(바위), 3(보), 0(exit)

Enter or any key to let's start!'



도움이 되셨다면 '♡' 버튼을 꼭눌러 주시면 감사 하겠습니다.

파이썬에서 명령행의 필드를 인지하여 활용하는 방법에 대하여 알아 보도록 하자.

Bash에서 명령행의 필드를 인지할 때는 '$1(필드의 첫번째)'를 사용하면 되지만 파이썬 에서는 시스템 모듈과 'sys.argv[NUM]'명령을 활용해야 한다.

먼저 간단한 명령행 필드열1만 읽어 들여 간단하게 응용하는 파이썬 소스코딩 부터 해 보도록 하자. 


무제

Source_File name : tp1.py     |     [Download]    |     Type : Python         클립보드로 복사 → (본문 클릭)



그렇다면 이제 저장한 파이썬 파일을 '1' 과 함께 입력 했을때와 다른 것들을 입력했을때를 실행 테스트 해 보자.



// 실행 명령행에 1을 입력해 본다.


root@test:~$ python pb1.py 1

Good!



//  이번에는 다른 문자를 입력해 본다.



root@test:~$ python pb1.py test

Sorry you insert test


-> 입력한 'test'를 텍스트로 그대로 반환한다.




실행 및 테스트에 성공 하였다면 이번에는 명령행의 '필드열 1'과  '필드열 2'를 실행시 입력받아 둘의 숫자를 더하여서 출력하는 프로그램을 만들어 보자.


무제

Source_File name : tp2.py    |     [Download]    |     Type : Python         클립보드로 복사 → (본문 클릭)


테스트를 실시해 본다.



// 실행과 함께 명령행  필드에 두 가지 숫자를 입력한다.


root@test:~$ python tp2.py 3 5

3+5=

8

-> 입력한 각 필드의 출력과 함께 계산된 값이 출력 된다.




도움이 되셨다면 '♡' 버튼을 꼭 눌러 주시면 감사 하겠습니다.




리눅스에서 아주 쉬운 콘솔에서의 환경변수에 대해서 알아보자.

'환경변수' 라는 것은 그럴듯하게 어렵게 들릴수도 있겠지만 매우 쉬우며 어렵지 않다.

그냥 단순하게 환경의 조건을 정하는 것이다.

어떤 운영체제를 다룬다면 그 체제의 왕은 절대적으로 여러분이다.

그렇다. 여러분이 왕이 되어서 어떤 여러가지 문자를 함축적으로 정하는 것이다.

예를 들어,

"she=my love" 라고 정하고 싶다면 보통 프로그래밍 에서는 변수를 이렇게 설정한다.

she="my love"

그냥 바로 이거다. 이것이 변수라는 것이다.

얼마나 쉬운가?

여기에서 변수에 환경이란 말을 더하여 콘솔에서의 '환경변수'를 절대적으로 정한다고 한다면 터미널에 그저 'export'를 앞에 갖다 붙히기만 하면 되는 것이다.

자 그러면 터미널에서 그것을 한번 시험해 보도록 하자.




// 환경변수를 지정한다.


root@test:~$ export she="my love"



// 지정된 환경변수를 불러온다.


root@test:~$ echo $she

my love

-> 'she'에 대한 환경변수가 출력 되는데 성공했다.





보시는 바와 같이 "my love" 라는 글이 출력 되는 것을 볼 수가 있다.

그리고 중요한 것은 그것을 불러오는 명령에서 she 앞에 '$'를 붙였다는 것이다.
'$' 문자는 유닉스 시스템의 쉘 스크립트 에서 변수를 불러오는 매우 중요한 담당 역할을 하는 문자 이다.

하지만 이와 같은 단순한 환경변수 지정은 여러분이 연 그 터미널에서만 변수로 동작하며 다른 터미널 콘솔 에서는 변수로 지정 되지 않는다.

그렇다면 변수를 계속 유지되도록 전역설정을 하려면 어떻게해야 할까?

이는 '$/HOME/.bashrc' 파일에 해당 스크립트를 입력하여 처리가 가능하다.
($HOME = /home/user)


// 먼저 만일을 대비해서 bashrc의 백업을 만든다. (물론 부팅시를 기준으로 한 백업 파일인 '$HOME/.bashrc~'가 존재 한다.) 


root@test:~$ cp ~/.bashrc ~/.bashrc.bak



// .bashrc 파일에 추가할 환경변수를 삽입 한다.


root@test:~$ echo 'export she="my love"' >> ~/.bashrc



// 재부팅 할 필요 없이 '~/.bashrc' 파일의 소스를 로드한다.


root@test:~$ source ~/.bashrc



// 지정된 환경변수를 불러온다.


root@test:~$ echo $she

my love


-> 'she'에 대한 환경변수가 출력 되는데 성공했다.




이와 같은 환경변수는 전역 bash 프로그래밍에서 활용되며 여러 소프트웨어들이 이러한 환경변수를 활용한다.
대표적으로 많이 사용되는 환경변수들은 다음과 같다.

$HOME     사용자의 홈 디렉토리
$PATH     실행 파일 경로
$LANG     환경변수에 설정된 언어
$PWD         사용자의 현재 작업중인 디렉토리
$SECONDS     해당 콘솔이 실행된 경과를 초 단위 시간으로 나타냄
$SHLVL     사용되는 쉘 레벨
$SHELL     사용되는 쉘 이름($BASH와 같게 나옴.)
$PPID     부모 프로세스의 PID
$BASH     BASH 실행 파일 경로
$BASH_VERSION     설치된 BASH 버전
$MAIL     환경변수에 설정된 메일주소
$OSTYPE     운영체제 종류
$TERM     현재 사용되는 터미널 이름
$HOSTNAME     호스트 전체 이름
$HOSTTYPE     시스템의 아키텍처
$MACHTYPE     PC의 아키텍쳐와 운영체제표시
$LOGNAME     로그인 사용자 이름
$UID         사용자 UID
$EUID     su 명령에서 사용하는 사용자의 유효 아이디 값(UID와 EUID 값은 다를 수 있음)
$USER     사용자의 이름
$HISTFILE     history파일의 경로
$DISPLAY     현재 사용되는 X 디스플레이 이름

도움이 되셨다면 '♡' 버튼을 꼭눌러 주시면 감사 하겠습니다.


인터넷에서 JAVA 프로그래밍에 대한 예제를 찾아서 막상 컴파일 해 보면 안되는 경우가 허다 할 것이다.

그 요인은 전체적으로 두 가지 요인으로 볼 수 있는데

하나는 소스 구성이 이전 버전으로 구성 되어 있는 것이며

또 하나는 파일의 인코딩이 다르기 때문이다.

먼저 인코딩을 설명 한다면 JAVAC(JAVA 컴파일러)는 기본적으로 UTF-8을 우선적으로 지원하기 때문이다.

만일, 해당 소스 파일이 'EUC-KR'로 되어 있다면 JAVAC가 인식하지 못하면서 컴파일에 실패 한다.

먼저 만약 소스 코드 구성은 최신 버전에 맞지만 인코딩만 다를 경우를 컴파일을 시도해 보자.


< 해당 'a.java' 소스 파일이 'EUC-KR'인코딩일 경우 >

$ JAVAC -encoding euc-kr a.java
        (euc-kr : 인코딩 지정)

< 컴파일에 성공했는지 확인해 본다. >

$ ls

a.java a.class




< 이번에는 이전 버전의 소스코드와 인코딩이 다른 경우 두가지를 모두 포함하고 있는 경우를 해결해 볼 것이다. >


그러는 이유는 이 방법에는 순서가 있기 때문이다.


물론 프로그래머 스스로가 소스를 수정하여 해결할수도 있겠지만 javac는 이전 버전의 소스 형식도 잡아주는 기능이 있기 때문에 그것을 최대한 활용 하는 것이 훨씬 더 수월 할 것이다.


그리고 이번에는 본 필자가 소스 파일을 제공해 줄 것이다.


a.java


< 위의 파일을 직접 다운 받거나 본 블로그에서 제공하는 예제 파일을 터미널에서 wget을 활용하여 원하는 폴더에  다운로드 한다. >

$ wget http://cosmosproject2015.tistory.com/attachment/cfile21.uf@246C454257AD51422E2D22.java


// 받은 파일을 a.java로 변경한다.

< 받은 파일을 a.java로 변경한다. >


$ mv cfile21.uf@246C454257AD51422E2D22.java a.java


< 제대로 변경 되었는지 확인해 본다. >


$ ls


a.java


* a.java 가 있다면 다운로드와 변경에 성공한 것이다.


< 먼저 해당 java 파일에 대한 타겟 버전을 설정한다. >

$ javac -target 1.4 a.java
       (타겟 옵션 : 버전 1.4)

javac: target release 1.4 conflicts with default source release 1.9

    * 현재 버전 1.9에 의해 1.4 문제를 타겟 배포 했다는 문구가 출력 된다.

< 이제 인코딩과 컴파일을 같이 실행한다. > >>

$ javac -encoding euc-kr a.java

< 실행해 본다. > >

$ java a


Hello World
성공했습니다!


* 위와 같이 나온다면 성공한 것이다.


도움이 되셨다면 '♡' 버튼을 꼭눌러 주시면 감사 하겠습니다.


이전 포스팅 에서는 간단하게 문자를 출력 시키는 JAVA 프로그램을 만들어 보았다.

이번에는 변수와 상수를 배우고 지정하여 그것을 문자와 함께 같이 합하여 출력해 보도록 할 것이다.

먼저, 변수에 대해 말해 보자면

간단히 말해서 문자에 문자를 지정하여 사용하는 것이고

    예) when = "Saturday night";  

상수는 그것이 숫자로 활용 되어서 문자에 숫자를 지정하는 것이라고 할 수 있다.

    예) clock = 21;

여기서 다른 점은 변수 지정은 "_" 가 들어 가지만 상수 지정은 숫자 그 자체를 사용하기 때문에 그것이 필요치 않다는 것이다.

자 그렇다면 지금부터 본격적으로 프로그래밍을 해보도록 하자.




mybaby.java

// 클래스 이름을 선언 한다.
class mybaby {
    public static void main( String[] args ) {
        // 변수 지정        
        String baby = "My baby old is ";
       
        // 상수 지정
        int old = 3; 

        // 지정한 변수와 상수 그리고 문자를 같이 출력한다.
        System.out.println( baby + old + " years." );
    }
}

변수와상수.java





// 저장하고 컴파일 & 실행 해 본다.

    $ javac mybaby.java

    $ java mybaby


    - 다음과 같이 출력 되는 성공한 것이다.

    My baby old is 3 years.




이전 포스팅 에서는 간단하게 문자를 출력 시키는 JAVA 프로그램을 만들어 보았다.

이번에는 변수와 상수를 배우고 지정하여 그것을 문자와 함께 같이 합하여 출력해 보도록 할 것이다.

먼저, 변수에 대해 말해 보자면

간단히 말해서 문자에 문자를 지정하여 사용하는 것이고

    예) when = "Saturday night";  

상수는 그것이 숫자로 활용 되어서 문자에 숫자를 지정하는 것이라고 할 수 있다.

    예) clock = 21;

여기서 다른 점은 변수 지정은 "_" 가 들어 가지만 상수 지정은 숫자 그 자체를 사용하기 때문에 그것이 필요치 않다는 것이다.

자 그렇다면 지금부터 본격적으로 프로그래밍을 해보도록 하자.




mybaby.java

// 클래스 이름을 선언 한다.
class mybaby {
    public static void main( String[] args ) {
        // 변수 지정        
        String baby = "My baby old is ";
       
        // 상수 지정
        int old = 3; 

        // 지정한 변수와 상수 그리고 문자를 같이 출력한다.
        System.out.println( baby + old + " years." );
    }
}

변수와상수.java





// 저장하고 컴파일 & 실행 해 본다.

    $ javac mybaby.java

    $ java mybaby


    - 다음과 같이 출력 되는 성공한 것이다.

    My baby old is 3 years.



도움이 되셨다면 '♡' 버튼을 꼭눌러 주시면 감사 하겠습니다. ^_^



+ Recent posts