Shell 의 기본 문법

5122 단어
1. 변량
관례 에 따 르 면 Shell 변 수 는 전체 대문자 와 밑줄 로 구성 되 고 두 가지 유형의 Shell 변수 가 있 습 니 다.
환경 변수
환경 변 수 는 부모 프로 세 스에 서 하위 프로 세 스에 전 달 될 수 있 기 때문에 셸 프로 세 스 의 환경 변 수 는 현재 셸 프로 세 스에 서 fork 나 온 하위 프로 세 스에 전 달 될 수 있 습 니 다.printenv 명령 으로 현재 셸 프로 세 스 의 환경 변 수 를 표시 할 수 있 습 니 다.
로 컬 변수
현재 Shell 프로 세 스에 만 존재 합 니 다. set 명령 으로 현재 Shell 프로 세 스에 정 의 된 모든 변수 (로 컬 변수 와 환경 변수 포함) 와 함 수 를 표시 할 수 있 습 니 다.
환경 변 수 는 모든 프로 세 스 가 가지 고 있 는 개념 이 고 로 컬 변 수 는 Shell 특유 의 개념 입 니 다.Shell 에서 환경 변 수 는 로 컬 변수의 정의 와 용법 이 비슷 합 니 다.Shell 에서 변 수 를 정의 하거나 할당 합 니 다:
$ VARNAME=value

등호 양쪽 에 빈 칸 이 있어 서 는 안 됩 니 다. 그렇지 않 으 면 셸 에 의 해 명령 과 명령 행 인자 로 해 석 됩 니 다.
하나의 변 수 를 정의 한 후 현재 셸 프로 세 스에 만 존재 합 니 다. 로 컬 변수 입 니 다. export 명령 으로 로 컬 변 수 를 환경 변수 로 내 보 낼 수 있 습 니 다. 환경 변 수 를 정의 하고 내 보 낼 수 있 습 니 다.
$ export VARNAME=value

두 단계 로 나 누 어 완성 할 수도 있다.
$ VARNAME=value
$ export VARNAME
unset 명령 으로 정 의 된 환경 변수 나 로 컬 변 수 를 삭제 할 수 있 습 니 다.
$ unset VARNAME

만약 에 하나의 변수 가 VARNAME 이 라 고 부 르 면 ${VARNAME} 으로 그 값 을 표시 할 수 있 고 나 쁜 의 미 를 일 으 키 지 않 는 상황 에서 도 $VARNAME 로 그 값 을 표시 할 수 있다.다음 의 예 를 통 해 이 두 가지 표현법 의 차 이 를 비교한다.
$ echo $SHELL
$ echo $SHELLabc
$ echo $SHELL abc
$ echo ${SHELL}abc

변 수 를 정의 할 때 $를 사용 하지 않 고 변 수 를 가 져 올 때 $를 사용 해 야 합 니 다.C 언어 와 달리 Shell 변 수 는 유형 을 명확 하 게 정의 할 필요 가 없습니다. 사실은 Shell 변수의 값 은 모두 문자열 입 니 다. 예 를 들 어 우리 가 정의 하 는 VAR=45, 사실은 VAR 의 값 은 정수 가 아 닌 문자열 45 입 니 다.Shell 변 수 는 먼저 정의 한 후에 사용 할 필요 가 없습니다. 정의 되 지 않 은 변 수 를 가 져 오 면 빈 문자열 입 니 다.
2. 파일 이름 변경 (Globbing): *?[]
일치 하 는 문 자 를 마스크 (Wildcard) 라 고 부 릅 니 다. 구체 적 으로 다음 과 같 습 니 다.
시계. 31.1. 어댑터
*
0 개 이상 의 임의의 문자 일치
?
임의의 문자 일치
[약간의 문자]
일치 하 는 괄호 의 임의의 문자 가 나타 납 니 다.
$ ls /dev/ttyS*
$ ls ch0?.doc
$ ls ch0[0-2].doc
$ ls ch[012][0-9].doc

Globbing 이 일치 하 는 파일 이름 은 Shell 에서 전개 되 었 습 니 다. 즉, 인자 가 프로그램 에 전달 되 기 전에 이미 전개 되 었 습 니 다. 예 를 들 어 상기 ls ch0[012].doc 명령 은 현재 디 렉 터 리 에 ch00.docch02.doc 가 있 으 면 ls 명령 에 전 달 된 매개 변 수 는 실제 적 으로 이 두 파일 이름 이지 일치 하 는 문자열 이 아 닙 니 다.
3. 명령 대체: '또는 $()
반 따옴표 로 묶 은 것 도 명령 입 니 다. Shell 은 이 명령 을 먼저 실행 한 다음 출력 결 과 를 현재 명령 줄 로 즉시 대체 합 니 다.예 를 들 어 변수 저장 date 명령 의 출력 을 정의 합 니 다.
$ DATE=`date`
$ echo $DATE

명령 대체 도 사용 할 수 있다 $().
$ DATE=$(date)

4. 산술 대체: $()
산술 계산 에 사용 되 며 $(()) 의 Shell 변 수 는 정수 로 변 환 됩 니 다. 예 를 들 어:
$ VAR=45
$ echo $(($VAR+3))
$(()) 에 서 는 + - * / 와 () 연산 자 만 사용 할 수 있 고 정수 연산 만 할 수 있다.
5. 전의 문자 /
C 언어 와 유사 하 다.예 를 들 면:
$ echo $SHELL
/bin/bash
$ echo /$SHELL
$SHELL
$ echo //
/

예 를 들 어 '$$' 라 는 파일 을 만 드 는 것 은 다음 과 같 습 니 다.
$ touch /$/ /$

또 하나의 문 자 는 특별한 의 미 를 가지 고 있 지 는 않 지만 파일 이름 을 만 드 는 것 도 귀 찮 습 니 다. 바로 - 번호 입 니 다.파일 이름 - 번호 로 시작 하 는 파일 을 만 들 려 면 안 됩 니 다.
$ touch -hello
touch: invalid option -- h
Try `touch --help' for more information.

덧 붙 여 / 전의 하 더 라 도 잘못 보고 합 니 다.
$ touch /-hello
touch: invalid option -- h
Try `touch --help' for more information.

각종 유 닉 스 명령 은 파일 이름 대신 - 번호 로 시작 하 는 명령 행 인 자 를 명령 의 옵션 으로 사용 하기 때문이다.굳이 - 번호 로 시작 하 는 파일 이름 을 처리 하려 면 두 가지 방법 이 있 습 니 다.
$ touch ./-hello

혹은
$ touch -- -hello

/ 또 하나의 용법 이 있 습 니 다. / 뒤에서 차 를 두 드 려 서 속 행 을 표시 합 니 다. Shell 은 명령 을 즉시 실행 하지 않 고 커서 를 다음 줄 로 옮 겨 서 속 행 알림 부 호 를 줍 니 다 > 사용자 가 계속 입력 하 기 를 기다 리 고 마지막 으로 모든 속 행 을 받 아서 하나의 명령 으로 실행 합 니 다.예 를 들 면:
$ ls /
> -l
(ls -l     )

6. 작은 따옴표
C 언어 와 달리 Shell 스 크 립 트 의 작은 따옴표 와 작은 따옴표 는 문자 의 정의 문자 가 아 닌 문자열 의 정의 문자 입 니 다.작은 따옴표 는 따옴표 안의 모든 문자 의 액면 가 를 유지 하 는 데 사 용 됩 니 다. 따옴표 안의 / 와 리 턴 도 예외 가 아니 지만 문자열 에 작은 따옴표 가 나타 나 면 안 됩 니 다.따옴표 가 맞지 않 으 면 Enter 를 입력 하면 Shell 은 따옴표 에 맞 게 연결 해 달라 고 요구 합 니 다.예 를 들 면:
$ echo '$SHELL'
$SHELL
$ echo 'ABC/(  )
> DE'(          )
ABC/
DE

7. 작은 따옴표
따옴표 는 따옴표 안의 모든 문자 의 액면 가 를 유지 하 는 데 사용 되 지만 다음 과 같은 경 우 는 제외 합 니 다.
  • $변수 이름 을 추가 하면 변수의 값 을 얻 을 수 있 습 니 다
  • 반 따옴표 는 여전히 명령 교체
  • 를 나타 낸다.
  • / $는 $의 글자 액면가
  • 를 나타 낸다.
  • / '표시 ` 의 글자 액면가
  • / "표시" 의 글자 액면가
  • / / 표시 / 의 글자 액면가
  • 상기 상황 을 제외 하고 다른 문자 앞 에 있 는 / 특별한 의미 없 이 글자 액면가 만 표시 합 니 다
  • $ echo "$SHELL"
    /bin/bash
    $ echo "`date`"
    Sun Apr 20 11:22:06 CEST 2003
    $ echo "I'd say: /"Go for it/""
    I'd say: "Go for it"
    $ echo "/"(  )
    >"(          )
    "
    
    $ echo "//"
    /

    좋은 웹페이지 즐겨찾기