2017년 12월 8일 금요일

배치 파일 팁 - 라인스트링에서 단어단위로 작업하기

라인 스트링에서 개별단어를 뽑아내려면 어떻게 해야할까요?

가령 다음과 같은 스트링에서 
각 단어별로 처리를 하고 싶다면 어떻게 해야할까요
배치파일 내에서는 아래와 같은 방식으로 위의 스트링을 입력할 것입니다.

많은 사람들은 for 명령어에 여러가지 옵션을 붙여서 이 문제를 해결하려고 노력할 것입니다.
그러나 결론부터 말하면 for 명령어는 스트링을 개별적으로 처리하는 능력이 없다고 합니다.
그런 결론의 출처를 언급하고 싶지만 저도 귀찮이즘이라서... 양해를 부탁드립니다.

그러면 어떻게 하면 단어 단위로 작업을 할 수 있을까요?

웹서핑중에 아이디어를 얻었습니다.
그 아이디어는 "tokens=1*" 옵션으로 for 명령을 실행하여 첫번째 문장은 %%a에 저장하고 나머지는 %%b에 저장하는것입니다.
이렇게 한뒤 LINE_STRING을 %%b로 설정하고 필요한 만큼 반복실행하는것입니다.

"tokens=1*" 옵션으로 for를 실행했을때의 결과를 보면 다음과 같습니다.
아래의 배치파일을 실행하면
아래의 결과를 얻게됩니다.
 앞에서 설명한대로 LINE_STRING을 %%b로 대입하고 반복실행하면
아래와 같은 결과를 얻게됩니다.

이 방식을 발전시켜서 if 제어문을 사용하고 문자열 길이만큼 반복실행해서 단어를 분해해 내는것입니다.
아래처럼 배치파일을 작성하면
그 결과로 아래를 얻습니다.
예제를 포함한 전체 배치파일 소스는 아래와 같습니다.

@echo off

echo -- Example 1 -----------
set LINE_STRING=zero one two three four five six seven eight nine ten
for /f "tokens=1*" %%a in ("%LINE_STRING%") do (
echo. %%a
echo. %%b
)
echo ------------------------

echo -- Example 2 -----------
set LINE_STRING=zero one two three four five six seven eight nine ten
for /f "tokens=1*" %%a in ("%LINE_STRING%") do (
echo. %%a
echo. %%b
set "LINE_STRING=%%b"
)
echo.
for /f "tokens=1*" %%a in ("%LINE_STRING%") do (
echo. %%a
echo. %%b
set "LINE_STRING=%%b"
)
echo.
for /f "tokens=1*" %%a in ("%LINE_STRING%") do (
echo. %%a
echo. %%b
set "LINE_STRING=%%b"
)
echo.
for /f "tokens=1*" %%a in ("%LINE_STRING%") do (
echo. %%a
echo. %%b
set "LINE_STRING=%%b"
)
echo ------------------------


echo -- Example 3 -----------
set LINE_STRING=zero one two three four five six seven eight nine ten
:L1
if "%LINE_STRING%" neq "" (
for /f "tokens=1*" %%a in ("%LINE_STRING%") do (
echo.  word : [%%a]
set "LINE_STRING=%%b"
)
goto :L1
)
echo ------------------------


2017년 11월 26일 일요일

Ubuntu 16.04 Server 설치-VMware 에서

Ubuntu 서버 설치하는 과정에 대한 예를 보여드립니다.

여기서는 VMware상에 설치하는 예입니다.
가상머신은 하드디스크 10G에 메모리 1G로 설정하였습니다.

설치 CD ISO는 ubuntu-16.04.3-server-amd64.iso 입니다.

설치 CD를 마운트하고 부팅하면 아래와 같이 됩니다.
설치를 진행하는 언어를 선택하는 단계인데, 설치진행화면에서 벗어나는 경우가 있으므로 그냥 영어로 진행합니다.
영어로 설치를 진행하더라도 설치 이후에 적용되는 언어는 선택할 수 있습니다.
Ubuntu 인스톨을 선택합니다.
설치 이후에 사용할 언어를 선택합니다.
서버에서는 대개 한글을 직접사용하는일이 드뭅니다.
기본설정상태인 영어(English)를 그대로 둡니다.
지역(로케일)을 지정합니다.
다른 설치예를 보면 한국 로케일 설정이 중요할때가 있다고 합니다.
Other를 선택하여 Asia/Korea을 선택합니다.
Asia를 선택하고
Korea를 선택합니다.
로케일은 영어 선택된것을 그대로 둡니다.
키보드 설정을 검색할지를 묻는데 하지 않는것으로 합니다.
키보드도 영어를 선택합니다.
기본선택된 영어 키보드를 그대로 사용합니다.
키보드 선택을 마치면 약간 설치를 진행합니다.

설치되는 컴퓨터의 이름을 지정합니다.
사용자 이름을 지정합니다.
사용자 계정을 지정합니다.
사용자 계정의 암호를 넣습니다.
암호가 짧거나 단순한 암호면 다시 묻는 창이 나오는데 똑같이 넣어줍니다.
홈 디랙토리를 암호화 할지 물어봅니다.
아니오를 선택합니다.
설치가 조금더 진행됩니다.
시간대 설정이 Asia/Seoul로 된것을 변경할지를 묻습니다.
아니오를 선택합니다.
파티션 설정을 어떻게 할지 묻는단계입니다.
가상 플랫폼에 설치할때는 디스크 사용량이 중요합니다.
따라서 디스크 파티션을 잘 설정해 주는것이 필요합니다.
기본 설치 파티션으로 하면 스왑/부트파티션이 생깁니다.
스왑 파티션은 가상 플랫폼에서는 다른 방식을 사용하는것이 더 좋다고 생각합니다.
부트 파티션은 특별히 루트파티션에서 분리할 이유도 별로 없다고 생각합니다.
그래서 저는 루트 파티션만 생기는 설정을 좋아합니다.
수동 설정으로 진행합니다.
sda를 선택합니다.
 sda 위에 커서를 이동한뒤 엔터를 누릅니다.
빈 파티션 테이블을 생성할것인지 묻는 단계입니다.
파티션을 생성하는것이 아니라 파티션 테이블을 생성하는지를 묻는것입니다.
당연히 파티션 테이블은 생성해야합니다.
예를 선택한뒤 진행합니다.
파티션 테이블이 생겼습니다.
생긴 첫번째 파티션으로 커서를 이동하고 엔터를 칩니다.
파티션을 생성합니다.
파티션의 용량을 선택합니다.
기본으로는 디스크 전체용량값이 입력되어 있는데 그대로 합니다.
주 파티션으로 선택합니다.
그러면 첫번째 파티션이 만들어지고 요약된 내용이 나옵니다.
만들어진 첫번째 파티션은 루트에 마운트 되어 있네요
완료에 커서를 옮기고 엔터를 누릅니다.
파티션 설정 진행상태로 돌아오고 루트파티션에 ext4로 지정된것을 확인합니다.
파티션 지정을 마치고 디스크에 저장하기를 선택합니다.
스왑 파티션이 없기때문에 주의창이 뜹니다.
스왑 파티션을 만들려고 하지 않았기 때문에 이부분은 당연히 아니오를 선택하여 진행합니다.
최종적으로 파티션 설정을 디스크에 쓸것인지 묻는 단계입니다.
예를 눌러서 진행합니다.
설치가 조금더 진행됩니다.
중간에 http 프록시를 묻는창이 나오는데 일반적으로는 프록시를 설정하지 않습니다.
그냥 엔터를 눌러서 계속 설치를 진행합니다.
설치가 진행됩니다.
설치가 또 계속 진행됩니다.
업데이트에 대한 설정을 묻습니다.
업데이트 하지 않음을 선택합니다.
기본 설정 소프트웨어 구성을 묻는 단계입니다.
그냥 기본상태로 두고 엔터를 눌러 다음으로 진행합니다.
설치가 진행됩니다.
부트로더를 설치할지를 묻는 단계입니다.
가상머신 디스크에 유일한 OS가 되므로 설치로 진행합니다.
나머지 설치가 진행됩니다.
설치가 완료되고 재부팅이 될지를 묻습니다.
계속 진행해서 재부팅 합니다.
가상 머신이 재부팅 됩니다.
재부팅이 진행되고
진행되어서
로그인 프롬프트가 뜹니다.
Ubuntu Server가 설치되었습니다.