1) 2자리 이상 숫자 쉘 연산

 

#!/bin/bash

add=$[$1 + $2]
sub=$[$1 - $2]
mul=$[$1 * $2]
div=$[$1 / $2]

rst=$[${10} + ${11}]

echo add : $add sub : $sub mul : $mul div : $div
echo
echo rst : $rst

>> . test.sh 10 20 30 40 50 60 70 80 90 100 110

=> {}로 닫아주어야지 그러지 않을 경우 1자리로 인식한다.


 

 


 

 


 

2) 인자를 interactive 하게 받기

 

#!/bin/bash
echo -n "Input your name : "
read name

 

echo -n "Input your age : "
read age

 

echo NAME : $name AGE :  $age

 

 


 

 


 

3) 인자로 Password(입력을 안보이게 받기)를 받기 :

 

#!/bin/bash

read -p "ID: " id
read -s -p "Password : " password

echo
echo Your id: $id, Password: $password

 

 

 

 


 

 


 

 


4) password 입력 시 *로 찍히게 하기 :

 

#!/bin/bash

read -p "ID: " id
#read -s -p "Password : " password


prompt="Password : "

while read -p "$prompt" -r -s -n 1 char
 do
  if [[ $char == $'\0' ]]
     then break;
  fi
    prompt='*'
    password+=$char
 done

echo
echo Your id: $id, Password: $password

 

1) test.sh (pringout time and date & who logged on the server)

 

#! /bin/bash
#Test Shell Program

#pringout time and date
echo time and date :
date

#who logged on the server
echo who logged on the server :
who

 

 

 


 

 


 

 


2) test2.sh (Test how to use environment variables)

 

#!/bin/bash
#Test how to use environment variables

echo Display user information
echo user id : $USER
echo UID : $UID
echo HOME : $HOME

 

 

 


 

 


3) test3.sh (숫자 계산)

 

#!/bin/bash
num1=10
num2=20
num3=30
r_add=$(expr $num1 + $num2 + $num3)
r_sub=$(expr $num2 - $num1)
r_mul=$(expr $num1 \* $num2)
r_div=$(expr $num2 / $num1)
echo $r_add
echo $r_sub
echo $r_mul
echo $r_div



 

 

 


 

 


4) test4.sh (숫자 계산)

 

#!/bin/bash

num1=10
num2=20
num3=30

r_add=$[$num1 + $num2 + $num3]
r_sub=$[$num2 - $num1]
r_mul=$[$num1 * $num2]
r_div=$[$num2 / $num1]

echo $r_add
echo $r_sub
echo $r_mul
echo $r_div

 

 

 

5) shell파일에 인자 넘기기


#!/bin/bash

add=$[$1 + $2]
sub=$[$1 - $2]
mul=$[$1 * $2]
div=$[$1 / $2]

echo add : $add sub : $sub mul : $mul div : $div

=> 실행 :

. test6.sh 3 5

 

*환경 변수 확인

$env

 

*Path(global) 확인

$ env $PATH

또는

$ echo $PATH

 

Path를 만들때는 지우고 새로 만드는 것이 아니라, append를 해야 한다. 지울 경우에는 :

$ unset  ...

 


 

 

 


 

 


 

*쉘 인자 변수 및 특수 변수(중요)

$0 실행된 쉘 스크립트의 이름

$# 스크립트에 넘겨진 인자의 개수

$$ 현재 실행되고 있는 쉘 스크립트의 프로세스 번호

$1~$n

$? 이전 명령어가 제대로 실행됐으면(0으로 표시)

    이전 명령어에 에러가 있으면(127)

    코드종류:
    0 : 명령이 성공적으로 완료됨

    1 : 일반 알 수 없는 오류

    2 : 쉘 명령을 잘못 사용함

    126 : 명령을 실행할 수 없음

    127 : 명령을 찾을 수 없음

    128 : 잘못된 종료 매개변수

    128+x : 치명적인 오류로 리눅스 신호 x를 포함

    130 : <Cntl> + <C> 로 명령이 완료됨

    255 : 범위를 벗어난 종료 상태


 

여기서는 '127 : 명령을 찾을 수 없음'


 

 


 

 


*지역변수를 전역변수로 만들기 :


$echo $my_name

kosta


$ echo $PATH
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/opt/aws/bin:/home/aiadm/.local/bin:/home/aiadm/bin:/usr/local/bin

$ PATH=$PATH:/home/aiadm/lab/mybin/
$ echo $PATH
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/opt/aws/bin:/home/aiadm/.local/bin:/home/aiadm/bin:/usr/local/bin:/home/aiadm/lab/mybin/

 

 

PATH=$PATH:/$HOME/lab/mybin

export PATH
 

 

 


 

 


*실행했던 user 확인 :

$ who

 

*오늘 날짜 확인 :

$ date

 

 

*서브쉘로 실행 / 쉘 자체를 실행

 

1) 서브쉘로 돌리기 위해서는

./test.sh

=>하지만 이렇게 할 경우 permission denied가 뜬다. 실행가능한 파일로 만들어주기 위해서는 chmod+x test.sh 하고 입력해주어야 한다.

 

2) 쉘 자체를 실행시키려면

. test.sh

 

 

*압축(tar) :

tar -cvf 하하하.tar (tar로 압축)

tar -zcvf 하하하.tar.gz (gzip으로 압축)

tar -xvf 하하하.tar(압축풀기)

 

*실행중인 프로세스 확인 :
ps -ef

ps -f

 

*실행중인 프로세서 Kill :
kill -9 숫자

(ex: kill -9 123)

 

*CPU 및 메모리 확인 :
top           

                                                                                                          

 

 

 


 

 


*환경변수 :

같은 시스템이더라도...

 

창을 새로 띄울때마다 Shell이 달라진다.

Shell이 가지고 있는 환경변수가 계속 달라진다.


'-' 가 붙어 있느냐 없느냐에 따라 차이가 큼

-는 로그인 Shell(환경변수를 모두 가지고 오겠다는것!!)

(ex: su - root <==> su root)


 

 


 

 


*서브쉘이란?
쉘 명령어를 괄호()로 묶어서 실행하면 (프로세스 리스트) 서브 쉘로 실행됨.

$ ((sleep 10); sleep 20) &

$ ps --forest

로 확인

uname -r

cd /lib/modules

uname -r

내가 사용하고 있는  linux 버전 확인

cd /lib/modules/$(uname -r) = cd /lib/modules/4.8.0-36-generic$ ls

cd ${pwd}

 

./<shell script>.sh => 서브쉘로 돌게 된다.


 

*co-processing 이용하기

coproc sleep 10

Subshell로 백그라운드로 돈다

 

 


 

 


 

*파일권한변경:
chmod

chown

 

 

*부모쉘과 자식쉘(Hirarchy 상으로 실행시킨 부모 쉘 확인):
ps --forest

 

 

 

여기서 process 22482(PID)를 실행한 것은 21687(PPID)이다.

 

*절대경로 확인(builtin인지 여부 확인):

type -a ...

(ex: type -a pwd)

 

*Shell이 가지고 있는 환경변수는 아래와 같이 표현한다:
(pwd; ls; cd /etc; pwd; cd; pwd; ls; echo $BASH_SUBSHELL)

 

Virtual Box 설치 (vbox5.2.4.zip)

 

 


 

 


 

 


*Shell Programming 특성 :

- Compile과정이 없음

- 중간에 에러가 났을 때 Next를 진행

- 명령어의 자동화툴


*러닝 맵:

- Linux로 좀 더 완성도 높은 제품을 만들기 위해서는 C프로그래밍을 알아야 한다(디바이스 제어, 포인터를 자유롭게 사용할 수 있어야...)
- 임베디드 C프로그래밍과 코드 최적화

 

Virtual Box에 ubuntu 실행

 

 

 

 

 

 

 

 


 

 


 

 

 

 

리눅스 런 레빌(Run Level)

*확인방법:
-> $runlevel

-> $who -r

 

 

-> 데비안/우분투 계열 :

-> 레드헛 계열 : 가장 많이 사용하는 Centos


/etc/init, /etc/init/rc-sysinit.conf, /etc/init/rc, /etc/init.d ...

/etc/는 서버의 기본 구성정보를 관리한다

 

메모리를 Mapping해주는 기능도 매우 중요하다,

RAM과 CPU 사이의 통신

swap 영역이 지정되어 있음...백업

 

Ubuntu를 띄우고

$ifconfig

를 입력하면 ip 정보를 확인할 수 있다.

그런데 로컬 PC CMD와 상이...

 

Ubuntu 창 상단에 장치 > 네트워크 설정으로 이동

어뎁터에 브리지 선택

 

 

command 창에 $sh 입력 :

(Shell Script를 작성 시 #!/bin/sh 을 앞에 추가하지 않으면 실행이 안 될 수 있다)

 


 

 

 


 

 


*쉘(Shell)이란?

- Shell은 사용자가 입력한 모든 명령어를 읽어서 실행하고 출력하는 프로그램!!

 

*Shell 종류:

- bash

- sh

- csh

- ksh

- zsh
- dash(ash을 Debian 버전으로 만들었으나 Debian의 기본 쉘이 아님)

 

*OS에서 어떤 Shell을 실행하는지 확인 방법 (여기서는 bash):
 

 

 

*커맨드 설명(온라인 메뉴얼) 확인방법 :


$man ...

(ex: $man pts)


 

안녕하세요, 오늘은 알렉사 스킬 개발 방법에 대해 말씀드리겠습니다.

차례대로 따라하시면 됩니다.^^

 

아래와 같은 스킬을 만들어 볼건데요.

 

 


 

 


 

 


스킬 정보를 입력합니다. Invocation Name은 Alexa에서 Skill을 오픈할 때 사용합니다. Currency라면 "Alexa, Open Currency Skill"이 되겠죠.

 

 

이제 Interaction Model을 만듭니다.

1) Intent Schema입니다:

 

interaction model.txt

 


2) Custom Slot Types입니다:

 

Custom Slot Types으로 베트남 dong, 일본 yen, 유럽 euro, 영국 pound, 중국 yuan 등을 지정하였습니다.


 

3) Sample Utterances 입니다:

 

GetCurrencyIntent dollar to {targetCurrency} currency
GetCurrencyIntent get dollar to {targetCurrency} currency
GetCurrencyIntent send me dollar to {targetCurrency} currency for today
GetCurrencyIntent get today's currency for dollar to {targetCurrency} currency
GetCurrencyIntent send me dollar to {targetCurrency} currency
GetCurrencyIntent give me dollar to {targetCurrency} currency

 

sample utterances.txt


 

 


 

 

위에서 지정한 GetCurrencyIntent를 invoke 하기 위한 발화를 지정합니다. 여기까지 하셨으면 Alexa Skill Kit에서 할 일은 거의 끝났습니다.

 

다음으로 Lambda Function 생성 을 시작해야 하는데요.

Node.js나 Python 중에 편하신 걸로 하시면 됩니다!!

여기에서는 Node.js로 하겠습니다.

 

1) Lambda 함수 생성에서 alexa-skill-kit-sdk-factskill 선택

 


 

2) 원하는 Name을 지정하고, Lambda_basic_execution을 선택 후 Create 버튼 클릭

 


3) ARN을 Copy해서 메모장에 Paste 해놓습니다.

 


 

 


 

 


4) Trigger로 Alexa Skills kit을 선택

 

ARN을 Copy 해놓습니다.

 

 


이제 Intent에 따라 Trigger될 Function을 작성하여 업로드해야겠죠?

 

로컬에서 Node.js Code를 작성합니다.

코드는 첨부파일을 참고 바랍니다. 메일을 보내는 서버도 만드셔야 하는데 다음 포스팅에 같이 올리겠습니다. 소스 상에서는 메일 서버 주소를 http://아이피:포트/ 로 표시하였습니다(Lambda에 바로 하는 방법도 있습니다^^;).

src_final.zip



Alexa developer에서 skill을 위한 intent가 정의되어 있을 경우 호출됩니다.

intentName이 GetCurrencyIntent일 경우 handling 함수를 호출합니다.

 

Intent handling 함수 작성

E-mail 서버로 http post request =>

제목 및 사용자가 선택한 요청국 통화를 parameter로 전달합니다.

 

 


 

이제 코드를 다 작성했으니 index.js 실행에 필요한 모듈을 설치합니다!!

- 로컬에 node.js를 설치합니다.
- 위에서 작성한 index.js가 설치되어 있는 Path로 이동합니다.
- http request에 필요한‘request’ 모듈을 설치합니다.

 

 

node_modules 생성 확인 및 zip 파일로 압축


 

 

 

 

 

Zip 파일 업로드

 

 


 

 

Zip 파일 Upload가 끝났으면 이제 테스트를 진행합니다:

 

Alexa Skills Kit Endpoint 설정(앞에서 Copy했던 ARN을 붙여넣습니다.)

 

 

마지막으로 Alexa Skill 테스트를 진행합니다.

 

 

 

Sample Utterances를 참고하여 예상 발화를 입력해보고 결과가 정상적으로 오는지 확인하면 끝...

 

Amazon 디바이스가 있으시면 그걸로 테스트 하셔도 되고 아니면, 아래 사이트로 접속하셔서 테스트를 진행하시면 됩니다.

https://echosim.io/welcome?next=%2F

 

이상으로 알렉사 스킬 개발 관련 포스팅을 마치겠습니다.

감사합니다.^^



 


 

 

+ Recent posts