codeheart 위치로그  |  태그  |  미디어로그  |  방명록
icon [powershell] 파워쉘 속성 튜토리얼
개발/Script | 2013. 9. 14. 20:44

powershell 3.0 으로 테스트하였습니다.


PowerShell 은 좀 더 발전된 쉘 스크립팅을 지원한다.

텍스트 기반이 아닌 오브젝트 기반이며, 이로써 더 강력한 기능을 쉽게 가능하게 해준다.

이 점이 장점이 될지는 지켜봐야 하겠지만, 비-리눅스 개발자라면 메리트가 충분히 있어 보인다.


이와 같은 shell script 말고 ruby, python 을 shell script 처럼 사용하는 경우도 많지만,

shell script 가 파일경로 및 디렉토리 구조에 대해 쉽게 사용될 수 있도록 특화되어 있기 때문에

익숙하기만 하면 더 짧은 코드로 작성이 가능하다.


powershell 은 윈도우 쉘 답게 명령어에 대소문자를 가리지 않는다.

파라메터 규칙은 보통 -option 과 같은 방식을 따른다.

cmd shell 에서 보통 /option 과 같이 하는 것과 대조된다.

(아마도 윈도우 개발자들도 요즘은 linux 스타일 path 구분자 / 을 사용하는 경우가 많아서 그런게 아닐까 싶다)

이는 unix 계열의 구형 옵션 방식과 유사하다. (요즘은 거의 GNU style 로 통일되는 듯 싶지만)



[[출력해보기]]

echo 'hello'


write-host 'hello'


$your_name = 'name'

write-host "hello ${your_name}"


write-host "hello" ${your_name}

사실 echo 와 write-host 는 엄밀히 다르다.

write-host 가 cmd 의 echo 와 같으며, echo 는 복잡한 개체를 표시할 때 title column 이 표시되는 특징이 있다.



[[현재 폴더 모든 파일명앞에 'value = ' 을 붙여 출력하는 방법 #1]]

foreach($item in gci) { write-host 'value =' $item}


foreach($item in gci | select name) { write-host 'value =' $item.name}

foreach($item in gci | select *) { write-host 'value =' $item.name}


gci 는 Get-ChildItem 의 약자이자 alias 명령어로

dir 및 ls 과 유사하지만, 결과물을 item 목록으로 준다고 보면 된다.(오브젝트 기반 스크립트이므로)

select 는 그 목록 개별 레코드 중 특정 컬럼(오브젝트)만 취하는 것이다.

( bash 으로 하려면 복잡해진다. grep/awk 등 텍스트 파싱을 위한 여러 조합이 나올 것이다 )


object 기반이기 때문에 gci 의 결과물은 객체라 봐도 무방하다.

그래서 $item.name 같이 특정 컬럼(오브젝트)에 멤버 변수처럼 접근하는 것도 가능하다.



[[현재 폴더 모든 파일명앞에 'value = ' 을 붙여 출력하는 방법 #2]]

gci | ForEach-Object{write-host 'value =' $_}

gci | foreach{write-host 'value =' $_}

gci | %{write-host 'value =' $_}

이는 다소 독특한 방법인데, gci 의 출력(파일 리스트)의 요소 각각에 대해서 무언가 다른 작업을 해주는 것이다. ruby 의 .each{ 와 비슷한데 $_ 는 그 해당 요소 하나를 의미한다. 위에서는 $item 이라 보면 된다. % 는 축약형으로 사실은 ForEach-Object 이다. foreach 로도 사용할 수 있다.
(하지만, foreach(...) {} 과 같은 문법을 ForEach-Object 로는 대체할 수 없다!)

이 방법이 foreach(...) {...} 방식보다 쉘스크립트에 더 적합한 것 같다.


[[현재 폴더 모든 파일명 중에 'vim' 이라는 글자가 들어간 경우만 출력하는 방법]]

foreach($item in gci) { if($item.name -like '*vim*') { write-host $item} }


foreach($item in gci) { if($item.name.contains('vim')) { write-host $item} }


gci | %{if($_.name -like '*vim*') { write-host $_ }}



[[오브젝트 멤버 보기]]

python 의 dir. ruby 의 .methods 같은 기능이다.

powershell 은 객체지향이므로 이런 것을 알아두면 공부할 때 도움이 된다.


"text" | get-member // "text" 객체의 member 보기


[string] | get-member // string 타입의 member 보기



/* method 목록만 보기 */


// 맨위에 Name ===== 과 같은 헤더 컬럼명이 생략되는 방법

[string].GetMethods() | select name


// 맨위에 Name ===== 과 같은 헤더 컬럼명이 생략되는 방법(들)

[string].GetMethods() | %{$_.name}


[string].GetMethods() | %{write-host $_.name}


[string].GetMethods() | ft -hide


ft -hide 는 Format-Table -hidetableheaders 의 줄임 명령이다.



arrow 트랙백 | 댓글



관리자  |   글쓰기
BLOG main image
code heart story
분류 전체보기 (74)
생활 (0)
잡담 (8)
컴퓨터 (11)
개발 (52)
Total :
Today :
Yesterday :
rss
위치로그 : 태그 : 방명록 : 관리자
코드하트's Blog is powered by Daum / Designed by plyfly.net