3 분기에 - 첫번째로 높은 수준의 프로그래밍 과정 -Shell 스크립트 (27)

제 27과 -Shell 고급 프로그래밍 스크립트

 

 

28.1 스크립트 무엇입니까

일련의이 포함 된 스크립트 명령 시퀀스텍스트 파일 (에디터가 편집 할 수 있으며, 수행 할 수 있습니다). 이 스크립트 파일을 실행하면 파일이 일련의 명령이 자동으로 실행됩니다 포함되어 있습니다. 예를 들어, 우리는 일곱 개 파일을 생성, 당신은 또한 스크립트 파일 (의 .sh 파일)을 생성 할 수 있습니다, 일곱 개 파일을 만들 계속할 수 있습니다.

 

28.2 스크립팅 기술

1. 기본 구조

(1) 파서 : #! 스크립트 파서 동작을 의미 후반부;

(2) 커맨드 서열 명령 다수.

2. 변수

쉘 스크립트 설정하고 숫자 나 문자열, 사용자가 유형을 지정하지 않아도 할 수 있으며, 사용하기 전에 정의 할 필요가 없습니다 자신의 변수를 사용하는 것을 허용합니다. 공간이없는 권리의 할당 및 왼쪽 , 코멘트 #로 시작합니다.

#! / 빈 / SH

A = "안녕하세요!"

B = 5

에코 "A는 : $ a를"

에코 "는 B %의 B는"

참고 : 우리가 창 아래에있는 파일을 리눅스에서 다른 파일을 사용하고 있기 때문에 프로그램을 실행하기 전에 우리가 그 잘못 찾을 수 있습니다. 그래서 우리는 DOS2UNIX의 shell.sh로 전환했다. 우리는 변환하기 전에 적절한 rpm 패키지를 설치하려고합니다.

3. 매개 변수

C 프로그램과 마찬가지로, 쉘 스크립트는 명령 줄 매개 변수를 사용할 수 있습니다

$ 번호 : 스크립트에 명령 줄 매개 변수의 수

$의 * : 개별 매개 변수 값 사이의 모든 명령 줄 매개 변수 값이 비어

$ 0 : 명령 자체 (자체 쉘)

$ 1 : 첫 번째 명령 줄 인수

$ 2 : 두 번째 명령 줄 인수

예를 들면 :

 

# 2.3

에코 "VAR 번호 :"$ #

* $ "바르의 값"에코

$ 0 "으로 이름을 스크립트의"에코

"VAR1의 값"$ 1 에코

"VAR2의 값"$ 2 에코

우리가 명령을 입력 한 후 3, 쇼를 ./shell.sh

VAR의 수 : 2

값은 3 바르

스크립트 ./shell.sh의 이름

VAR1 A의 값

VAR2 3 값

4. 디지털 컴퓨팅

쉘 스크립트는 5 + 1 expre 등의 수학적 표현을 계산하는 특별한 명령 EXPR을 제공하지만, 계산의 결과가 다른 변수에 복제해야 할 때, 당신은 또한 역 따옴표를 사용해야합니다. ~ 기호를 다음 줄은 '

만약 expr =`20 / 10`이었다

예를 들면 :

# 2.4

VAR1 = 10

VAR2 = 20

VAR3 =`expr에 $ var1에 / $ var2`

Var4 =`expr에 $ VAR1 + $ var2`

에코 $ VAR3

에코 $ var4

결과 : 0

          (30)

5. 공정 제어

(1) 쉘 스크립트 형식을 사용하여 기본 유량 제어 명령 IF-다음이다 :

만약 [조건] (특별 참고 사항 : 대괄호의 왼쪽과 오른쪽에 공백이 있어야합니다)

그때

명령

그밖에

명령

있다

L 조건은

작업을 비교

정수 연산

문자열 조작

같은

-eq

=

다른

-do

! =

보다 큼

-gt

이하

-lt

보다 크거나 같음

-provide

 

보다 작거나 같

-THE

 

가진 -

 

그것은 비어 있지

-엔

 

예 :

정수 A 및 B의 비교는 동일하다 : 만약 [$ $ A = B (EQ가 또한 사용될 수있다)

정수 A를 결정하는 정수 (B)보다 크다 : [A -gt $으로의 B를 $] 만약

비교 캐릭터 (A 및 B)은 동일하다 : 만약 [$ A = $ B]

문자열이 비어 있는지 여부를 결정합니다 : if [-z $ A]

정수 변수 A를 분석하는 단계 (B)보다 크다 : 만약 [$ A -gt $으로의 B]

참고 :

왼쪽과 오른쪽 괄호 난 비어 있습니다

L "="떠난 공간

 

파일 디렉토리

-e 파일이 이미 존재

-f 파일은 일반 파일입니다

-s 파일 크기가 0이 아닌

-d 파일은 디렉토리입니다

현재 사용자 -r 파일을 읽을 수 있습니다

쓸 수있는 현재 사용자에 대한 -w 파일

-x 파일은 현재 사용자에 대해 실행할 수 있습니다

#! / 빈 / SH

폴더 = / 집

[-R "$ 폴더"] && 현재 표면 상태의 "$ 폴더를 읽을 수있는"에코 사실은 다음 동작들을 수행

[-F "$ 폴더"] || 조건 에코의 현재의 얼굴 후자가 거짓 일 때 동작을 수행하도록 "이 파일이 아닙니다"

 

예 :

= 10이었다

경우의 [$ var에 -gt 5]

그때

    "값은 다음 qreater 5"에코

있다

결과를 작동 : 값이 qreater 다음 5

(2) 문

프로그래밍 언어가 같은 사이클에 대한 유사한 문을 작성하는 데 사용되는 C 쉘 스크립트는 문을 제공합니다. 형식을 사용 :

목록에서 VAR에 대한

해야 할 것

명령

끝난

예 :

#! / 빈 / bash는

목록 = "일 월 화 수 목 금 토"

$ 목록에서 하루

해야 할 것

    $ 일 에코

끝난

결과 :

태양

결혼시키다

(3) 동안 문

프로그래밍 언어는 동안 같은주기에서 유사한 문을 작성하는 데 사용되는 C 쉘 스크립트는 잠시 문을 제공합니다. 형식을 사용 :

조건 동안

해야 할 것

명령

끝난

예 :

#! / 빈 / bash는

했다 = 5

동안의 [$ var에 -gt 0]

해야 할 것

    에코 $ var에

    VAR =`EXPR의 $이었다 - 1 '

끝난

결과 :

5

4

1

 

6. 편집기를 나오지도

SED (스트림 Editior) : AKA 스트림 편집기 라인 (멈춤) 편집기, 형식의 타임 라인 편집 :

SED [옵션] '명령'파일 이름

공통 옵션 :

-n : 지정된 가공 라인 만이 표시 되어도

-e : 여러 편집 작업을 확인

-i : 대신 직접 화면의 출력, 읽을 수있는 파일의 내용을 수정

리터 공통 명령 옵션 :

P 인쇄 정합 라인

새로운

C 대안 라인

위치 줄 거라고 삭제

라인의 일부가 대신이야

L SED 예

이러한 변경 사항은 원본 파일에 영향 -i 추가에 추가됩니다.

(1) 표시

SED -n '2P'tmp.txt에만 디스플레이 라인 2

SED -n '1,3p'tmp.txt 인쇄 라인 1 라인에 3 -F

SED -n '/ MOV /'P는 tmp.txt 포함 된 영화의 인쇄 라인

(2) 삭제

SED '2D'는 행 2 (나머지를 인쇄)을 삭제 tmp.txt

나오지도 '3 $ d를'마지막 줄에 세 번째 줄을 삭제 tmp.txt, $ : 마지막 줄

(3) 쿼리

SED -n '/ 인사 / P'의 모든 행 키워드 쿼리를 포함 tmp.txt 안녕하세요

(4) 대신에

나오지도 '1C 안녕'하이 대신에 tmp.txt 첫 번째 행

SED -n '/ / P 안녕하세요'tmp.txt | 나오지도 'SED의 / 인사 / 새 / g'

(5) 삽입

나오지도 -i 마지막 행의 안녕에 삽입 tmp.txt '부전승이 $'

 

7. AWK 분석기

AWK는 여러 필드에 각 행을 분할 기본 구분 된 공간, 라인하여 파일 라인을 읽는 강력한 텍스트 분석 도구입니다.

사용 : AWK '{패턴 + 액션}'파일 이름

패턴의 내용을 찾으려면

일치가 발견되면 명령 작업이 수행

예 :

마지막 -n 5 | AWK '{인쇄 $ 1}'마지막 -n 5는 가장 최근 다섯 사용자 로그인을 나타냅니다.

고양이 / etc / passwd에 | AWK의 -F '' ''{$ 1 인쇄} -F 지정된 구분 기호를 나타냅니다

AWK -F ':'$ 1 == "루트" '/ etc / passwd에'{$ 0 인쇄}

 

통합 예 28.3

QCD 분석

qcd.sh

QCD ()

{

        에서 mkdir -p /.qcd/tmp

    [-x /.qcd/tmp/qcd_tmp] || /.qcd/tmp/qcd_tmp 접촉

    chmod를 700 /.qcd/tmp

    QD = /. QCD / tmp를 / qcd_tmp

    수출 QD

    합니다 / usr / local / sbin / qcde "$의 @"

    [! `고양이 $ QD`] || CD "`고양이 $ QD`"

    은 rm -f "$ QD"

        해제 QD;

}

 

설치

#! / 빈 / SH

설치 #qcd

xiewei 2004 년 #written

 

setup_content =은 / etc / QCD

history_dir = $ setup_content / history_dir

bin_content = / usr / 지방 / sbin에

prof_content =은 / etc / profile.d

 

설정()

{

    #검사

    [-r $ history_dir] # $ history_dir하면 현재 사용자가 읽을 수있는 경우

    그때  

    "당신 QCD를 설치 한 것이 (예를 \의 Y 또는 Q의 \ Q 또는 N \ N)를 덮어 쓰시겠습니까?"-n 에코

    읽기 선택하면서

    해야 할 것

        [ "$ 선택"= "Y"-o "$ 선택"= "Y"] # 설치 경로를 다시 작성하는 경우

        그때

            단절

        있다

 

        [ "$ 선택"= "Q"-o "$ 선택"= "Q"] # 할 아무것도 출구 경우

        그때

            "아무!"에코 없다

            1 번 출구

        있다

              

        [ "$ 선택"= "N"-o "$ 선택"= "N"] # 기본 위치에 설치 한 경우

        그때

            CP -f ./qcd $ bin_content /

        CP -f ./qcd.sh $ prof_content /

        에코 "QCD 확인을 설치,하지만 그것을 덮어 쓰지 않습니다!"

            에코 "버전은 1.00이다"

            1 번 출구

        있다

 

        "당신 QCD를 설치 한 것이 (예를 \의 Y 또는 Q의 \ Q 또는 N \ N)를 덮어 쓰시겠습니까?"-n 에코

    끝난

    있다

   

    만약 [-r $ setup_content]

    그때

    :

    그밖에

    MKDIR $ setup_content

    있다

   

    CP -f ./qcde $ bin_content /

    CP -f ./history_dir $ setup_content /

    CP -f ./qcd.sh $ prof_content /

}

 

지우다()

{

    [-r $ history_dir] || [-r $ bin_content] || \

    ! "컴퓨터가 QCD하지!"에코 || ! "아무!"에코 없다

   

    -n 에코 "당신은 QCD (y를 \의 Y 또는 q의 \의 Q)을 삭제 하시겠습니까?"

    읽기 선택하면서

    해야 할 것

        만약 [ "$ 선택"= "Y"-o "$ 선택"= "Y"] 

        그때

            단절

        있다

   

    만약 [ "$ 선택"= "Q"-o "$ 선택"= "Q"] 

    그때

        "아무!"에코 없다

        1 번 출구

    있다

   

    -n 에코 "당신은 QCD (y를 \의 Y 또는 q의 \의 Q)을 삭제 하시겠습니까?"

    끝난

 

    RF RM은 $ setup_content

    RM은 -f의 $의 bin_content / QCD

    RM -f $ prof_content / qcd.sh

}

 

용법()

{

    "<설치> 컴퓨터에 QCD를 설치합니다."에코

    "<델를 설치하기> 컴퓨터에서 QCD를 삭제합니다."에코

    1 번 출구

}

 

"소프트웨어를 설치 QCD"에코

"XieWei 2004 년 작성된"에코

 

만약 파라미터의 개수는 다음 ≠ 0에 전달할 경우 [$ # -eq 0] #

    설정

    "QCD 확인을 설치!"에코

    에코 "버전은 1.00이다"

    1 번 출구

있다   

 

[$ # -gt 1] 인수 # 번호는 들어오는 경우 0보다 큰 경우

그때

    용법

있다   

 

첫 번째 인수는 델 인 경우 #에서 $ 1 케이스

의)

    지우다

    에코 "QCD 확인을 삭제 해!"

    ;;

*)

    사용 # 프롬프트

    ;;

ESAC

 

 

추천

출처www.cnblogs.com/free-1122/p/11360182.html