[Linux-vim] vim에디터 사용하기 6 - tar, yad ( list, CRUD model GUI 구현)
# 정리
** +=로 배열을 연결하여 데이터를 넣을 수 있다.
** 쉘 문법에서는 함수의 콜이 함수 정의보다 선행할 수 없다.
# tar - 아카이브와 압축
//리눅스에서는 윈도우와 달리 "묶기(아카이브)"와 "압축"이 별도로 고려된다.
//압축없이 하나의 파일로 묶는 것을 "아카이브"라고 한다.
- (tar, tar.gz, tar.bz ..) 형태로 묶는 형식과 압축 형식에 대한 확장자 별도로 온다.
- .tar : 여러 파일 혹은 디렉토리를 하나의 파일로 묶는 확장자는 tar이다.
- .gz : gzip이 대표적이나, 압축형식은 옵션에 따라 여러 종류가 있다. (ex.gzip, gunzip, bzip, bunzip..)
//$tar [옵션] [파일명] (압축시 - 선택 범위) 형태로 실행한다.
< v와 f는 무조건 붙인다고 생각하자. >
- $tar cvf (생성파일명) (대상 선택 조건) = tar파일 생성
- $tar xvf (생성파일명) = tar 파일 풀기
- $tar zcvf (생성파일명) (대상 선택 조건) = tar파일 생성과 gzip압축
- $tar zxvf (생성파일명) = tar.gz 파일 풀기
- $tar rvf (생성파일명) (대상 선택 조건) = 기존 tar파일에 다른파일 추가로 묶기
- $tar tvf (생성파일명) = tar파일에 묶인 파일 확인
//옵션 상세 설명
-c : 지정된 파일이나 디렉터리를 묶어 하나의 tar파일 생성 (손으로 쥐는 모양으로 기억하자)
-x : 생성된 tar파일 풀기 (묶인 것을 잘라내는 가위 모양으로 기억하자)
-v : 명령 실행 시, 작업되어지는 파일명을 보여준다.
-f : 생성될 tar파일에 대한 이름 지정 ( **이름이 있어야 압축 풀 때도 편리하게 풀 수 있다.)
-t : tar 파일에 묶여있는 파일의 목록 출력
-z : gzip 관련 옵션으로 tar.gz 파일 생성에 사용
-j : bzip2 관련 옵션으로 tar.bz2 파일 생성에 사용
-J : xz 관련 옵션으로 tar.xz 파일 생성에 사용
# yad - 앞 글에 이어서 추가 공부
( 4.list : 배열 데이터 표시 )
//배열 혹은 배열로 표현할 수 있는 형태의 데이터가 있어야한다.
- ex. ( kim|admin|1234|2202-03-14 lee|admin|5678|2202-03-13 ... )
// (--list옵션) 배열 데이터를 표로 표현할 수 있다.
- 표에 나온 한 덩어리의 데이터(1행 = 리스트 1줄)씩 선택할 수 있게된다.
- 한 덩어리의 데이터 수와 컬럼 수가 맞지 않으면 표가 꼬이므로, 컬럼 작성에 주의한다.
- 더블클릭해도 값을 받아온다.("OK"버튼과 동일 효과)
( 5.CRUD 1 : selectAll GUI 구현 실습 )
** yad 옵션 안내 : https://www.systutorials.com/docs/linux/man/1-yad/
//yad 추가 옵션
- -- width 650 -- height 300 : 창 크기 650 * 300으로 조절
- --image=random.png : random.png 이미지 추가 (동일 이름의 이미지가 없는 경우, 임의의 기본 이미지가 삽입됨)
- --text="<span color='Blue' font='Monospace 30'>selectAll</span>" : 글자 삽입 및 폰트 지정
- --text-align=center : 삽입 글자 가운데 정렬
- --button=update --button=insert --button=delete : 버튼 추가 (좌측부터 0 ,1, 2, .. 순으로 result 값이 할당된다)
( 6.CRUD 2 : insert/update/delete GUI 구현 실습 )
//Delete page - 아래 주석 2줄을 사용하면 if 조건문에는 깔끔하게 YES를 쓸 수 있다(예문 참조).
# tar - 아카이브와 압축
//리눅스에서는 윈도우와 달리 "묶기(아카이브)"와 "압축"이 별도로 고려된다.
//압축없이 하나의 파일로 묶는 것을 "아카이브"라고 한다.
- (tar, tar.gz, tar.bz ..) 형태로 묶는 형식과 압축 형식에 대한 확장자 별도로 온다.
- .tar : 여러 파일 혹은 디렉토리를 하나의 파일로 묶는 확장자는 tar이다.
- .gz : gzip이 대표적이나, 압축형식은 옵션에 따라 여러 종류가 있다. (ex.gzip, gunzip, bzip, bunzip..)
//$tar [옵션] [파일명] (압축시 - 선택 범위) 형태로 실행한다.
< v와 f는 무조건 붙인다고 생각하자. >
- $tar cvf (생성파일명) (대상 선택 조건) = tar파일 생성
- $tar xvf (생성파일명) = tar 파일 풀기
- $tar zcvf (생성파일명) (대상 선택 조건) = tar파일 생성과 gzip압축
- $tar zxvf (생성파일명) = tar.gz 파일 풀기
- $tar rvf (생성파일명) (대상 선택 조건) = 기존 tar파일에 다른파일 추가로 묶기
- $tar tvf (생성파일명) = tar파일에 묶인 파일 확인
//옵션 상세 설명
-c : 지정된 파일이나 디렉터리를 묶어 하나의 tar파일 생성 (손으로 쥐는 모양으로 기억하자)
-x : 생성된 tar파일 풀기 (묶인 것을 잘라내는 가위 모양으로 기억하자)
-v : 명령 실행 시, 작업되어지는 파일명을 보여준다.
-f : 생성될 tar파일에 대한 이름 지정 ( **이름이 있어야 압축 풀 때도 편리하게 풀 수 있다.)
-t : tar 파일에 묶여있는 파일의 목록 출력
-z : gzip 관련 옵션으로 tar.gz 파일 생성에 사용
-j : bzip2 관련 옵션으로 tar.bz2 파일 생성에 사용
-J : xz 관련 옵션으로 tar.xz 파일 생성에 사용
//실습 해보기 - tar 파일 만들기 > 대상 파일 삭제하기 > 압축 풀기
pi@raspberry:~/practice/temp $ tar -cvf tarexample.tar sh*
pi@raspberry:~/practice/temp $ tar -xvf tarexample.tar
pi@raspberry:~/practice/temp $ tar -zcvf tarexample.tar.gz sh*
pi@raspberry:~/practice/temp $ tar zxvf tarexample.tar.gz
** +=로 배열을 연결하여 데이터를 넣을 수 있다.
# yad - 4.list : 배열 데이터 표시
//배열 혹은 배열로 표현할 수 있는 형태의 데이터가 있어야한다.
- ex. ( kim|admin|1234|2202-03-14 lee|admin|5678|2202-03-13 ... )
//--list --column=컬럼명 ~ "${배열변수명[@]}" 형태로 사용된다.
- (--list옵션) 배열 데이터를 표로 표현할 수 있다.
- 표에 나온 한 덩어리의 데이터(1행 = 리스트 1줄)씩 선택할 수 있게된다.
- 한 덩어리의 데이터 수와 컬럼 수가 맞지 않으면 표가 꼬이므로, 컬럼 작성에 주의한다.
- 더블클릭해도 값을 받아온다.("OK"버튼과 동일 효과)
-------------------------------------------
# yad - 5.CRUD 1 : selectAll (DB 연동 대비 GUI 구현 실습)
- IFS="| " read -ra rows <<< $vos : 텍스트 값 배열로 변경
- 함수 selectAll() 에 할당
** 쉘 문법에서는 함수의 콜이 함수 정의보다 선행할 수 없다.
//yad 추가 옵션
- -- width 650 -- height 300 : 창 크기 650 * 300으로 조절
- --image=random.png : random.png 이미지 추가 (동일 이름의 이미지가 없는 경우, 임의의 기본 이미지가 삽입됨)
- --text="<span color='Blue' font='Monospace 30'>selectAll</span>" : 글자 삽입 및 폰트 지정
- --text-align=center : 삽입 글자 가운데 정렬
- --button=update --button=insert --button=delete : 버튼 추가 (좌측부터 0 ,1, 2, .. 순으로 result 값이 할당된다)
https://www.systutorials.com/docs/linux/man/1-yad/
#!/bin/bash
clear
pwd
echo $0
echo "----------------------"
# 더미 데이터 준비
#score=(1 yang 90 91 92)
#score+=(2 kim1 81 82 83)
#score+=(3 kim2 81 82 83)
#score+=(4 kim3 81 82 83)
#score+=(5 kim4 81 82 83)
#score+=(6 kim5 81 82 83)
vos="1|kim1|99|88|77 "
vos+="2|kim2|99|88|77 "
vos+="3|kim2|99|88|77 "
vos+="4|kim2|99|88|77 "
vos+="5|kim2|99|88|77 "
vos+="6|kim2|99|88|77 "
vos+="7|kim2|99|88|77 "
vos+="8|kim2|99|88|77 "
echo "vos.length:"${#vos}
IFS="| " read -ra rows <<< $vos
echo ${rows[@]}
echo "rows.length:"${#rows[@]}
#echo ${score[@]}
# GUI 구현 구문 selectAll 함수에 할당
selectAll(){
row=$(yad --width 650 --height 300 --title "List" --list --image=random.png --text="<span color='Blue' font='Monospace 30'>selectAll</span>" --text-align=center --button=update --button=insert --button=delete --column=NUM --column=NAME --column=KOR --column=ENG --column=MATH "${rows[@]}") result=$?
if ((result==0));then
echo "Go update"
elif ((result==1));then
echo "Go insert"
elif ((result==2));then
echo "Go delete"
fi
}
#end selectAll
selectAll
exit 0
-------------------------------------------
# yad - 6.CRUD 2 : insert/update/delete (DB 연동 대비 GUI 구현 실습)
// 각 페이지를 실행하면 터미널로 데이터는 넘어오지만 , 파일 실행 시마다 SelectAll에서 매번 데이터를 새로 선언하기 때문에 데이터의 변동은 없음.
//Delete page - 아래 주석 2줄을 사용하면 if 조건문에는 깔끔하게 YES를 쓸 수 있다.
(데이터가 넘어올 떄 "|YES"형태로 넘어오기 떄문에 이렇게 된 것임)
- #cb=$(echo $delete_form | awk 'BEGIN {FS="|"} {print $1}')
- #if [ $cb = 'YES' ];then
#!/bin/bash
clear
pwd
echo $0
echo "----------------------"
################## insert page #################
insert(){
echo
echo "insert()..."
form=$(yad --width 300 --title "Insert Form" --form --field "name" --field "kor" --field "eng" --field "math" "kim" "99" "88" "77") result=$?
echo $form
echo $result
if ((result==0));then
echo "OK"
name=$(echo $form | awk 'BEGIN {FS="|"} {print $1}')
kor=$(echo $form | awk 'BEGIN {FS="|"} {print $2}')
eng=$(echo $form | awk 'BEGIN {FS="|"} {print $3}')
math=$(echo $form | awk 'BEGIN {FS="|"} {print $4}')
printf "%s,%d,%d,%d\n" $name $kor $eng $math
else
echo "Cancel"
fi
}
################### update page ###################
update(){
echo
echo "update()..." $1 $2 $3 $4 $5
form=$(yad --width 300 --title "Update Form" --form --field "num" --field "name" --field "kor" --field "eng" --field "math" "$1" "$2" "$3" "$4" "$5") result=$?
echo $form
echo $result
if ((result==0));then
echo "OK"
num=$(echo $form | awk 'BEGIN {FS="|"} {print $1}')
name=$(echo $form | awk 'BEGIN {FS="|"} {print $2}')
kor=$(echo $form | awk 'BEGIN {FS="|"} {print $3}')
eng=$(echo $form | awk 'BEGIN {FS="|"} {print $4}')
math=$(echo $form | awk 'BEGIN {FS="|"} {print $5}')
printf "%d,%s,%d,%d,%d\n" $num $name $kor $eng $math
else
echo "Cancel"
fi
}
#################### delete page ###################
delete(){
echo
echo "delete()..." $1 $2
delete_form=$(yad --width 300 --title "DELETE" --text="$1 $2 DeleteOK???" --form --field "Agree?:CB" "YES!NO") result_delete=$?
if ((result_delete==0));then
cb=$(echo $delete_form)
echo $cb
#아래 주석 2줄을 사용하면 if 조건문에는 깔끔하게 YES를 쓸 수 있다.
#데이터가 넘어올 떄 "|YES"형태로 넘어오기 떄문에 이렇게 된 것임.
#cb=$(echo $delete_form | awk 'BEGIN {FS="|"} {print $1}')
#if [ $cb = 'YES' ];then
if [ $cb = 'YES|' ];then
echo "Delete OK..."
else
echo "Not Agree..."
fi
fi
}
################### selectAll page ################
selectAll(){
vos="1|kim1|99|88|77 "
vos+="2|kim2|99|88|77 "
vos+="3|kim2|99|88|77 "
vos+="4|kim2|99|88|77 "
vos+="5|kim2|99|88|77 "
vos+="6|kim2|99|88|77 "
vos+="7|kim2|99|88|77 "
vos+="8|kim2|99|88|77 "
echo "vos.length:"${#vos}
IFS="| " read -ra rows <<< $vos
echo ${rows[@]}
echo "rows.length:"${#rows[@]}
row=$(yad --width 650 --height 300 --title "List" --list --image=random.png --text="<span color='Blue' font='Monospace 30'>selectAll</span>" --text-align=center --button=update --button=insert --button=delete --column=NUM --column=NAME --column=KOR --column=ENG --column=MATH "${rows[@]}") result=$?
if ((result==0));then
echo "OK" "Go update"
echo $row
num=$(echo $row | awk 'BEGIN {FS="|"} {print $1}')
name=$(echo $row | awk 'BEGIN {FS="|"} {print $2}')
kor=$(echo $row | awk 'BEGIN {FS="|"} {print $3}')
eng=$(echo $row | awk 'BEGIN {FS="|"} {print $4}')
math=$(echo $row | awk 'BEGIN {FS="|"} {print $5}')
printf "%d %s %d %d %d" $num $name $kor $eng $math
echo
echo "----------------------"
update $num $name $kor $eng $math
elif ((result==1));then
echo "Go insert"
insert
elif ((result==2));then
echo "Go delete"
echo $row
num=$(echo $row | awk 'BEGIN {FS="|"} {print $1}')
name=$(echo $row | awk 'BEGIN {FS="|"} {print $2}')
delete $num $name
fi
}
#end selectAll
selectAll
exit 0