3 셸 프로 그래 밍 지식

8358 단어 shell
[TOC]
하루
1. 셸 스 크 립 트 소개
  • 셸 은 스 크 립 트 언어 aminglinux blog.lishiming.net
  • 논리 적 판단, 순환 등 문법
  • 을 사용 할 수 있다.
  • 함수 사용자 정의 가능
  • 셸 은 시스템 명령 의 집합
  • 셸 스 크 립 트 는 자동화 운영 을 실현 할 수 있 고 우리 의 운영 효율 을 크게 증가 시 킬 수 있다
  • 2. 셸 스 크 립 트 구조 와 실행
  • 시작 부분 에 #!/bin/bash 를 추가 해 야 합 니 다. 이것 은 셸 의 고유 형식 입 니 다. 다음 에 실행 할 명령 을 지정 합 니 다. 그 해석 기 를 통 해 작 동 합 니 다
  • \ # 로 시작 하 는 줄 을 설명 하고 일부 시작 스 크 립 트 \ # 로 시작 하 는 줄 은 특정한 역할 을 합 니 다
    #! /bin/bash
    # chkconfig: 2345 10 90          ,
    # description: Activates/Deactivates all network interfaces configured to \                ,           chkconfig    
    #              start at boot time.  
    #
  • 스 크 립 트 의 이름 은 .sh 로 끝 납 니 다. 이것 은 셸 스 크 립 트
  • 를 구분 하 는 데 사 용 됩 니 다.
  • 집행 방법 은 두 가지 가 있다.
  • chmod +x 1.sh; ./1.sh
  • bash 1.sh
  • 스 크 립 트 를 실행 할 때 bash 나 sh 로 모두 가능 합 니 다
    [root@mydb1 test]# ls -l /bin/sh 
    lrwxrwxrwx 1 root root 4 Apr 24  2019 /bin/sh -> bash
    [root@mydb1 test]# ls -l /bin/bash 
    -rwxr-xr-x 1 root root 906568 Mar 23  2017 /bin/bash
  • 스 크 립 트 실행 과정 보기 bash -x 1.sh
  • 스 크 립 트 의 문법 오류 여 부 를 보기 bash -n 1.sh 문법 적 오류 만 검사 할 수 있 습 니 다
  • 3. date 명령 사용 방법
  • date +%Y-%m-%d, date +%y-%m-%d 년 월 일
  • date +%H:%M:%S = date +%T 시간
  • date +%s 타임 스탬프
  • date -d @1504620492
  • date -d "+1day" 하루 후
  • date -d "-1 day" 하루 전
  • date -d "-1 month" 1 월 전
  • date -d "-1 min" 1 분 전
  • date +%w, date +%W
  • 프레젠테이션:
    [root@mydb1 test]# date +%y     
    19
    [root@mydb1 test]# date +%Y  
    2019
    [root@mydb1 test]# date +%m    
    11
    [root@mydb1 test]# date +%M   
    40
    [root@mydb1 test]# date +%d   
    20
    [root@mydb1 test]# date +%D    / / 
    11/20/19
    [root@mydb1 test]# date +%Y%m%d     
    20191120
    [root@mydb1 test]# date +%F     - - 
    2019-11-20
    [root@mydb1 test]# date +%H     
    11
    [root@mydb1 test]# date +%s      ,  197001010000        
    1574221403
    [root@mydb1 test]# date +%S    
    30
    [root@mydb1 test]# date +%T    : : 
    11:49:36
    [root@mydb1 test]# date +%h      
    Nov
    [root@mydb1 test]# date +%H:%M:%S      T
    11:52:40
    [root@mydb1 test]# date +%w      
    3
    [root@mydb1 test]# date +%W          
    46
    
        [root@mydb1 test]# cal       
        November 2019   
        Su Mo Tu We Th Fr Sa
                                        1  2
         3  4  5  6  7  8  9
        10 11 12 13 14 15 16
        17 18 19 20 21 22 23
        24 25 26 27 28 29 30
    
        [root@mydb1 ~]# date +'%Y%m%d' -d '1 days ago'
        20191119
        [root@mydb1 ~]# date +'%Y%m%d' -d '-1 days'
        20191119
    
        [root@mydb1 ~]# date +%F -d '1 year' 1   
        2020-11-20
        [root@mydb1 ~]# date +%F -d '-1 year' 1   
        2018-11-20
    
        [root@mydb1 ~]# date +%T
        13:55:03
        [root@mydb1 ~]# date +%T -d '-1 hour'  1    
        12:55:18
    
        [root@mydb1 ~]# date +%s
        1574229561
        [root@mydb1 ~]# date -d @1574229561              
        Wed Nov 20 13:59:21 CST 2019
    
        [root@mydb1 ~]# date +%s -d "2019-11-20 14:01:01"             
        1574229661

  • 4. 셸 스 크 립 트 의 변수
  • 스 크 립 트 에서 어떤 문자열 을 자주 사용 하고 문자열 의 길이 가 길 때 변 수 를 사용 해 야 합 니 다
  • 조건 문 구 를 사용 할 때 변수 if [$a - gt 1] 를 자주 사용 합 니 다.then ... ; fi
  • 어떤 명령 의 결 과 를 인용 할 때 n = 'wc - l 1. txt'
  • 를 변수 로 대체 합 니 다.
  • 사용자 와 상호작용 하 는 스 크 립 트 를 쓸 때 변수 도 빠 질 수 없 는 read - p "Input a number:" n;echo $n 이 n 을 쓰 지 않 았 다 면 $REPLY
  • 를 직접 사용 할 수 있 습 니 다.
  • 내 장 된 변수 $0, $1, $2... $0 은 스 크 립 트 자 체 를 표시 합 니 다. $1 첫 번 째 매개 변수, $2 두 번 째 매개 변수... $\ # 는 매개 변수 개 수 를 표시 합 니 다
  • 수학 연산 a = 1;b=2; c = $($a + $b) 또는 $[$a + $b]
  • 5. 셸 스 크 립 트 의 논리 적 판단
  • 형식 1: if 조건;then 구문;fi
    #!/bin/bash
    a=5
    if [ $a -gt 3 ]
    then
       echo ok
    fi
  • 형식 2: if 조건;then 구문;else 구문;fi
    #!/bin/bash
    a=2
    if [ $a -gt 3 ]
    then
       echo ok
    else
       echo nook
    fi
  • 형식 3: if...;then … ;elif …; then …; else …; fi
    #!/bin/bash
    a=3
    if [ $a -gt 4 ]
    then
       echo ">1"
    elif [ $a -lt 6 ]
    then
       echo "<6 && >1"
    else
       echo nook
    fi
  • 논리 적 판단 표현 식:
  • if [ $a -gt $b ]
  • if [ $a -lt 5 ]
  • if [ $b -eq 10 ]
  • -gt (>); -lt(=); -le(<=);-eq(==); -ne (! =) 곳곳에 빈 칸 이 있 으 니 주의 하 세 요
  • 사용 가능 & | 여러 조건 결합
  • if [ $a -gt 5 ] && [ $a -lt 10 ]; then 그리고
  • if [ $b -gt 5 ] || [ $b -lt 3 ]; then 또는

  • 둘째, DAY 7
    6. 파일 디 렉 터 리 속성 판단
  • [ -f file ] 일반 문서 여 부 를 판단 하고 존재 한다
    #!/bin/bash
    f="/tmp/test.txt"
    if [ -f $f ]
    then
       echo $f exist
    else
       touch $f
    fi
    
           ,     !
    #!/bin/bash
    f="/tmp/abc.txt"
    if [ ! -f $f ]
    then
       touch $f
    fi
  • [ -d file ] 디 렉 터 리 여 부 를 판단 하고 존재 한다
  • [ -e file ] 파일 이나 디 렉 터 리 가 존재 하 는 지 판단 하기
  • [ -r file ] 파일 읽 을 수 있 는 지 판단 하기
  • [ -w file ] 문서 의 작성 여 부 를 판단 한다
  • [ -x file ] 파일 의 실행 가능 여 부 를 판단 한다
  • 7. if 특수 용법
  • if [ -z "$a" ] 이것 은 변수 a 의 값 이 비어 있 을 때 어떻게 되 는 지 나타 낸다
    #!/bin/bash
    if [ ! -f /tmp/abc.log ]
    then
       echo "/tmp/abc.log not exist"
       exit
    fi
    n=`wc -l /tmp/abc.log`
    if [ -z "$n" ]
    then
       echo error
       exit
    elif [ $n -gt 100 ]
    then
       echo $n
    fi
  • if [ -n "$a" ] 는 변수 a 의 값 이 비어 있 지 않 으 면 한 파일 의 내용 이 비어 있 지 않다 고 판단 할 수 있다
    [root@localhost tmp]# if [ -n if.sh ];then echo ok;fi           
    ok
    [root@localhost tmp]# if [ -n "$a" ];then echo $a;else echo "a is null";fi                
    a is null 
  • if grep -q '123' 1.txt; then 은 1. txt 에 '123' 줄 이 들 어 있 으 면 어떻게 되 는 지
    [root@localhost tmp]# grep -w 'zabbix' /etc/passwd
    zabbix:x:498:498:Zabbix Monitoring System:/var/lib/zabbix:/sbin/nologin
    [root@localhost tmp]# 
    [root@localhost tmp]# if grep -w 'zabbix' /etc/passwd;then echo "zabbix exist";fi
    zabbix:x:498:498:Zabbix Monitoring System:/var/lib/zabbix:/sbin/nologin
    zabbix exist
    [root@localhost tmp]# if grep -wq 'zabbix' /etc/passwd;then echo "zabbix exist";fi    -q       ,           
    zabbix exist
  • if [ ! -e file ]; then 파일 이 존재 하지 않 을 때 어떻게 되 는 지 나타 낸다
  • if (($a<1)); then …if [ $a -lt 1 ]; then…
  • 와 같다.
  • [ ] 에 서 는 사용 할 수 없습니다. = =,! =, > =, < =이런 기호
  • 8. cace 판단 (상)
  • 형식:
    case     in
    value1)
    command
    ;;
    value2)
    command
    ;;  
    *)
    commond
    ;;
    esac
    
  • 케이스 프로그램 에서 조건 에서 사용 할 수 있 습 니 다 |, 표시 또는 의미, 예 를 들 어
    - 2|3)
    command  
    ;;
  • 사례:
    #!/bin/bash
    read -p "Please input a number: " n
    if [ -z "$n" ]
    then
        echo "Please input a number."
        exit 1
    fi
    
    n1=`echo $n|sed 's/[0-9]//g'`
    if [ -n "$n1" ]
    then
     echo "Please input a number."
     exit 1
    fi
    
    if [ $n -lt 60 ] && [ $n -ge 0 ]
    then
        tag=1
    elif [ $n -ge 60 ] && [ $n -lt 80 ]
    then
        tag=2
    elif [ $n -ge 80 ]  && [ $n -lt 90 ]
    then
        tag=3
    elif [ $n -ge 90 ] && [ $n -le 100 ]
    then
        tag=4
    else
        tag=0
    fi
    case $tag in
        1)
            echo "not ok"
            ;;
        2)
            echo "ok"
            ;;
        3)
            echo "ook"
            ;;
        4)
            echo "oook"
            ;;
        *)
            echo "The number range is 0-100."
            ;;
    esac
    9. cace 판단 (하)
  • 10. for 순환
  • 문법: for 변수 이름 in 조건;do …; done
  • 사례 1
    #!/bin/bash
    sum=0
    for i in `seq 1 100`
    do
      sum=$[$sum+$i]
      echo $i
    done
    echo $sum
  • 사례 2
    
          
    #!/bin/bash
    cd /etc/
    for a in `ls /etc/`
    do
      if [ -d $a ]
      then
          ls -d $a
      fi
    done
  • 좋은 웹페이지 즐겨찾기