[Linux-vim] vim에디터 사용하기 6 - curl, awk, yad(basic, entry, form), pattern comparison(regular expression)
# 정리
** 프로토콜 : 컴퓨터들 간의 원활한 통신을 위해 지키기로 약속한 규약(ex. HTTP, HTTPS, FTP, FTPS, STMP 등).
** yad = Yet another Dialog
** 프롬프트(prompt) : 사용자의 명령을 받아들일 준비가 되었음을 모니터에 나타내는 표시.
** 명령 프롬프트(command prompt) : 컴퓨터 터미널 또는 터미널 에뮬레이터의 커멘드 라인 인터페이스(CLI)의 명령줄 대기모드를 말한다.
** 정규식(정규표현식) 이란?
- 문자열의 집합을 표현하는데 사용하는 언어화된 규칙(형식 언어)이다.
- 다수의 문자열에 대해 반복적인 처리가 필요한 '대조', '검색', '치환' 과정에서 주로 사용된다.
** 추가 기능을 추가 하는 방법
- java - 라이브러리 파일 추가
- JS - 00.js 파일 추가 혹은 라이브러리 URL 등록
- shell - 패키지 인스톨
# curl - 데이터 통신
//프로토콜을 이용해 네트워크 상의 정보를 읽어오는데 사용하는 명령어이다.
- ( Java - ajax / JS - http객체 )로 정보를 읽어오는 것과 유사하다 .
//패키지를 설치해야 사용할 수 있다.
- $ sudo apt install -y curl
//주소를 입력해서 페이지 정보를 받아올 수 있다.
- naver, google, 로컬서버주소 등..
# pattern - 패턴 비교
//정규식을 활용하여 패턴을 파악한다.
- validate(검증) 기능을 구현할 때 많이 사용된다.
//(정규식) ^$ : ^(패턴시작) ~내용~ $(패턴 종료)
//if문으로 패턴 조건 확인 시 [[ =~ ]]를 사용하며, if와 [[ ]], [[ ]] 안 전부 띄어쓰기 넣어줘야한다.
# awk - 데이터 추출
< *중요* 쉘스크립트에서 지원하는 GUI (yad) 와 경량화 DB (sqlite)에서 데이터를 보내주는 형식이 "|"로 구분되어있어, 많이 사용하게 된다. >
//지정된 구분자로 잘라서 텍스트 추출할 수 있다.
- ( ~ | awk 'BEGIN {FS="구분자"} {print $숫자}' )형태로 사용한다.
- 변수 안에 있는 덩어리 데이터를 추출하는 것이 가능해진다.
명령 프롬프트에서도 실행해볼 수 있다.
// ( IFS="| " read -ra rows <<< $vos )는 한 줄로 다적어야한다.
- (-ra옵션) ReadArray 옵션 : 우측 변수의 텍스트 정보를 읽어, 파이프와 공백을 이용해 구분 데이터를 구분한다.
- 조건에 구분자 "|"와 " "가 같이 들어간 것이다.
- 도출 결과에는 "|"가 다 사라지므로, 파이프"|"를 공백으로 대체해서 배열 변수에 넣으라는 의미와 같은 명령이다.
# yad
<yad 설정 문장은 줄 바꿈을 하면 인식하지 못한다.>
(1. Basic)
//쉘의 기본적인 GUI 로 패키지 추가 설치가 필요하다.
- $sudo apt install -y yad
- 설치 완료 후, $yad 하면 기본 알림창이 뜨는 것을 확인 할 수 있다.
//버튼 입력에 따른 결과값(result=$?)을 통해 분기를 만들 수 있다.
- ok : 0 / cancel : 1의 값을 가진다.
//옵션으로 다양한 형태의 창을 만들 수 있다 (아래 예문은 삭제창 만들기).
- (--title옵션) 창의 제목을 정해줄 수 있다.
- (--width옵션) 창의 폭을 정해줄 수 있다.
(2. Entry option)
// 한 줄의 텍스트를 입력할 수 있게 설정해줄 수 있다. (JS의 prompt()와 유사)
- (--text) text옵션으로 엔트리 제목을 넣을 수 있다.
- 기본 값을 넣으면 변경 입력이 안되고 옵션이 있는 것처럼 뜨므로, 개발 후에 남기지 않도록 주의해야한다.
//entry 설정이 텍스트 부분들을 담당하고, result가 버튼 값을 담당한다.
(3. Form option)
<옵션은 세가지 형태를 혼용할 수 있으나 1번을 권장.(--옵션명="설정값"/--옵션명=설정값 /--옵션명 "설정값")>
//(--from) & (--field) 옵션을 사용하며, --entry 옵션과 달리 두 개 이상의 값을 넣을 때 사용한다.
- 기본값을 부여할 때는 필드 선언 뒤에 필드를 선언한 순서대로 넣어주면된다.
//옵션 종류
- (--field="필드값:CB ~ "선택지1" "선택지2" ...) 형태로 특정 필드값의 세부 선택지를 만든다.
- (--field="필드 값:CHK" ~ TRUE 또는 FALSE) 형태로 특정 필드값의 체크박스를 만둔다.
* TRUE / FALSE : 체크박스의 기본 상태 설정
- (--field="필드 값:FL" ~ "파일 검색창 기본 경로") 형태로 파일을 선택할 수 있게 만든다.
* FL(file) 옵션 - 기본 경로는 ROOT( / )로 시작해야하는 것에 주의 (ex. /home/pi)
//받은 form 정보는 |awk 옵션으로 잘라서 사용하게 된다.
** 프로토콜 : 컴퓨터들 간의 원활한 통신을 위해 지키기로 약속한 규약(ex. HTTP, HTTPS, FTP, FTPS, STMP 등).
# curl - 데이터 통신
//프로토콜을 이용해 네트워크 상의 정보를 읽어오는데 사용하는 명령어이다.
- ( Java - ajax / JS - http객체 )로 정보를 읽어오는 것과 유사하다 .
//패키지를 설치해야 사용할 수 있다.
- $ sudo apt install -y curl
//주소를 입력해서 페이지 정보를 받아올 수 있다.
- naver, google, 로컬서버주소 등..
//로컬 주소로 임의의 데이터 통신 실습
> springs 준비
- 프로젝트 pom에 jackson 디피던시 3종 설치 > VO생성, 컨트롤러로 List타입 데이터 return
- 배정된 서블릿 주소로 넘어오는 데이터 확인
> 터미널 확인 (sh 파일 실행으로 json 데이터 확인)
#!/bin/bash
clear
pwd
echo $0
echo "----------------------------"
#pi@raspberry:~/shellPro $ sudo apt install -y curl
curl http://000.000.00.0:8090/board/json_sh18curl.do
echo
echo "----------------------------"
curl http://000.000.00.0:8090/board/json_sh18curl.do |jq '.'
echo "----------------------------"
curl http://000.000.00.0:8090/board/json_sh18curl.do |jq '.[0].title'
echo "----------------------------"
curl http://000.000.00.0:8090/board/json_sh18curl.do |jq '.[1].content'
echo "----------------------------"
curl http://000.000.00.0:8090/board/json_sh18curl.do |jq '.[2].writer'
exit 0
** 추가 기능을 추가 하는 방법
- java - 라이브러리 파일 추가
- JS - 00.js 파일 추가 혹은 라이브러리 URL 등록
- shell - 패키지 인스톨
** 정규식(정규표현식) 이란?
- 문자열의 집합을 표현하는데 사용하는 언어화된 규칙(형식 언어)이다.
- 다수의 문자열에 대해 반복적인 처리가 필요한 '대조', '검색', '치환' 과정에서 주로 사용된다.
# pattern - 패턴 비교
//정규식을 활용하여 패턴을 파악한다.
- validate(검증) 기능을 구현할 때 많이 사용된다.
//(정규식) ^$ : ^(패턴시작) ~내용~ $(패턴 종료)
//if문으로 패턴 조건 확인 시 [[ =~ ]]를 사용하며, if와 [[ ]], [[ ]] 안 전부 띄어쓰기 넣어줘야한다.
#!/bin/bash
clear
pwd
echo $0
echo "----------------------------"
read -p "Input date[ex.2202-03-14]:" date
#date="2022-03-14d"
echo $date
pat_date="^[0-9]{4}-[0-9]{2}-[0-9]{2}$"
#[[ =~ ]]
if [[ $date =~ $pat_date ]] ; then
echo "good"
else
echo "bad"
fi
exit 0
# awk - 데이터 추출
< *중요* 쉘스크립트에서 지원하는 GUI (yad) 와 경량화 DB (sqlite)에서 데이터를 보내주는 형식이 "|"로 구분되어있어, 많이 사용하게 된다. >
//지정된 구분자로 잘라서 텍스트 추출할 수 있다.
- ( ~ | awk 'BEGIN {FS="구분자"} {print $숫자}' )형태로 사용한다.
- 변수 안에 있는 덩어리 데이터를 추출하는 것이 가능해진다.
// ( IFS="| " read -ra rows <<< $vos )는 한 줄로 다적어야한다.
- (-ra옵션) ReadArray 옵션 : 우측 변수의 텍스트 정보를 읽어, 파이프와 공백을 이용해 구분 데이터를 구분한다.
- 조건에 구분자 "|"와 " "가 같이 들어간 것이다.
- 도출 결과에는 "|"가 다 사라지므로, 파이프"|"를 공백으로 대체해서 배열 변수에 넣으라는 의미와 같은 명령이다.
#!/bin/bash
clear
pwd
echo $0
echo "----------------------------"
echo "kim|99|88|77" |awk 'BEGIN {FS="|"} {print $1}'
echo "----------------------------"
vo="kim|99|88|77"
echo $vo |awk 'BEGIN {FS="|"} {print $1}'
echo $vo |awk 'BEGIN {FS="|"} {print $2}'
echo $vo | awk 'BEGIN {FS="|"} {print $3}'
echo $vo | awk 'BEGIN {FS="|"} {print $4}'
echo "----------------------------"
name=$(
echo $vo |awk 'BEGIN {FS="|"} {print $1}'
)
kor=$(
echo $vo |awk 'BEGIN {FS="|"} {print $2}'
)
eng=$(
echo $vo |awk 'BEGIN {FS="|"} {print $3}'
)
math=$(
echo $vo |awk 'BEGIN {FS="|"} {print $4}'
)
echo $name $kor $eng $math
echo "----------------------------"
vos="kim1|99|88|77 kim2|11|22|33"
echo "vos.length:" ${#vos[@]}
echo "vos:" ${vos[*]}
IFS="| " read -ra rows <<< $vos
echo "rows.length:" ${#rows[@]}
echo "rows:" ${rows[*]}
exit 0
** yad = Yet another Dialog
# yad - 1. Basic
//쉘의 기본적인 GUI 로 패키지 추가 설치가 필요하다.
- $sudo apt install -y yad
- 설치 완료 후, $yad 하면 기본 알림창이 뜨는 것을 확인 할 수 있다.
//버튼 입력에 따른 결과값(result=$?)을 통해 분기를 만들 수 있다.
- ok : 0 / cancel : 1의 값을 가진다.
//옵션으로 다양한 형태의 창을 만들 수 있다 (아래 예문은 삭제창 만들기).
- (--title옵션) 창의 제목을 정해줄 수 있다.
- (--width옵션) 창의 폭을 정해줄 수 있다.
#!/bin/bash
clear
pwd
echo $0
echo "----------------------------"
#yad - Yet another Dailog
#sudo apt install -y yad
#OK - 0 / cancel - 1
touch sh21.txt
ls
#alert=$(yad) result=$?
alert=$(yad --width 300 --title "Remove?") result=$?
echo $result $alert
if ((result==0));then
echo "OK"
rm sh21.txt
ls
else
echo "Cancel"
fi
exit 0
------------------------------------------------
** 프롬프트(prompt) : 사용자의 명령을 받아들일 준비가 되었음을 모니터에 나타내는 표시.
** 명령 프롬프트(command prompt) : 컴퓨터 터미널 또는 터미널 에뮬레이터의 커멘드 라인 인터페이스(CLI)의 명령줄 대기모드를 말한다.
# yad - 2. Entry option 한 줄 텍스트 입력 창
// 한 줄의 텍스트를 입력할 수 있게 설정해줄 수 있다. (JS의 prompt()와 유사)
- (--text) text옵션으로 엔트리 제목을 넣을 수 있다.
- 기본 값을 넣으면 변경 입력이 안되고 옵션이 있는 것처럼 뜨므로, 개발 후에 남기지 않도록 주의해야한다.
* 팝업창에 OK버튼을 눌렀을 때 정보가 전송되도록 되어있음.
//entry 설정이 텍스트 부분들을 담당하고, result가 버튼 값을 담당한다.
------------------------------------------------
# yad - 3. Form option 복수의 데이터/타입 입력 창
<yad 설정 문장은 줄 바꿈을 하면 인식하지 못한다.>
<옵션은 세가지 형태를 혼용할 수 있으나 1번을 권장.(--옵션명="설정값"/--옵션명=설정값 /--옵션명 "설정값")>
//(--from) & (--field) 옵션을 사용하며, --entry 옵션과 달리 두 개 이상의 값을 넣을 때 사용한다.
- 기본값을 부여할 때는 필드 선언 뒤에 필드를 선언한 순서대로 넣어주면된다.
//옵션 종류
- (--field="필드값:CB ~ "선택지1" "선택지2" ...) 형태로 특정 필드값의 세부 선택지를 만든다.
- (--field="필드 값:CHK" ~ TRUE 또는 FALSE) 형태로 특정 필드값의 체크박스를 만둔다.
* TRUE / FALSE : 체크박스의 기본 상태 설정
- (--field="필드 값:FL" ~ "파일 검색창 기본 경로") 형태로 파일을 선택할 수 있게 만든다.
* FL(file) 옵션 - 기본 경로는 ROOT( / )로 시작해야하는 것에 주의 (ex. /home/pi)
//받은 form 정보는 |awk 옵션으로 잘라서 사용하게 된다.
#!/bin/bash
clear
pwd
echo $0
echo "----------------------------"
form=$(yad --width 300 --title "Form" --form --field="Language:CB" --field="java:CHK" --field="Linux:CHK" --field="name" --field="tel" --field="ls -l:FL" "Java!Adroid!Linux" TRUE False "kim" "031" "/home/pi/practice" ) result=$?
echo entry: $form
echo result: $result
if ((result==0)); then
echo $form |awk 'BEGIN {FS="|"} {print $1}'
echo $form |awk 'BEGIN {FS="|"} {print $2}'
echo $form |awk 'BEGIN {FS="|"} {print $3}'
echo $form |awk 'BEGIN {FS="|"} {print $4}'
echo $form |awk 'BEGIN {FS="|"} {print $5}'
echo $form |awk 'BEGIN {FS="|"} {print $6}'
else
echo "cancel"
fi
exit 0
#mission 1 : (이름, 국, 영, 수) 입력 폼 만들기 > 입력값 변수할당 > 한줄의 출력문(이름,국,영,수,총점,평균)으로 출력
#mission 2 : (아이디, 비번, 이름, 전화) 입력 폼 만들기 > 입력값 변수할당 > 한줄의 출력문(아이디, 비번, 이름, 전화) 으로 출력
#!/bin/bash
clear
pwd
echo $0
echo "------------mission 1- score----------------"
scoreform=$(yad --title "student score" --form --field "name:CB" --field "kor" --field "eng" --field "math" --field "totalck:CHK" --field "avgck:CHK" --field "dataFile:FL" "kim!lee!han" "99" "88" "77" true false "/home/pi/shellPro") result1=$?
echo scoreform: $scoreform
echo result1: $result1
if ((result==0)); then
name=$(echo $scoreform |awk 'BEGIN {FS="|"} {print $1}')
kor=$(echo $scoreform |awk 'BEGIN {FS="|"} {print $2}')
eng=$(echo $scoreform |awk 'BEGIN {FS="|"} {print $3}')
math=$(echo $scoreform |awk 'BEGIN {FS="|"} {print $4}')
totalchk=$(echo $scoreform |awk 'BEGIN {FS="|"} {print $5}')
avgchk=$(echo $scoreform |awk 'BEGIN {FS="|"} {print $6}')
dataFile=$(echo $scoreform |awk 'BEGIN {FS="|"} {print $7}')
total=$((kor+eng+math))
avg=$((total/3))
grade="F"
if ((avg>=90));then
grade="A"
elif ((avg>=80));then
grade="B"
elif ((avg>=70));then
grade="C"
elif ((avg>=60));then
grade="D"
else
grade="F"
fi
printf "name[%s], kor[%d], eng[%d], math[%d], totalchk[%s], total[%d], avgchk[%s], avg[%.2f], grade[%s], dataFile[%s]\n" $name $kor $eng $math $totalchk $total $avgchk $avg $grade $dataFile
else
echo "cancel"
fi
echo "------------mission 2- member info----------------"
memberinfo=$(yad --title "member info" --form --field "id" --field "pw" --field "name" --field "tel" --field "private info agree:CHK" --field "profileIMG:FL" "admin" "hi123456" "kim" "031" false "/home/pi/shellPro") result2=$?
echo scoreform: $memberinfo
echo result2: $result2
if ((result==0)); then
id=$(echo $memberinfo |awk 'BEGIN {FS="|"} {print $1}')
pw=$(echo $memberinfo |awk 'BEGIN {FS="|"} {print $2}')
name=$(echo $memberinfo |awk 'BEGIN {FS="|"} {print $3}')
tel=$(echo $memberinfo |awk 'BEGIN {FS="|"} {print $4}')
privatechk=$(echo $memberinfo |awk 'BEGIN {FS="|"} {print $5}')
profile=$(echo $memberinfo |awk 'BEGIN {FS="|"} {print $6}')
echo "id:"$id "pw:"$pw "name:"$name "tel:"$tel "privatechk:"$privatechk "profile:"$profile
else
echo "cancel"
fi
exit 0