Shell 스 크 립 트 언어 -- markdown 노트

7952 단어
셋 톱 박스 개발 에 종사 한 후에 많은 Shell 스 크 립 트 를 보 았 습 니 다. 예 를 들 어 시작 스 크 립 트, 시스템 업그레이드 스 크 립 트, 소프트 프로 브 스 크 립 트, 시스템 컴 파일 스 크 립 트 등 입 니 다.이 스 크 립 트 들 은 모두 셸 언어 로 개발 되 었 습 니 다. 평소 수요 개발 과 유지 보수 에 있어 서 일정한 스 크 립 트 수정 과 관련 되 지만 셸 언어 를 체계적으로 배 운 적 이 없습니다.그래서 이 글 은 주로 셸 을 배 우 는 과정 에서 의 필 기 를 기록 하고 있다.또한 마크 다운 문법 을 공 고 히 하기 위해 이 필 기 는 모두 마크 다운 으로 기록 되 어 있다.
셸 스 크 립 트 언어
1. 셸 스 크 립 트 언어 는 무엇 입 니까?
스 크 립 트 언어 는 대본 처럼 컴퓨터 에 어떤 일 을 가 르 치 는 언어 다.
스 크 립 트 언어 는 사실 컴퓨터 가 일련의 작업 을 자동화 하 는 데 사용 되 는 짧 은 프로그램 입 니 다. 이런 프로그램 은 텍스트 편집기 로 수정 할 수 있 습 니 다.
컴 파일 할 필요 가 없습니다. 일반적으로 실행 을 설명 합 니 다.
2. 셸 스 크 립 트 를 실행 하 는 두 가지 방법
chmod +x ./XXX.sh    chmod    
./XXX.sh
/bin/sh XXX.sh

3. 셸 변수
변 수 를 정의 할 때 변 수 는 $를 추가 하지 않 습 니 다. 예 를 들 어:
your_name="runoob.com"

정 의 된 변 수 를 사용 할 때 변수 이름 앞 에 $기 호 를 추가 하면 됩 니 다. 예 를 들 어:
your_name="qinjx"
echo ${your_name}

읽 기 전용 변수
readonly myUrl
myUrl="www.baidu.com"

변수 삭제
unset myUrl

변수 형식
1. 부분 변수: 부분 변 수 는 스 크 립 트 나 명령 에서 정의 되 고 현재 셸 인 스 턴 스 에서 만 유효 하 며 다른 셸 시작 프로그램 은 변 수 를 방문 할 수 없습니다.
2. 환경 변수: 모든 프로그램 은 셸 이 시작 하 는 프로그램 을 포함 하여 환경 변 수 를 방문 할 수 있 고 일부 프로그램 은 환경 변 수 를 통 해 정상 적 인 운행 을 확보 해 야 합 니 다.필요 할 때 셸 스 크 립 트 도 환경 변 수 를 정의 할 수 있 습 니 다.
3. 셸 변수: 셸 변 수 는 셸 프로그램 에서 설정 한 특수 변수 입 니 다. 셸 변수 중 일 부 는 환경 변수 이 고 일 부 는 부분 변수 입 니 다. 이런 변 수 는 셸 의 정상 적 인 운행 을 보장 합 니 다.
4. 셸 문자열
문자열 은 작은 따옴표 도 사용 할 수 있 고 작은 따옴표 도 사용 하지 않 을 수 있 습 니 다.
따옴표 사용 을 강력 히 권장 합 니 다.
문자열 길이 가 져 오기
string="adcg"
echo ${#string}

하나 더
추출 문자열
string="runoob is a great site"
scho ${string 1:4}   uoo , 0   

5. 셸 배열
셸 은 1 차원 배열 만 지원 합 니 다.
정의 배열
괄호 로 배열 을 표시 하고 배열 요 소 는 '빈 칸' 기호 로 나 누 어 배열 의 일반적인 형식 을 정의 합 니 다.
array_name=(value0 value1 value2 value3)

읽 기 배열
valuen=${array_name[1]}

@ 기 호 를 사용 하면 배열 의 모든 요 소 를 가 져 올 수 있 습 니 다. 예 를 들 어:
echo ${array_name[@]}

배열 요소 의 개 수 를 가 져 옵 니 다.
length=${#array_name[@]

배열 단일 요소 의 길 이 를 가 져 옵 니 다.
length=${#array_name[1]}

6. 셸 전달 매개 변수
스 크 립 트 에서 파 라 메 터 를 가 져 오 는 형식 은 0 대표 파일 이름, $1 대표 파라미터 1, $2 대표 파라미터 2 입 니 다.
존재 하지 않 는 인 자 를 출력 할 때 결과 가 비어 있 습 니 다.
  • $\ # 스 크 립 트 에 전 달 된 매개 변수 개수
  • $* 모든 스 크 립 트 가 전달 하 는 인 자 를 하나의 문자열 로 표시 합 니 다
  • $$스 크 립 트 가 실행 중인 현재 프로 세 스 번호
  • 7. 셸 기본 연산 자
    기본 연산 자 결과 false 나 true 를 문자열 로 변수 에 할당 할 수 없습니다.
    사 칙 연산 을 할 때 = 양쪽 은 빈 칸 을 쓰 지 않 고 + 양쪽 은 반드시 빈 칸 을 써 야 하 며, 사 칙 연산 은 반드시 쌍 괄호 를 써 야 한다. 예 를 들 어
    num=(($num+1))
    

    산수 연산 자
    형식: expr ` a + b '
  • 표현 식 과 연산 자 사이 에 빈 칸 이 있어 야 합 니 다. 예 를 들 어 2 + 2 는 옳지 않 습 니 다. 2 + 2
  • 로 써 야 합 니 다.
  • 완전한 표현 식 은 ` ` 에 포함 되 어야 합 니 다. 이 문 자 는 자주 사용 하 는 작은 따옴표
  • 가 아 닙 니 다.
    관계 연산 자
    관계 연산 자 는 문자열 의 값 이 숫자 가 아 닌 숫자 만 지원 합 니 다.
    가정 a = 10, b = 20
    연산 자
    설명 하 다.
    예 를 들다
    -eq
    두 개의 수가 같은 지 확인 하고, 같은 값 으로 true 로 돌아 갑 니 다.
    [$a - eq $b] false 되 돌리 기
    -ne
    두 개의 수가 같은 지 확인 하고, 같 지 않 으 면 true 로 돌아 갑 니 다.
    [$a - ne $b] true
    -gt
    왼쪽 의 수가 오른쪽 보다 큰 지 확인 합 니 다. 만약 그렇다면 true 로 돌아 갑 니 다.
    [$a - gt $b] false 되 돌리 기
    -lt
    왼쪽 의 수가 오른쪽 보다 작은 지 확인 합 니 다. 그렇다면 트 루 로 돌아 갑 니 다.
    [$a - gt $b] true 로 돌아 가기
    -ge
    왼쪽 의 수가 오른쪽 보다 큰 지 확인 하고, 만약 그렇다면 true 로 돌아 갑 니 다.
    [b] false 로 돌아 갑 니 다.
    -le
    왼쪽 의 수가 오른쪽 보다 작은 지 확인 하고, 그렇다면 트 루 로 돌아 갑 니 다.
    [b] 트 루 로 돌아 가기.
    불 연산 자
  • ! 비 연산
  • - 0 또는 연산
  • - a 와 연산
  • 논리 연산 자
    & & 연산
    | | 또는 연산
    문자열 연산 자
    연산 자
    설명 하 다.
    예 를 들다
    =
    두 문자열 이 같은 지 확인 하고 트 루 로 돌아 갑 니 다.
    [b] false 로 돌아 갑 니 다.
    !=
    두 문자열 이 같은 지 확인 하고 트 루 로 돌아 갑 니 다.
    [b] 트 루 로 돌아 가기.
    -z
    문자열 길이 가 0 인지, 0 인지 true 로 되 돌아 갑 니 다.
    [- z $a] false 로 돌아 갑 니 다.
    -n
    문자열 길이 가 0 인지, 0 이 아 닌 true 를 되 돌려 줍 니 다.
    [- n $a] 트 루 로 돌아 갑 니 다.
    str
    문자열 이 비어 있 는 지, 비어 있 는 지 true 로 돌아 가지 않 습 니 다.
    [$a] 트 루 로 돌아 갑 니 다.
    파일 테스트 연산 자
    연산 자
    설명 하 다.
    예 를 들다
    -s file
    파일 이 비어 있 는 지 확인 합 니 다 (파일 크기 가 0 이상 인지). 비어 있 는 지 true 로 돌아 가지 않 습 니 다.
    [- s $file] true 로 돌아 갑 니 다.
    -e file
    파일 (디 렉 터 리 포함) 이 존재 하 는 지 확인 하고 트 루 로 돌아 갑 니 다.
    [- e $file] true 를 되 돌려 줍 니 다.
    8. 셸 프로 세 스 제어
    if 구문
    if 구문
    if ····
    then 
        ·····
        ·····
    fi
    

    if else 문장
    if ····
    then
        ····
        ····
    else 
        ····
    fi
    

    if else-if else
    if ·····
    then
        ······
    elif ····· 
    then 
        ·····
    else
        ·····
    fi
    

    for 순환
    for 순환 형식:
    for var in items items2 item3 .... itemsN
    do
      command1
      command2
      ··
      commandN
    done
    

    while 구문
    while 순환 은 일련의 명령 을 계속 실행 하 는 데 사 용 됩 니 다. 입력 파일 에서 데 이 터 를 읽 는 데 도 사 용 됩 니 다. 명령 은 보통 테스트 조건 입 니 다. 그 형식 은 다음 과 같 습 니 다.
    while condition
    do
        command
    done
    

    while condition 이 사 칙 연산 과 관련 이 있다 면, 쌍 괄호 를 사용 해 야 합 니 다.
    작은 따옴표 ('): 묶 은 문 자 를 일반 문자 로 합 니 다.
    두 따옴표 ("): 괄호 로 묶 은 문 자 는" $"," \ "," "와" "" 를 제외 하고 그 특수 기능 을 유지 하 는 것 을 제외 하고 나머지 는 여전히 일반 문자 로 한다.
    반 따옴표 (`): 묶 인 문자열 은 명령 으로 해석 되 며, 셸 은 먼저 이 명령 을 실행 하고, 그의 표준 출력 결과 예 를 들 수 있 습 니 다.
    9. 셸 함수
    무 참 함수
    셸 에서 함수 의 정의 형식 은 다음 과 같 습 니 다.
    [ function ] funname [()]
    {
        action;
        [return int;]
    }
    
  • function fun () 정 의 를 가 져 올 수도 있 고 직접 fun () 정 의 를 가 져 올 수도 있 으 며 어떠한 매개 변수
  • 도 가지 고 있 지 않 습 니 다.
  • 매개 변 수 를 되 돌려 줍 니 다. 추가, return 을 표시 할 수 있 습 니 다. 추가 하지 않 으 면 마지막 명령 으로 결 과 를 되 돌려 줍 니 다.
  • #!/bin/bash
    demoFun(){
        echo "        shell   !"
    }
    echo "-----      -----"
    demoFun
    echo "-----      -----"
    
    #!/bin/bash
    funWithReturn(){
        echo "                   ..."
        echo "       : "
        read aNum
        echo "       : "
        read anotherNum
        echo "        $aNum   $anotherNum !"
        return $(($aNum+$anotherNum))
    }
    funWithReturn
    echo "           $? !"
    
  • 함수 반환 값 은 호출 후 $를 통과 합 니까?가 져 오기
  • 모든 함 수 는 사용 하기 전에 정의 해 야 합 니 다. 이것 은 함 수 를 스 크 립 트 시작 부분 에 두 어야 합 니 다. 셸 해석 기 가 처음 발견 할 때 까지 사용 할 수 있 습 니 다. 호출 함 수 는 함수 이름 만 사용 하면 됩 니 다
  • 유 참 함수
    셸 에서 함 수 를 호출 할 때 파 라 메 터 를 전달 할 수 있 습 니 다. 함수 내부 에서 1 을 통 해 첫 번 째 파 라 메 터 를 표시 합 니 다.
    #!/bin/bash
    funWithParam(){
        echo "       $1 !"
        echo "       $2 !"
        echo "       $10 !"
        echo "       ${10} !"
        echo "        ${11} !"
        echo "      $#  !"
        echo "              $* !"
    }
    funWithParam 1 2 3 4 5 6 7 8 9 34 73
    
  • 주의, {10}
  • 매개 변수 처리
    설명 하 다.
    $#
    스 크 립 트 에 전 달 된 매개 변수 개수
    $*
    스 크 립 트 에 전 달 된 모든 인 자 를 단일 문자열 로 표시 합 니 다.
    $$
    스 크 립 트 가 실행 중인 현재 프로 세 스 ID 번호
    $!
    백그라운드 에서 실행 중인 마지막 프로 세 스 의 ID 번호
    $@
    $* 와 같 지만 사용 할 때 따옴표 를 추가 하고 따옴표 에서 매개 변 수 를 되 돌려 줍 니 다.
    $-
    셸 이 사용 하 는 현재 옵션 을 보 여 줍 니 다. set 명령 기능 과 같 습 니 다.
    $?
    마지막 명령 의 종료 상 태 를 표시 합 니 다.0 은 오류 가 없 음 을 나타 내 고 다른 값 은 오류 가 있 음 을 나타 낸다.
    10. 셸 파일 포함
    다른 언어 와 마찬가지 로 셸 도 외부 스 크 립 트 를 포함 할 수 있 습 니 다. 그러면 공용 코드 를 독립 파일 로 편리 하 게 밀봉 할 수 있 습 니 다.
    문법 은 다음 과 같다.
    . filename   #     (.)          
    
     
    
    source filename
    

    예:
    test1.sh
    #!/bin/bash
    url="http://www.runoob.com"
    

    test2.sh
    #!/bin/bash
    #   .     test1.sh   
    . ./test1.sh
    #             
    # source ./test1.sh
    echo "        :$url"
    

    결 과 는:
    $ chmod +x test2.sh 
    $ ./test2.sh 
    
  • 포 함 된 파일 test1. sh 실행 권한 필요 없 음
  • 좋은 웹페이지 즐겨찾기