본문 바로가기

분류 전체보기465

[리눅스] if문 정리 셸스크립트를 처음 접하고 딱 하루 정도가 지날 즈음 든 생각은, 아니, 셸스크립트는 파이썬보다 막장이잖아? 막연하게나마 저런 생각이 들었다. 변수 타입도 없고, 따옴표도 어떤 땐 있으나마나 하고... sh의 "1 2 3 4 5"는 파이썬의 [1, 2, 3, 4, 5]와 같다는 것도 충격이었다. 우선 콤마란 게 필요없다. 어떤 때는 괄호도 필요없다. 또 어떤 경우에는 따옴표도 필요없다ㄷㄷㄷ 하여튼, 셸스크립트의 if문은 파이썬과 상당히 비슷한 면이 있다. 간단한 if문을 써보면 파이썬은 a = 10 if a == 10: print("equal") elif a < 10: print("less than 10") else: print("greater than 10") 이런 느낌이라면, 셸스크립트는 a=9 # 등.. 2024. 2. 10.
[리눅스] sh파일을 리포매팅해주는 shfmt shfmt shfmt는 인스톨해야 한다. `sudo apt install shfmt`를 실행했다. 파일명 참 맘에 든다. SHell ForMaT 잖아? 사용법을 간략히 알아봤는데 vim으로 이렇게 개떡같이 짜놓았어도 `shfmt ifex.sh`를 실행하면 아래처럼 출력해준다. 단, 파일이 바뀌어 있지는 않고, 그냥 결과물만 보여준다. 원본을 이대로 수정하려면 `shfmt -w ifex.sh`로 실행하면 된다. 아름답게 바뀌긴 했는데, then을 다음 줄로 내려준다든지, 들여쓰기를 네 칸으로 해준다든지 하는 작업은 하지 않았다. 들여쓰기 네 칸을 적용하려면 '-i 4' 옵션을 추가하면 된다. 이제 좀 예뻐졌는데? 다른 옵션은 없나? -s와 -mn을 각각 실행해보니, -s는 스페이스 네 칸을 탭 하나로 만들.. 2024. 2. 10.
[셸스크립트] for문의 스코프를 정하는 do와 done 먼저 파이썬에서는 for문을 통한 반복문의 범위는 들여쓰기로 결정한다.(는 점은 다들 알고 계실 것) #python3 for i in range(5): print(i) print("Keep going!") # 한 번만 출력됨 sh에서는 do와 done 사이에 반복 스코프를 넣으면 된다. #!/bin/bash for i in $* do # 들여쓰기 컨벤션이 궁금하다. echo $i done echo "Keep going!" 갑자기 궁금한 게 생겼다. 파이썬의 range 배열은 sh에서는 어떤 방식으로 만들 수 있을까? ChatGPT에게 물어보자. 이건 뭐, 다른 언어랑 비슷해 보이는 문법이라서 생소하지는 않은데, ...괄호가 두 겹이네. 신기한 건 , `for i in $*` 처럼 사용할 수도 있고, `f.. 2024. 2. 10.
[리눅스] 셸스크립트기초 - 지역변수와 전역변수 자바스크립트 같기도 하고, C 같기도 하면서, 파이썬 같기도 한... (사실 sh가 이들을 닮은 게 아니고, 얘들이 sh를 닮은 거겠지.) 셸 스크립트를 공부하는 중에, 전역변수와 로컬변수라는 개념이 내심 반가웠다. 파이썬에서는 함수 안에서 변수를 정의하면 그냥 자동으로 지역변수가 되는데, sh에서는 local 이라는 키워드를 넣어줘야 한다. #!/bin/bash language="Korean" function learn() { local learn_language="English" # 등호 좌우에 빈칸이 있으면 오류남ㅜ. 지역변수 정의 echo "I am learning $learn_language" # echo는 print와 같음. } function print_() { echo "I can spea.. 2024. 2. 10.
[리눅스] print 함수를 재정의해봤더니 화면이 와장창 깨진다ㅜ 필자는 현재 zsh에 oh-my-zsh를 설치하고 powerlevel10k 테마를 사용중이다. 아래 내용의 myshell.sh를 만들고, (따라하지 말 것ㅜ) #!/bin/bash function print() { echo $1 } print "Hello world!" 터미널에서 `source ~/myshell.sh`를 실행했더니 테마고 프롬프트고, 모든 화면이 와장창 깨지기 시작했다. 근데 터미널을 재시작해도, 리눅스 재로그인을 해도 깨진 화면이 돌아오지 않아서 여기저기 검색하다가 별 수 없이 ~/.zshrc를 템플릿에서 재복사했더니 정상으로 돌아오기는 했다. 무식한 방법일지도 모르지만 내가 시도한 방법은 rm ~/.zshrc cp ~/.oh-my-zsh/templates/zshrc.zsh-templa.. 2024. 2. 10.
[리눅스 문자열 찾기] grep 기본 사용법 grep은 파일이나 출력 등에서 특정 문자열을 찾아낼 수 있는 명령어이며, 리눅스 환경에서 가장 많이 사용되는 명령어 중 하나로 꼽힌다. 다양한 옵션이 있지만 대표적인 사용방법은 아래 세 가지다. 1. grep [패턴] [파일] 패턴에는 따옴표를 넣지 않아도 괜찮지만 패턴 중간에 스페이스가 있는 경우에는 의도한 대로 작동하지 않을 수 있으므로 따옴표를 넣어 주는 것을 추천한다. (작은 따옴표, 큰 따옴표 무관하지만 짝은 맞춰주기) 그리고 패턴에는 일부 정규식이 사용될 수 있다. # ~/.zshrc에서 if문 찾기 grep "if" ~/.zshrc 2. grep [옵션] [패턴] [파일] [옵션]은 수십개라서 한 번에 암기하기에는 많은 양이지만, grep --help 를 통해 천천히 읽어보면서 참고하면 익.. 2024. 2. 9.
[pyhwpx] 한/글 업무자동화 예제2(작성중) 보호되어 있는 글 입니다. 2024. 2. 6.
[pyhwpx] 한/글 문서의 수식 문자열 초간단 추출하기 아래아한글에는 고유의 수식 언어인 HwpEqn이라는 체계가 있는데 이게 써볼수록 진국이다. 가재가 게편이라 그런지, LaTeX과 유사한 듯 하면서도 HwpEqn이 더 간결하고 우월하다는 느낌도 든다. 하여튼, 어떤 분께서 한/글 개발자 포럼에 아래와 같은 질문을 남겨주셨다. 1. 기존의 오토메이션API를 사용하는 방식 기존 한/글 오토메이션API를 이용하여 문서 내의 모든 수식을 추출해 오는 (내가 아는 한 가장 간결한) 방법은 아래와 같다. """ 각 수식 밑에 수식String 삽입하는 코드 """ import os import win32com.client as win32 hwp = win32.gencache.EnsureDispatch("hwpframe.hwpobject") hwp.XHwpWindows.. 2024. 2. 1.
opencv와 np.ascontiguousarray 난생 처음으로 파이썬에서 (단 한 번도 써 본 적도 없고, 있는 줄도 몰라서 궁금해 해본 적조차 없었던) np.ascontiguousarray 함수를 사용해서 오류를 해결하는 경험을 했다. 고백하건대 ChatGPT가 아니었으면 새벽까지 삽질하다 나자빠졌을 것ㅜ 해결돼서 기쁘지만 아직도 얼떨떨하다. opencv는 "연속된 메모리 배열"이란 걸 요구하는구나... C 근처에만 가면 나는 너무 작아졌다. 귀한 경험 한 셈 치고 넘어갈 게 아니고 이놈의 CS 공포증을 이제부터라도 극복해야겠다. 고마워, 챗지피티! ========= 부연하면, RGBA 이미지 배열을 RGB로 변환할 때 단순히 슬라이싱으로 img = img[:, :, :3] 으로 A값만 잘라내면 될 줄 알았는데, opencv로 이미지를 조작할 때 자.. 2024. 2. 1.