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 


|

No7Do's Blog is powered by Daum & tistory