https://developer.atlassian.com/server/jira/platform/rest-apis/

url rest api 형태

python

 

  • 디폴트 헤더 ( requests library 기반 ) 
import requests
from requests.auth import HTTPBasicAuth
import json
  • 필드 양식
  • response ( json ) = requests.request("GET/POST", url, headers, params, auth)
    • url
      • f"{jira_server}/rest/api/2/search"
    • headers
      • { "Accept": "application/json", "Content-Type": "application/json" }
    • params
      • 'jql' : j쿼리 string으로 입력 ( assignee 등 대상유저는 nickname이 아니라 id로 입력해야 함 )
      • 'maxResults' :
    • auth
      • HTTPBasicAuth(username, api_token)
        • username : Jira - 우상단 초상화- Profile - Username 확인
        • api_token : Jira - 우상단 초상화 - API Auth 들어가서 발급받기
  • return 필드 ( json )
    • expand
    • startAt
    • maxResults
    • total
    •  issues[]
      • expand
      • id : int id
      • self : url
      • key : string id
      • fields
        • 필드명들 ( customfield 포함 )
        • resolution : 해결됨 여부 ( work flow에서 post로 resolution여부 지정하게 됨. 보통 unresolved인지 여부를 잔여여부로 활용 )
          lastViewed
          labels
          aggregatetimeoriginalestimate
          issuelinks
          assignee
          components
          subtasks
          reporter
          progress
          votes
          issuetype : 분류. design task
          project : OVDR
          resolutiondate
          watches
          updated
          timeoriginalestimate
          description
          summary
          environment
          duedate
          fixVersions
          priority
          timeestimate
          versions
          status : 진행상태 ( open / done ). work flow에서 지정된 custom string이므로 보증할 수 없음
          aggregatetimeestimate
          creator
          aggregateprogress
          timespent
          aggregatetimespent
          workratio
          created

'프로그래밍' 카테고리의 다른 글

MarkDown 테스트  (0) 2024.05.22
win api  (0) 2024.05.21
네트워크  (0) 2024.05.21
어셈블리 & 기계어 & OS와 HW  (0) 2024.05.21
Kotlin  (0) 2024.05.21
# H1
## H2
### H3

**bold text**

*italicized text*

> blockquote

1. First item
2. Second item
3. Third item

- First item
- Second item
- Third item

`code`

---

[title](https://www.example.com)

![alt text](image.jpg) 


Table    

| Syntax | Description |
| ----------- | ----------- |
| Header | Title |
| Paragraph | Text |


Fenced Code Block
```
{
  "firstName": "John",
  "lastName": "Smith",
  "age": 25
}
```

Footnote    
Here's a sentence with a footnote. [^1]
[^1]: This is the footnote.

Heading ID    
### My Great Heading {#custom-id}

Definition List
term
: definition

Strikethrough
~~The world is flat.~~

Task List
- [x] Write the press release
- [ ] Update the website
- [ ] Contact the media

Emoji (see also Copying and Pasting Emoji)
That is so funny! :joy:

Highlight
I need to highlight these ==very important words==.

Subscript
H~2~O

Superscript
X^2^

H1

H2

H3

bold text

italicized text

blockquote

  1. First item
  2. Second item
  3. Third item
  • First item
  • Second item
  • Third item

code


title

alt text

Table

Syntax Description
Header Title
Paragraph Text

Fenced Code Block

{
  "firstName": "John",
  "lastName": "Smith",
  "age": 25
}

Footnote
Here's a sentence with a footnote. [^1]
[^1]: This is the footnote.

Heading ID

My Great Heading {#custom-id}

Definition List
term
: definition

Strikethrough
The world is flat.

Task List

  • Write the press release
  • Update the website
  • Contact the media

Emoji (see also Copying and Pasting Emoji)
That is so funny! :joy:

Highlight
I need to highlight these ==very important words==.

Subscript
H2O

Superscript
X^2^

'프로그래밍' 카테고리의 다른 글

JIRA api  (0) 2024.05.22
win api  (0) 2024.05.21
네트워크  (0) 2024.05.21
어셈블리 & 기계어 & OS와 HW  (0) 2024.05.21
Kotlin  (0) 2024.05.21

https://www.youtube.com/watch?v=HCfDWjkYLBs&list=PLWKwcHKTXy5RSkINElI7wZOwn9z4RcJff&index=6

프로젝트 생성

  • windows 데스크톱 마법사

 

Default Window Flow

  • window class 정의 → create window → show window → 메시지 루프

 

Parameter

  • 핸들러 : hWnd
  • WM_ : 메시지 루프 중 큐 타입 분기에 따른 액션
  • WM_PAINT : 화면 draw
    • hdc : 그래픽 출력 관련 ptr ( dc )
  • VK_ ( WinUser.h ) : input 큐

 

 

Draw Flow

  • HPEN MyPen, OldPen ( 핸들 선언 ) → MyPen = CreatePen(...) (GDI 오브젝트 생성) → OldPen = SelectedObject(...); (이전 메모리에 대한 핸들러 저장) → Rectangle, Ellipse, ... 팬 사용
    → SelectObject(Hdc, OldPen) (새로운 팬 선택 해제) → DeleteObject(MyPen) (새로운 팬 dealloc)

 

 

soen.kr

 

핸들러

  • hWnd

 

큐에 입력이 쌓이면 → WndProc함수 콜백

'프로그래밍' 카테고리의 다른 글

JIRA api  (0) 2024.05.22
MarkDown 테스트  (0) 2024.05.22
네트워크  (0) 2024.05.21
어셈블리 & 기계어 & OS와 HW  (0) 2024.05.21
Kotlin  (0) 2024.05.21

네트워크 기본

OSI Model

Layer Name Includes Devices
7 Application (응용)    
6 Presentation ( 표현 )    
5 Session ( 세션 )    
4 Transport ( 전송 ) TCP/UDP, Port  
3 Network ( 네트워크 ) IP Address Routers
2 Data-Link ( 데이터링크 ) Ethernet MAC Address Switches
1 Physical ( 물리 )   Hubs

 

TCP/IP Stack

OSI TCP/IP Cisco TCP/IP Stack Layer Definition PDU
Application Application ( 응용 ) Represents data users, encodes and controls the dialog. Data
Presentation
Session
Transport Transport ( 전송 )   Segment
Network Internet ( 인터넷 )   Packet
Data-Link Network Access ( 네트워크 접근 )   Frame
Physical

 

  • PDU ( Protocol Data Unit )
    • TCP/IP 각 계층에서 이루어지는 정보교환단위의 총칭

 

IP

IP v4

IP4

8bit . 8bit . 8bit . 8bit

 


 

  192 ( 1octat ) 168 ( 2octat ) 55 ( 3octat ) 189 ( 4octat ) ( /24 )
ip 1100 0000 1010 1000 0011 0111 1011 1101
subnet mask 1111 1111 1111 1111 1111 1111 0 0
desc network address ( subnet mask == 1 ) ( 라우터 주소 ) host address ( subnet mask == 0 )
 

  1옥탯 2옥탯 3옥탯 4옥탯
class A 0xxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx
0000 1010            
class B 10xx xxxx xxxx xxxx xxxx xxxx xxxx xxxx
1010 1100 0001          
class C 110x xxxx xxxx xxxx xxxx xxxx xxxx xxxx
1100 0000 1010 1000        
class D 1110 xxxx xxxx xxxx xxxx xxxx xxxx xxxx
class E 1111 xxxx xxxx xxxx xxxx xxxx xxxx xxxx

 

 

class A

  • /8까지 subnet mask로 사용
    • subnet mask : 255 . 0 . 0 . 0
    • prefix : 0
    • private : 0000 1010 { }

class B

  • /16까지 subnet mask로 사용
    • subnet mask : 255 . 255 . 0 . 0
    • prefix : 10
    • private :  1010 1100 0001 { }

class C

  • /24까지 subnet mask로 사용
    • subnet mask : 255 . 255 . 255 . 0
    • prefix : 110
    • private : 1100 0000 1010 1000 { }

class D, E

  • class D : 멀티캐스트용
  • class E : 실험용

 

호스트 규약

  • 0 = 네트워크 주소 추상 ( 1은 라우터에 할당? )
  • host영역의 max ( ex. 255 ) = broad 캐스트
    • ↔ uni cast, multi cast

 

Local Host

  • 127. x . x . x
    • 실제로 127.0.0.1가 거의 사용됨 ( 일부 OS에는 강제 )

 

서브네팅

  • 할당된 class에서 호스트영역을 커스텀 네트워크 영역과 호스트영역으로 다시 쪼개는것

 

기타

기타

ipconfig

  • 물리적 주소 : MAC 주소
  • 기본 게이트웨이 : 라우터 주소 

스위치

  • 식별되지 않은 Unicast를 포함 모든 port에(송신자 제외) 수신된 데이터를 송신
  • port - mac address 맵핑정보를 기록
    • uni 혹은 multi cast 수신데이터가 들어왔고, destination의 mac address가 매핑정보에 있다면, 해당 포트로만 정보를 송신

'프로그래밍' 카테고리의 다른 글

MarkDown 테스트  (0) 2024.05.22
win api  (0) 2024.05.21
어셈블리 & 기계어 & OS와 HW  (0) 2024.05.21
Kotlin  (0) 2024.05.21
CLI  (0) 2024.05.21
 

반도체학과에서 배우는 것 : 논리회로를 배우는 이유, 시스템 반도체와의 연관성 및 반도체 설계

※ 해당 포스팅 내용에 관심있으신 대학생 분들, 고등학생 분들의 메일은 언제든 환영입니다! 저도 사실 본 전공은 반도체 설계가 아닌 이동통신이라 지식이 많이 부족하지만, yhm1620@khu.ac.kr로

gusals1620.tistory.com

 

 

  • 기본 개념
    • 기계어에 좀 더 가까운 low-level 언어

 

  • 구성
    • 하드웨어
      ALU : 산술논리연산장치 / 레지스터 : 연산을 위한 임시저장장치 / 메모리(RAM) : 휘발성 가상메모리

 

OllyDbg

명령어 실행중 ( 좌상단 ) / 레지스터 메모리 ( 우상단 ) / 램 메모리 ( 좌하단 )

  • 레지스터 메모리 주소 명명규칙
    • EAX
    • EA~EH / X / L
      extension 고정 넘버링 사용할 자릿수
      16bit → 32bit로 확장되며 추가된 접두 레지스터 고유 Id ( char )
      4bit 4bit

 

  • Ram → Ram 은 불가
  • Ram → Reg / Reg → Ram만 가능
  • word = 2byte / dword ( double word ) = 4byte / qword = 8byte
    • word는 16bit 시절 기준 주소를 담을 수 있는 메모리
  • 16bit = 주소 할당 영역이 16bit ( 2**16bit = 4GB , 그래서 4GB 램까지밖에 못가지는? )
  • 메모리(RAM) 주소는 대괄호[]로 숫자를 둘러쌈

 

  • 상태 레지스터 ( 플래그 )
    • C : carry
      • 연산결과가 1bit의 범위를 넘으면 1
      • equal 결과 전>=후 0 ,  전<후 1 ( a - b 가 음수이면 범위를 벗어나기 때문, 비교연산자는 논리상 sub를 통해 접근 )
    • P
    • A
    • Z(E) ( Zero, Equal )
      • zero : 이전 작업결과가 0일때
      • equal : cmp결과가 same일때
    • S : sign
      • sign ( 부호 ) 할당 슬롯 값을 가져옴
    • T
    • D
    • O : over flow

 

  • DB = data byte
  • 명령어
    • MOV [Output Address] [Input Data or Address] : Input data를 Output data에 덮어쓰기
      • mov qword/dword/word(byte등도 가능) ptr [pointer], [value or pointer] 도 가능 ( 데이터 뒤쪽부터 유효갯수만 판정, word = 16bit ) 
    • Jmp ( J ) [명령줄 Address] : 다음 명령줄(좌상단)을 대상 주소로 변경 ( 레지스터의 EIP를 Target으로 변경 )
      • 기본은 읽어온 갯수 만큼 ( byte ) 타겟명령주소(EIP)에 추가
      • EIP : 실행명령줄의 주소
      • SHORT 사용 시, 메모리에는 현재명령줄 주소와, 대상 명령줄 주소의 차이만을 담고, 실행시 가감연산하여 주소 변경 ( 명령줄 메모리 아끼기 위해 )
    • INC/DEC [reg Address] : address의 값++
      • INC/DEC word ptr [ram address]
    • Add/Sub [a] [b] : 더하기/빼기 ( * 주의, 에디터에 따라 16진수가 디폴트일수 있음 ) a += b, a -= b
    • 포인터 사용하기
      • [11]에 22가 있고, [22]를 참조하고싶다면,
      • mov EAX [11] → mov [대상] [EAX] 이런식으로 저장 후 덮어씌워야 함
      • ( 대괄호 안에 reg주소를 넣으면 reg값을 주소로 메모리에서 탐색 )
    • offset [ECX + n]
      • ex. char = 3byte라고 치면, EAX = [EDX], EBX = [EDX+1], ECX = [EDX+2] 이런식으로 묶어 가져올 수 있음
      • ex. ECX를 offset으로 쓰고, mov ECX 0, mov qword [EDX + ECX] → INC ECX → mov [EDX + ECX] ( [EDX + ECX * n]도 가능 )
      • but reg + reg는 불가
      • [base + offset + index * scale 가능], reg는 최대 2개, index는 reg만 가능 ( 곱연산은 reg에서만 가능하다는 건듯?, offset과 base는 맥락적 구분 )
    • NOP : Null
    • cmp [a] [b]
      • a==b 비교연산자
    • 접두 + 논리 + 접미
      • 접두 : 명령어축약 ( ex. J = jump )
      • 논리 : 연산자 ( ex. N = not 등 )
      • 접미 : 조건 ( 보통 상태레지스터 ( ex. Z, OllyDbg의 우하단 ) )
      • ( ex. JNZ = z가 0일때, 할당 명령줄로 점프 )
    • 조건 ( flag 이름을 붙이면 그냥 flag 그대로 사용 )
      • E : z와 동일, z flag 사용 ( jump flag = equal flag, jump와 equal의 발생 조건이 배타적이라서, 레지에서 플래그메모리를 공유하는 듯 )
      • A, B : 상호 배타 A ( above ) ↔ B ( below ) ( unsigned )
        • A는 c=0 z = 0, B는 c=1 z =0
        • z=1이면 a = b이니 z = 0
      • G, L : 상호 배타 G ( grater ) ↔ L ( less )
        • A↔B와 동일하지만, 부호를 포함 ( 첫번째 자리를 부호로 취급, signed )
    • ZAE = ZNB, ZBE = ZNA

 

'프로그래밍' 카테고리의 다른 글

win api  (0) 2024.05.21
네트워크  (0) 2024.05.21
Kotlin  (0) 2024.05.21
CLI  (0) 2024.05.21
C  (0) 2024.05.21
  • Java 기반
  • 타입추론 기반 정적타입지정
  • 집합의 경우 immutable이 기본 ( list, map형식도 mutable이 따로 존재 )
  • null에 엄격

기본 구성

  • Activities : 화면
  • Services : 백그라운드 실행 구성요소
  • Broadcast receivers : 이벤트 delegate
  • Content providers : api? 터미널? 브릿지

 

  • 타입추론 기반
    • var : 변수
    • val : 상수
    • 선언시 타입지정은 optional ( 타입추론을 통해 알아서 정적지정 )
      • var [name] : [type] = [value]

 

  • 집합
    • 배열 타입
      • array ( collection )
      • list
      • map ( dictionary )
        • map은 key값의 중복이 불가, dictionary는 가능
      • set ( 중복값 자동제거, 내용물을 unique하게 유지함 )
      • arrayList
        • 동적 리스트와 비슷..?
        • method 명명 또 이상함 (  add, clear, get, remove )
        • 초기화 시 ArrayList<type>( index length )
          • 물론 arrayListOf<type>( values ) 도 가능
        • iteration : while ( [name].hasNext() )를 통해 가능
        • .length 대신 .size
    • immutable 기본
      • list, map조차도 기본형은 추가,제거,내용수정이 불가
      • 선언 시 mutableListOf<>() 혹은 [List] = [List].toMutableList와 같이 명시적으로 mutable로 지정해야 함
    • pseudo
      • type은 IntArray 혹은 Array<type> ( 구지 다중타입배열의 타입을 명시하고싶으면, Array<Any>쓰면 될듯..? )
      • data init은 arrayOf( [values] ) 또는 arrayOf<type>( [values] ) 또는 intArrayOf( [values] )
    • 내용물 보는건 .contentToString()
    • 데이터 스트럭쳐
      • class
      • data class ( struct )

 

  • Null 관리 ( NPE = null pointer exception )
    • 예외 확인 및 nullptr, null 등의 예외처리를 최소화하기 위해 null 허용 및 관리를 엄격하게 가져감
    • 모든 변수는 기본적으로 !nullable
    • var에 null 입력시 exception을 throw하지않으려면, 타입선언 시 물음표를 붙여줘야 함 ( var [name] : [type]? = [data])
    • null시 exception 처리방법 - [name]? : [null일시 exec할 내용] ( isnullptr의 대체? ) ( Elvis operator )
      • not null일때만 실행 - [name] ?. let { exec statement }
    • 클래스 내의 메서드에 접근 시, 각 단계에서 안전하게 접근할때, 그냥 경로상의 클래스/멤버 단위에 각각 ?붙여주면 됨 ( null safe operator )
      • ex. class?.mathod1?.method2?.method3?.param1?
    • nullable var/val 뒤에 !!를 붙이면 not null에 대입할 수 있음 ( nullable var/val의 값이 null이면 그 statement에서 에러 반환 )
      • var s : Int? = null     →     var c : Int =  s!!

 

  • Type
    • 모든 type ( custom class 포함 )은 class Any 를 상속함
    • [class] :: class 를 통해 타입 획득 ( .simpleName을통해 클래스이름만 출력 )
    • [name] is [type] 을 통해 논리연산 가능
      • switch-case문의 대체인, when-[value] 문에서 when-is [type] 을통해 타입기반 switch가 가능
    • 범위 선언
      • in 1..10 = [1, 2, ... , 9, 10]
      • in [범위] step [간격]
    • 형변환(cast)는 as로 함, ?를 붙여 safe cast 가능
      • var a: A = b as A
      • var a: A = b as? A  ?:  [exec statement when b<A> is null]
        • a에는 null을 반환함

 

  • Constructor와 Initializer
    • method의 name이 contructor면 자동으로 subconstructor method로 기능
      • class 생성시 초기화 param은 primary constructor를 통해 받음
      • class [name] ( params ) : type { class block }
      • subconstructor는 이후 primary constructor를 덮어씌워서 초기화 하는 느낌?
        • constructor ( parmasb ) : this ( paramsb ) { subcons block }
    • method의 name이 init이면 자동으로 initializer method로 기능
    • 작동 순서
      • primary cons → 모든 subcons의 초기화 → 모든 init → 모든 subcons block

 

  • Class
    • 접근지정자
      • 상속가능 여부 : Open, Final ( final이 기본 )
      • 접근가능 여부 : public, protected, private, internal
        • protected는 open 추가로 붙여줘야 함 ( 당연히 public도 )
        •  internal은 같은 모듈안에서 접근 가능 ( 한번에 컴파일되는 단위 기준? )
    • 내부inner
      • 클래스 내 클래스에만 접두 가능
      • 자기 테두리클래스에도 접근가능
        • private 멤버에도 접근 가능
    • 중첩nested ( 내부인데 inner로 지정하지 않을 경우 기본클래스 )
      • 그냥 클래스안에 있는 클래스인듯
      • class Outer{
        var a = 3
        val innerObj = Inner()
        init {
        this.a = 4
        }
        inner class Inner{
        val c = a
        fun setA(a: Int){
        this@Outer.a = a
        }
        }
        }var outer = Outer()
        var inner = outer.innerObj
        var inner2 = Outer().Inner()
        var inner3 = outer.Inner()println(inner.c)
        println(inner2.c)
        println(inner3.c)
        println(Outer().a)
        println("---------")
        println(outer.a)
        inner3.setA(10)
        println(outer.a)3
        4
        4
        4
        ---------
        4
        10Process finished with exit code 0

 

  • Lamda식
    • val/var  [name] = { [parma n] : [type n], [param m] : [type m] → return value ( with params ) }

 

  • Android View Class Hierarchy
    • 뷰 : 시각적 컴포넌트의 최상위 클래스
    • 뷰 그룹 : 여러개의 뷰를 포함
    • 위젯 : 기능성 버튼
    • 레이아웃 : 내부에 뷰를 포함, 뷰들의 배치와 정렬에 대해 관리

 

함수 정리

함수 정리
- Log
    - .e ( tag, message ) : 오류
    - .w ( tag, message ) : 경고
    - .i ( tag, message ) : 정보
    - .d ( tag, message ) : 디버그
    - .v ( tag, message ) : 상세

'프로그래밍' 카테고리의 다른 글

win api  (0) 2024.05.21
네트워크  (0) 2024.05.21
어셈블리 & 기계어 & OS와 HW  (0) 2024.05.21
CLI  (0) 2024.05.21
C  (0) 2024.05.21
basic flow

basic flow

application ( esp terminal ) → shell ( ex. bash, powershell ) → os ( esp kernel ) → hardware

  • wsl
    • window nt 커널(window 후기버전들에 사용된 커널?)에 탑재된 서브시스템
    • window 시스템을 사용하기 위한 linux interface 같은 느낌?

 

  • 보편규칙
    • help 기능
    • man ( manual ) 기능
      • -k
        • 동일 명령어 리스팅 ( → 명령어 + " " + "넘버링" 으로 실행 )

 

  • redirectionn
    • basic concept
      • 0< std in / 1> std out / 2> std err
      • > write
      • >> add
    • pseudo
      • keywrod param ( string ) 
      • keyword < param ( source file )
      • keyward  param > output file
      • keyward < param ( source file ) > output file
        • 작동순서는 ( keyward < param ) > output file
      • keyward param 2> error log file
        • keyward param > output 2> error
      • keyward param > output 2>&1
        • error발생시 output에 에러를 넣음 ( &1이 1번(std out)의 대상참조를 가져온다는 뜻? )
        • keyward param &> output 도 동일

 

  • Pipeline
    • Standard Input
      • command1 | command2
    • tee
      • 현재 표준입출력에 buffer를 유지하면서, output에 내보내 줌 ( T pipe )

 

  • 문자 확장
    • * , ?
    • [range] : ex. 1-9 A-Z a-z 등등
      • ^는 not(!)
    • 중괄호 확장
      • {리스트} : 리스트의 각 요소단위로 명령 실행 ( 반점으로 구분 )
        • ex. touch samplefile{A,B,C,D,E} 
        • 공백 안생기게 조심. 공백은 터미널에서 기본적으로 parameter 구분자로 사용됨
        • ..으로 생략가능 ( {a..e} = a b c d e )
    • $ 명령어 치환
      • 일반기능 : $( 기능 )
      • 산술확장 : $(( 수식 )) 
      • = ` 기능 `
    • " contents " : 공백을 string으로 받아서 하나의 뭉텅이로 받음. but 특수문자 ( $, \, ` ) 는 인식
    • ' contents ' : 모든 문자를 string으로 받아들임

 

기본 명령어 리스트

기본 명령어 리스트

  • who : 사용자 컴퓨터 이름
  • man [function] : 기능 메뉴얼
  • echo [contents] : 혼잣말
  • mkdir [folderaddress/foldername] : 폴더생성 ( -p, 직렬단계상의 여러폴더 동시생성가능 )
  • touch [folderaddress/filename] : 파일생성
  • nano [filename] : text edit
  • less [filename] : file 읽기
  • alias [name] ['기능플로우'] : 기존 기능의 매크로 또는 상용구
  • pwd : 현재 경로
  • bash [bin파일] : 내부명령어 bash 규칙으로 실행
  • explorer . : 현재 경로에 대한 탐색기 실행

 

  • which [filename]
    • 실행파일 경로

 

  • type [function]
    • binary 실행파일
    • shell 빌트인
    • 기능함수
    • alias(별칭)

 

  • ls : dir 내 파일 / 폴더 리스트
    • -l : 상세정보
    • -h : num to human scale ( 1,000 → 1k )
    • -R : 모든 하위폴더내용물 표기

 

  • sort [filename] : 정렬
    • default : 알파벳
    • -n : number
    • -k[num][h] : num열 기준 정렬, human scale 기준

 

  • head / tail [-num] : 문서의 앞/뒤부터 num개만큼만 출력 ( 개행 기준 )

 

  • wc : 갯수 카운트
    • -l : 라인수
    • -w : 단어수

 

  • find : 대상의 하위디렉토리의 모든 파일/폴더 리스팅
    • -name "string" : 이름이 string인 문자 탐색 ( 부위일치는 와일드카드 사용 )
    • -iname "string" : 동일하되, 대소문자 구분 안함
    • -size +-[num][scale] : 1G 이상 이런식
    • -type f : 파일
    • -exce 이후의 기능 실행 ( 마지막에 세미콜론 )

 

  • grep : 파일 내 검색
    • -i : 대소문자 무시
    • -f : 파일타입

 

  • xargs : std out을 std in param으로 패키징?

 

주요 용법

shell script

 

for문 - txt파일 읽어서 출력하기

# cat은 파일 내용물을 \t와 \r \n 전부 구분자로 사용해서 읽어버림
for i in $(cat {filename})
do
echo $i
done

 

tr 문자열 수정

a ="my string"
# tr은 translate 명령어, -d 는 delete 플래그
# 아마 echo로 표준출력스트림에 올리고 tr에서 변환한 다음 다음스트림으로 넘기는 형태
echo $(echo $a | tr -d "str")

 

find 현재 디렉토리 하위 모든파일 접근

# -type f 파일타입
# cp -v는 복사이력을 출력하는 플래그
# {} 는 find에 의해 입력된 표준출력
# . 은 현재경로에 복사 ( 파일명 보존 )
# \ 는 종료구분자인듯..?
find -type f -exec cp -v {} . \;

 

while IFS 문으로 txt내용 세부 제어

# 타겟파일을 읽되, 각 줄을 루프하며, \t(탭)을 구분자로 사용하여 0번 요소를 paramA에, 1번요소를 paramB에 할당
while IFS=$"\t" read -r paramA paramB
do
# paramA와 B에서 \r ( 개행문자. txt파일에서 엔터는 \n가 아닌 \r로 취급하는듯 )를 제거하고 출력
echo $(echo $paramA | tr -d '\r')
echo $(echo $paramB | tr -d '\r')
done < {파일이름}

 

파일명 변경

for file in *; do
  mv "$file" "${file%2}.png"
done

 

소문자로 변경

find . -type f -exec bash -c 'mv "$0" "${0,,}"' {} \;

 

 

Batch 파일 문법

  • 공백문자도 구분자로 취급하니 조심..
  • @echo off : 에코 오프
  • setlocal (EnableDelayedExpansion) : 로컬변수명 개시. 이 이후에 호출/생성하는 모든 변수는 해당 스코프에 종속 ( ~ endlocal )
    • EnableDelayedExpansion이 포함되어있으면, !{변수명}! 형태의 확장변수 사용가능 ( not const, 동적으로 변경되는 변수 값을 읽기위해 써야하는 듯..? )
  • REM {내용} : 주석
  • set {변수명}={값} : 변수명에 값 할당
    • set /a {변수명} : number형으로 변수 선언 ( 사칙연산 가능 )
    • set /p {변수명} : input받아서 변수명에 데이터 입력
  • %{변수명}% : 변수명 접근
  • "%{변수명}%" : 변수 내 데이터 string으로 사용
  • for {옵션} {구분자} {값 넣을 변수} in (배열(입력값)) do ( 실행문 )
    • 옵션
      • /f : 조건부 명령 처리 ( 입력값을 파일명이나 문자열을 받아서 파싱하는 등이 가능 )
        • 구분자에 usebackq, tokens, delims등 사용 가능
        • 값넣을 변수는 output이 여러개일 경우 자동으로 다음 알파벳자에 할당
          • ex. 값넣을변수가 %%a면, %%b, %%c 등에 알아서 부여 ( token에서 할당한 갯수에 따라 )
  • 변수명 replace
    • set {변수명} = % {변수명} : {바꿀값}={바뀔값} %
  • 문자열 파싱
    • % {변수명} : ~ (int 시작지점), (int 문자갯수) %
      • 앞에서부터 시작지점부터 출력 ( 12345:~3 → 345 )
      • 시작지점이 음수면 총문자열갯수+시작지점번째부터 출력 ( 12345:~-2 → 45 )
      • 시작지점부터 문자갯수만큼 출력
  • 조건문
    • if {조건문} {실행문}
    • if exist "{파일경로}" ( {실행문} )

 

추가 팁

  • mkdir : 최종 목적지만 입력하면 모든 중간경로 생성해줌
  • delayed expansion
    • 사용 조건
      • setlocal enabledelayedexpansion을 선언해야 함
      • 변수호출 시 %{변수명}% 이 아닌 !{변수명}!으로 호출해야 함 ( !!호출 시에 변수값을 갱신하는? )
    • 개요
      • "Delayed Expansion"은 Windows 배치 스크립트에서 사용되는 개념입니다. 이는 변수가 실행 시간(runtime)이 아니라 파싱 시간(parse time)에 확장되도록 하는 기능입니다. 이를 통해 스크립트가 실행되는 동안 변수의 값이 동적으로 변경될 수 있습니다.

'프로그래밍' 카테고리의 다른 글

win api  (0) 2024.05.21
네트워크  (0) 2024.05.21
어셈블리 & 기계어 & OS와 HW  (0) 2024.05.21
Kotlin  (0) 2024.05.21
C  (0) 2024.05.21
  • 문서 규칙
    • bold, italic처리 : 가변 값, 조건, 식

 

  •  기본
    • 페이징 : 가상주소를 물리주소로 변환하는 방식
    • 페이지 : 변환하는 최소 메모리 단위 ( type 기반 )
  • 라이브러리
    • 접근 방식 : #include <라이브러리명>
    • 라이브러리 List
      • stdio.h : standard input/output library
  • 주석
    • 시작/끝 범위 지정형 : /*   */
    • Line 지정형 : //
  • 연산자
    • 산술연산자 : , -, *, /, %, ++
    • 텍스트 처리 : % = %%, " = ""
    • 비교연산자 : &&, ||, ==, >, <, >=, <=
    • 2진 비트연산자 : &(and), |(or), ^(xor), ~(반전), <<(쉬프트), >>(쉬프트)
  • 음수 표현
    • 부동소수점형 : 첫번째 비트가 부호(+-)를 대리
    • 정수형 : x의 보수가 -x ( 첫번째 비트가 1이면 음수 확정 )
      • unsigned int : 첫번째 비트도 평범하게 값으로 연산
  • input/output
    • 변수별 출력 포맷 : %d(정수형) %c(문자형), %f(float), %lf(double)
  • loop문 기본
    • for문 : for ( 초기조건; break조건; 루프시 연산값 ) { }
    • break : 루프문 종료
    • continue : 다음루프로 스킵
    • while문 : while ( 루프조건 ) { }
    • Do while문 : Do { } while ( 루프조건 );
  • 조건문
    • Switch문 : switch ( 변수 ) { case 값1 : 수행문; break ; }
  • 배열
    •  배열명[배열길이]
    • 초기화 방법
      • int arr[10] = { 1, 2, 3, .... 10 }; ( 최초 배열선언때만 이렇게 초기화 가능 )
      • int arr[] = { 1, 2, 3, .... 10 }; ( 배열길이 자동 설정 )
  • 상수
    • 선언 : const  이름 =  ;
  • n진수 표기법
    • 16진수 : 0x
  • 포인터
    • 선언 :  *이름 ; ( 해당 주소가 가지는 값의 형, 주소를 담을 변수 )
    • get주소 :  &이름 ;
    • [ ]연산자 : a[b] = *(a+b)와 항등

'프로그래밍' 카테고리의 다른 글

win api  (0) 2024.05.21
네트워크  (0) 2024.05.21
어셈블리 & 기계어 & OS와 HW  (0) 2024.05.21
Kotlin  (0) 2024.05.21
CLI  (0) 2024.05.21

+ Recent posts