Programmer/Study etc - 해당되는 글 2건


Shell

  • 사용자와 운영체제 사이에 존재하여 사용자의 명령을 운영체제가 이해하도록 하고, 사용자 명령의 실행 결과를 사용자에게 보여주는 사용자 인터페이스
  • Steven Bourne이 개발한 Bourne Shell(sh)가 최초의 Shell 이다.

Bash Shell

  1. 1988년 1월 10일 Brian Fox가 개발
  2. GNU 시스템의 표준 Shell로 자리 잡았고 그 후 거의 모든 유닉스에서 사용됨
  3. 1989년 Chet Ramey가 합류하여 곧 공식적으로 bash의 유지보수를 맡게 되었다.
  4. Sh Shell의 기본기능에 csh와 ksh의 장점을 합하여 bash가 탄생하였다.

Bash 기본 설정 파일

  1. .profile : sh의 설정파일
    1. 대부분의 환경 설정이 이루어 지며 사용자가 시스템에 로그인할 때마다 실행된다.
  2. .bash_profile : bash의 .profile
  3. .bashrc : 서브Shell이 실행될 때 읽는다.
    1. 서브 Shell이란 로그인Shell에서 다시 bash가 실행되는 경우이다.

Shell script

  1. Script : Shell 명령어들을 담고 있는 파일로 Shell Program이라고도 부른다.
  2. .bash_profile, .bashrc 등은 모두 script이다.

문법

변수

  1. 처음 사용될 때 만들어진다. 즉, 미리 선언할 필요가 없다.
  2. 유닉스 명령과 마찬가지로 대소문자 구별이 있다.
  3. 기본적으로 데이터를 문자열로 저장한다. 수치를 입력해도 문자열로 저장한다.
    • 계산이 필요한 경우에는 자동으로 수치로 변환하여 계산 후 다시 문자열로 저장된다.
  4. 변수의 값을 사용할 때는 변수 명 앞에 “$”를 붙여서 사용한다.

foo=”동영상은 tv팟”   - 입력
echo $foo   - 입력
동영상은 tv팟   - 출력결과 
  • 주의! 변수에 값 입력시 ! 가 들어갈시에는 작은따옴표(‘test’)로 입력한다.

환경변수

  1. Shell을 기동하고 나면 기복적으로 셋팅 되어 있는 변수. 필요한 경우 일반변수처럼 값을 얻어오거나 셋팅 할 수 있다.
  2. $0 – 실행된 쉘 스크립트 이름 b. $# - 스크립트에 넘겨진 인자의 개수 c. $$ - 쉘 스크립트의 프로세스 ID

인자변수

  1. 쉘 스크립트에 인자를 넘겨줄 때 그 인자들에 대한 정보를 가지고 있는 변수이다.
  2. $1 ~ $nnn – 넘겨진 인자들 b. $* - 스크립트에 전달된 인자들을 모아놓은 문자열 하나의 변수에 저장되며 IFS 환경변수의 첫번째 문자로 구분된다. c. $@ - $*와 같은 기능이지만 구분자가 IFS변수의 영향을 받지 않는다.

예제
-> ./vi test2.sh
echo "This Script Executable File : $0"
echo "Argument Count : $#"
echo "Process ID : $$"
echo "Argument List \$* : $*"
echo "Argument List \$@ : $@"
echo "Argument 1 : $1"
echo "Argument 2 : $2"

-> ./sh test.sh a b
This Script Executable File : ./test2.sh
Argument Count : 2
Process ID : 9308
Argument List $* : a b
Argument List $@ : a b
Argument 1 : a
Argument 2 : b 

함수

  1. 함수는 스크립트 안의 스크립트이다 (a script-within-a-script)
  2. 함수는 쉘의 메모리에 저장되고, 실행 속도가 빠르다
  3. declare –F 명령어로 현재 자신의 로그인 세션에 정의되어 있는 함수들을 알 수 있다.
  4. 명령어 우선순위
  5. Alias (alias ls=’ls –l’) b. 예약어 (function, if , for, ….) c. 함수 d. bunlt-ins like cd and type e. 스크립트, 프로그램

함수 정의 방법

bash
function testfunc {
 echo "test"
}

sh
testfunc() {
 echo "test"
} 

예제)
val1=$1
val2=$2
function testfunc {
 echo "동영상은 tv팟"
 echo $val1
 echo $val2 
}
testfunc
} 

String 연산자

  1. ${varname:-word} : varname이 존재하고 null이 아니면 그 값을 리턴, 아니면 word리턴
  2. ${varname:=word} : varname이 존재하고 null이 아니면 그 값을 리턴, 아니면 varname에 word를 대입
  3. ${varname:?message} : varname이 존재하고 null이 아니면 그 값을 리턴, 아니면 varname을 출력하고 message를 출력
  4. ${varname:+word} : varname이 존재하고 null이 아니면 word를 리턴 아니면 null을 리턴
  5. ${varname:offset:leng(없으면 varname의 length)} : varname=daum tvpot이면 ${varname:4}의 값은 tvpot, ${varname:5:2}의 값은 tv

pattern and pattern matching

  1. ${#valiable} : valiable의 길이를 가져온다
  2. ${variable#pattern} : pattern이 variable의 앞부분이 일치하면 가장 짧은 부분을 제거하고 나머지를 리턴
  3. ${variable##pattern} : pattern이 variable의 앞부분과 일치하면 가장 긴 부분을 제거하고나머지를 리턴
  4. ${variable%pattern} : pattern이 variable의 뒷부분과 일치하면 가장 짧은 부분을 제거하고나머지를 리턴
  5. ${variable%%pattern} : pattern이 variable의 뒷부분과 일치하면 가장 긴 부분을 제거하고나머지를 리턴
  6. ${variable/pattern/string} : 일치하는 가장 긴 부분을 string으로 대체. 한번만 일어남
  7. ${variable//pattern/string} : 일치하는 가장 긴 부분을 string으로 대체. 모두 일어남

조건문

if / else

  문법
if condition
   then
      statements
elif condition
   then
      statements
else
      statements
fi 

값 비교절
  1. [ string ] - string이 빈 문자열이 아니라면 참
  2. [ string1 = string2 ] - 두 문자열이 같다면 참 or string1 matches string2
  3. [ string1 != string2 ] - 두 문자열이 다르면 참 or string1 does not match string2
  4. [ -n string ] - 문자열이 null(빈 문자열) 이 아니라면 참
  5. [ -z string ] - 문자열이 null(빈 문자열) 이라면 참
  6. [ expr1 -lt expr2 ] – exp2가 exp1보다 크면 참 (‘Less than')
  7. [ expr1 -le expr2 ] – exp2가 exp1보다 크거나 같다면 참 (‘Less than or equal')
  8. [ expr1 -eq expr2 ] - 두 표현식 값이 같다면 참 (‘EQual')
  9. [ expr1 -ne expr2 ] - 두 표현식 갑이 같지 않다면 참 ('Not Equal')
  10. [ expr1 -gt expr2 ] - expr1 > expr2 이면 참 ('Greater Then')

  11. [ expr1 -ge expr2 ] - expr1 >= expr2 이면 참 ('Greater Equal')

  12. [ expr1 -ne expr2 ] - expr1 != expr2 이면 참 ('Not Equal')
  13. [ ! expr ] - expr 이 참이면 거짓, 거짓이면 참
  14. [ expr1 -a expr2 ] - expr1 AND expr2 의 결과 (둘다 참이면 참, 'And')
  15. [ expr1 -o expr2 ] - expr1 OR expr2 의 결과 (둘중 하나만 참이면 참, 'Or')

파일관련 비교절
  1. [ -d FILE ] - FILE 이 디렉토리이면 참
  2. [ -e FILE ] - FILE 이 존재하면 참
  3. [ -f FILE ] - FILE 이 존재하고 정규파일이면 참
  4. [ -r FILE ] – 파일 읽을 권한이 있다면 참
  5. [ -s FILE ] – 파일이 있고 빈파일 아니라면 참
  6. [ -w FILE ] – 파일 쓰기 권한이 있다면 참
  7. [ -x FILE ] – 실행권한이 있다면 참
  8. [ -O FILE ] – 파일의 주인(?)이라면 참
  9. [ -G FILE ] – 파일의 group ID와 사용자의 group ID가 같다면 참
  10. [ FILE1 -nt F - : FILE1이 FILE2 보다 새로운 파일이면 ( 최근파일이면 ) 참
  11. [ FILE1 -ot F - : FILE1이 FILE2 보다 오래된 파일이면 참

case

  문법
case 변수 in
   pattern 1 )
      statements ;;
   pattern 2 )
      statements ;;
   * )
      statements ;;
esac 

select

   문법
select name [in list]
do
   statements that can use $name …
done 


|

정규 표현식(Regular expression, 줄여서 Regexp 또는 Regex)은 특정한 규칙을 가진 문자열의 집합을 표현하는 데 사용하는 형식 언어이다. 정규 표현식은 많은 텍스트 편집기프로그래밍 언어에서 문자열의 검색과 치환을 위해 지원하고 있으며, 특히 Tcl은 언어 자체에 강력한 정규 표현식 구현을 내장하고 있다.

정규 표현식은 컴퓨터 과학의 정규 언어로부터 유래하였으나 구현체에 따라서 정규 언어보다 더 넓은 언어를 표현할 수 있는 경우도 있으며, 심지어 정규 표현식 자체의 문법도 여러 가지 존재하고 있다. 이 중 표준화된 것으로는 POSIX의 확장 정규 표현식이 있으며, 표준화되지는 않았지만 펄의 정규 표현식과 그 대체 구현인 PCRE도 널리 사용된다.

문법

몇몇 문자는 특정한 논리적 관계를 나타내는 기호로 쓰인다. 이를 제외한 나머지 문자는 일반적인 문자를 나타낸다.

  • 선택 기호: "|" 기호는 여러 식 중에서 하나를 선택한다. 예를 들어, "abc|adc"는 abc라는 문자열과 adc라는 문자열을 모두 포함한다.
  • 묶기 기호: "("와 ")"로 여러 식을 하나로 묶을 수 있다. "abc|adc"와 "a(b|d)c"는 같은 의미를 가진다.
  • 개수 기호: 문자 뒤에 붙어 문자의 개수를 나타낸다.
    • "*" : 0개 이상. "a*b"는 "b", "ab", "aab", "aaab"를 포함한다.
    • "+" : 1개 이상. "a+b"는 "ab", "aab", "aaab"를 포함하지만 "b"는 포함하지 않는다.
    • "?" : 0개 또는 1개. "a?b"는 "b", "ab"를 포함한다.
    • "{m, n}" : m개 이상 n개 이하. "a{1,3}b"는 "ab", "aab", "aaab"를 포함하지만, "b"나 "aaaab"는 포함하지 않는다.

이에 따라 "(fa|mo|br?o)ther"는 "father", "mother", "brother", "bother"를 나타낸다.

많은 프로그래밍 언어에서는 이를 확장한 문법을 가지고 있다. 이 중 일반적으로 사용되는 연산자는 다음과 같다.

  • "[]" : "["과 "]" 사이의 문자 중 하나를 선택한다. "|"를 여러 개 쓴 것과 같은 의미를 가진다. 예를 들면 [abc]d는 ad, bd, cd를 뜻한다. 또한, "-" 기호와 함께 쓰면 문자의 범위를 지정할 수 있다. "[a-z]"는 a부터 z까지 중 하나, "[1-9]"는 1부터 9까지 중의 하나를 뜻한다.
  • "[^]" : "[^"과 "]" 사이의 문자를 제외한 나머지 하나를 선택한다. 예를 들면 [^abc]d는 ad, bd, cd는 포함하지 않고 ed, fd 등을 포함한다. [^a-z]는 알파벳 소문자로 시작하지 않는 모든 문자를 나타낸다.
  • "^", "$" : 각각 문자열의 처음과 끝을 나타낸다.
바깥 고리

원문 : http://enc.daum.net/dic100/contents.do?query1=10XXX74388

C#이나 Java 데모코드 있으신분 트랙백이나 링크, 댓글 부탁드립니다.
|

No7Do's Blog is powered by Daum & tistory