2015.04.06 12:27


쉘 스크립트를 만들때,  가장 첫 라인에 

#!/bin/bash 

를 왜 써야 하는지에 대하여 알아 보도록 하겠습니다.


쉘 스크립트의 가장 첫 라인에  !/bain/bash 를 쓰게 됨으로 해서, 내가 사용 하려는 명령어 해석기가 bash 쉘 임을 미리 알려주는 것입니다.


일반적으로 스크립트에서 #는 주석기호이지만, 첫라인의 #!/bin/bash 에서의 #은 주석기호가 아닙니다.


스크립트의 가장 첫라인에 있는 #! 은 스크립트의 제일 앞에서 이 파일이 어떤 명령어 해석기의 명령어 집합인지를 시스템에게 알려주는 역할을 합니다.


#! 은 두 바이트의 "매직넘버"("magic number")로서, 실행 가능한 쉘 스크립트라는 것을 나타내는 특별한 표시자입니다.


#! 바로 뒤에 나오는 것은 경로명으로, 스크립트에 들어있는 명령어들을 해석할 프로그램의 위치를 나타내는데 그 프로그램이 쉘인지, 프로그램 언어인지, 유틸리티인지를 나타냅니다. 


이 명령어 해석기가 주석은 무시하면서 스크립트의 첫 번째 줄부터 명령어들을 실행시킵니다. 


거의 대부분의 상업용 유닉스 및 리눅스 에서 기본 본쉘인 #!/bin/sh을 쓰면 비록 Bash 만 가지고 있는 몇몇 기능들을 못 쓰게 

되겠지만 리눅스가 아닌 다른 머신에 쉽게 포팅 할 수 있게 해 줍니다. (이렇게 작성된 스크립트는 POSIX sh 표준을 따르게 됩니다. )

"#!" 뒤에 나오는 경로는 정확히 Full PATH를 기록 해야 합니다. 

만약 PATH를 잘못 적게 되면, 스크립트를 돌렸을 때 거의 대부분 "Command not found"라는 에러 메세지만 보게 될 것입니다.


이상으로 쉘 스크립트 처음에 왜 "#!/bin/bash"를 반드시 써야만 하는지에 대하여 알아 보았습니다.

신고


Posted by injunech
2015.04.05 22:18


FAQ : 프로그래밍적으로 키보드 숨김/감춤/보기. 액티비티 시작시 키보드 숨김/감춤/보기, EditText선택시 키보드 안뜨게하기 등 소프트 키보드 동작 관련 질문에 대한 답변

1. 키보드 감추기

EditText editText = (EditText) findViewById(R.id.myEdit);
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(editText.getWindowToken(), 0);

2. 키보드 보여주기
EditText editText = (EditText) findViewById(R.id.myEdit);
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(editText, InputMethodManager.SHOW_FORCED);

위 코드로 안보이는 경우 아래코드도 시도해보세요
- imm.showSoftInputFromInputMethod (editText .getApplicationWindowToken(),InputMethodManager.SHOW_FORCED);

onCreate등에서 제대로 동작하지 않는다면 
Handler로 post를 해서 위 코드를 실행시켜보세요.

3. 키보드 토글 - 위 두가지 방법으로 안되는 경우 다음과 같은 코드로 동작하는 경우가 있습니다.
imm.toggleSoftInputFromWindow(editText.getApplicationWindowToken(),  InputMethodManager.SHOW_FORCED, 0); 

4. 액티비티 시작시 자동으로 키보드 보여주기
AndroidManifest.xml의 activity 태그의 속성에 android:windowSoftInputMode="stateVisible" 혹은 "stateAlwaysVisible"삽입

5. 액티비티 시작시 자동으로 키보드 보여주지 않기
AndroidManifest.xml의 activity 태그의 속성에 android:windowSoftInputMode="stateHidden" 혹은 "stateAlwaysHidden" 삽입

6. 에디트 텍스트 선택해도 키보드 안뜨게 하기
EditText xml 속성에서 inputType 을 0으로 주면 안뜹니다.


신고


Posted by injunech
2015.04.05 17:01


IPv4 유효성 검사 정규식


설명 하기 앞서  정규식의 간단한 개념?적 의미는

일정한 규칙을 가진 문자열의 집합을 어떠한 형식으로 나타낼수 있는 형식 언어 라고 한다.


정규식을 이용하여 유효성 검사를 할때 / /로 감싸주어야 한다.

"를 사용하면 잘못된 방법


 IPv4 정규식은 아래와 같다.


/^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$/

?

분석


?크게 정규식을 2개로 나누어 보았다.

1. ^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}


2. ([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$

?



1번부터 해석을 해보겠다.

?

 ^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}

 

? ^  :  뒤에오는 문자, 숫자로 정규식을 시작하겠다는 의미

 -> 위의 정규식을 보면 ^로 시작하고 소괄호로 감싸주었는데 다음 소괄호 안에 있는 정규식으로 시작 하겠다는 의미 이다.


[] 를 정규식에서는 META ?문자 라고 하는데 [] 안에 있는 문자로 정규식에 들어갈 범위를 지정해주는 것


[0-9] 0 ~ 9 까지 문자열을 사용하겠다는 의미

[1-9] 1 ~ 9 까지 문자열을 사용하겠다는 의미

[0-4] 0 ~ 4 까지 문자열을 사용하겠다는 의미

[0-5] 0 ~ 5 까지 문자열을 사용하겠다는 의미


이 정도 설명했으면 대충은 의미가 갈것이라고 생각한다.


뭐.. 0~9, 1~9 , 0~9 등등 뒤에 문자의 조합으로 시작하겠다는  의미구나

이제 나머지 이해가 되도록 설명을 하겠다.


| :  프로그래밍 공부를 조금이라도 한사람이라면  OR 라는 의미라는것을 대충 짐작을 했을텐데 맞다

     OR와 같은 의미


자 그럼 한층더 이해도가 높아 지지 않는가??!

정규식 안에 들어가는 1, 2, 25 는 그 형태 그대로 문자, 문자열 그대로 인식된다.

\. 은 문자열  comma 를 의미


 ^    ((  [0-9]  |  [1-9][0-9]   |   1[0-9]{2}  |    2[0-4][0-9]  |   25 [0-5]) \.){3}

시작    0~9  OR  1~9  0~9   OR   1 0~9       OR  2 0~4 0~9   OR  25 0~5   .


{n}을 설명하면 이제 모두 이해가 될것이다.

x{n} : n반 큼 반복하다. 즉 앞의 x가 n만큼 반복 될것이라는 의미



 ^    ((  [0-9]  |  [1-9][0-9]   |   1[0-9]{2}  |    2[0-4][0-9]  |   25 [0-5]) \.){3}

시작  (( 0~9  OR  1~9  0~9   OR   1 0~9       OR  2 0~4 0~9   OR  25 0~5   . ) <-앞의 모든 식이 3번 반복

                                                  ↑ 앞의 식이 2번 반복


자 다시한번 정리를 한다면

 ^  : 시작    

 [0-9]  : 0~9  - 1 자리 숫자   1,2,3,4,5,6,7,8,9,

 [1-9][0-9] : 1~9, 0~9  - 2자리 숫자  10~99

 1[0-9]{2}  : 1, 0~9, 0~9 - 3자리 숫자 100 ~ 199

 2[0-4][0-9] : 2, 0~4, 0~9 -  3자리 숫자 200 ~ 249

 25 [0-5] : 25, 0~5 - 3자리 숫자 250~ 255

--------여기까지 각 식마다 |가 붙었기때문에 1자리, 2자리, 3자리 숫자중 위의 조건에 맞춰 다 들어 갈수있다는것을 알수 있다.

  \.   :  . comma

{3} : 위의 숫자가  3번 반복 즉  Ip주소 1.255.11. 이런식의 문자가 들어갈수 있다는 의미

        최대 숫자가 255 인것은 ip주소에서 쓸수 있는 숫자가 255까지 표현 할수 있기 때문에


여기까지 1번 식의 설명이였다.. 1번이 이해가 된다면 2번도 마찬가지 이기때문에 충분이 분석이 가능할 것이다.


1. ^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}


2. ([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$


$ :  예) x$  x로 끝내겠다는 의미

즉 마지막에 $표시는 앞의 식으로 끝내겠다는 의미이다.



즉 77.11.22.33

이런식으로 끝내겠다는 의미이다.


JavaScript에 다음 정규식을 적용 시켜보는 예제이다.



function checkIpForm(ip_addr){
 
 var filter = /^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$/;

 if (filter.test(ip_addr) == true){
  return false;
 } else{
  alert("IP 주소 형식이 틀립니다.");
  return true;
 }

}



참조 site

http://www.nextree.co.kr/p4327/


정규식을 테스트 해 볼수 있는 website이다. 정규식을 만들어보고 잘 맞는치 테스트 해볼수 있다.http://gskinner.com/RegExr/  


신고

'Programming > Etc' 카테고리의 다른 글

ASCII Code Table  (0) 2017.02.21
정규식 문법 이해  (0) 2015.04.05
2015년 프로그래밍 언어 사용률  (0) 2015.03.05
[Tistory] 티스토리 본문 폭 변경하기  (0) 2015.02.22
[Git] Git 설치 및 초기 설정  (0) 2015.02.16


Posted by injunech

티스토리 툴바