스 크 립 트 와 사용 가능 한 스 크 립 트 연습 (업데이트 중...)

자질구레한 지식 점
  • 스 크 립 트 를 시작 하면 키 프로 세 스 를 시작 하 는 것 과 같 습 니 다. 변 수 는 계승 되 지 않 습 니 다
  • 주의 () 에 도 하위 프로 세 스 가 열 립 니 다. 변 수 는 계승 되 지 않 습 니 다. 전체 로 하려 면 {} 을 사용 해 야 합 니 다.
  • 그러나 exit 의 반환 값 이 () 안에 있 더 라 도 마지막 명령 이 실 행 된 후에 생 긴 것 이 라면 새로운 값 을 부여 하지 않 으 면 현재 셸 에서 계승 판단 할 수 있 습 니 다.이전 echo $name 처럼;(echo $name;) 작은 괄호 안에 값 이 없 으 면 두 name 이 표시 하 는 결과 와 마찬가지 로 작은 괄호 는 bash 를 직접 입력 하여 하위 프로 세 스 를 여 는 것 과 약간 다 릅 니 다.

  • vimrc 설정
    ~/.vimrc
    set ignorecase
    set cursorline
    set autoindent
    autocmd BufNewFile *.sh exec ":call SetTitle()"
    func SetTitle()
            if expand("%:e") == 'sh'
            call setline(1,"#!/bin/bash") 
            call setline(2,"#") 
            call setline(3,"#********************************************************************") 
            call setline(4,"#Author:                ZhangYinsheng") 
            call setline(5,"#QQ:                    744004845") 
            call setline(6,"#Date:                  ".strftime("%Y-%m-%d"))
            call setline(7,"#FileName:             ".expand("%"))
            call setline(8,"#URL:                   https://blog.51cto.com/14228129.")
            call setline(9,"#Description:          The test script")                                                        
            call setline(10,"#Copyright (C):        ".strftime("%Y")." All rights reserved")
            call setline(11,"#********************************************************************") 
            call setline(12,"") 
            endif
    endfunc
    autocmd BufNewFile * normal G

    centos 버 전 판단
    IDCentos_release_version.sh
    #!/bin/bash
    case "`cat /etc/redhat-release |grep -Eo " [0-9]{1,2}"|tr -d " " `"  in
            4) 
                    echo "Centos version is 4" ;; 
            5)
                    echo "Centos version is 5" ;;
            6)
                    echo "Centos version is 6" ;;
            7)      
                    echo "Centos version is 7" ;;
            8)
                    echo "Centos version is 8" ;;
            9)
                    echo "Centos version is 9" ;;
            10)
                    echo "Centos version is 10" ;;                                              
            esac
    
  • 숫자 앞 에 있 는 하나 이상 의 빈 칸 을 없 애 는 간단 한 방법 이 있 습 니 다. 하나의 변 수 를 그것 과 같 게 한 다음 에 출력 할 때 따옴표 를 붙 이지 않 으 면 됩 니 다. 빈 칸 도 형식 에 포함 되 어 있 습 니 다.
  • 예 를 들 어 위의 케이스 뒤의 긴 식 자 를 변수 에 할당 한 후에 판단 하면 tr 명령 으로 빈 칸 을 제거 할 필요 가 없다.
  • 그러나 문자 가운데 에 있 는 여러 개의 빈 칸 이 라면 이런 방법 으로 하나 가 되 고 모두 제거 되 지 않 으 니 주의해 야 한다.

  • 경고 디스크 와 inode 번호 사용량:
    #!/bin/bash
    Perscent=10  #        
    Usedisk="`df | grep "/dev/sd"|grep -E " [0-9]+%" -o| tr -d "%" |sort -nr |head -1 `";
    InodeUsedisk="`df -i | grep "/dev/sd"|grep -E " [0-9]+%" -o| tr -d "%" |sort -nr |head -1 `";
    [ $Usedisk -ge $Perscent ] && echo Warning! Useddisk is ${Usedisk}% ;
    [ $InodeUsedisk -ge $Perscent ] && echo Warning! InodeUseddisk is ${InodeUsedisk}% ;
    [ $Usedisk -lt $Perscent ] && [ $InodeUsedisk -lt $Perscent ] && echo Disk Using Condition is Good!;
    

    스 크 립 트 매개 변수 참조 및 $*, $@, shift 판단
    agr1.sh agr1 arg2...
    #!/bin/bash
    echo "1st arg is $1"
    echo "2st arg is $2"
    echo "2st arg is $3"
    echo "10st arg is ${10}"
    echo "all args are $*"
    echo "all args are $@"
    echo "args sumnumber is $#"
    echo "scriptname is `basename $0`"
    echo -e "\e[1;33marg2 use \$* begins test:\e[0m"
    arg2.sh "$*"  #use $*
    echo -e "\e[1;33marg3 use \$@ begins test:\e[0m"
    arg3.sh "$@"  #use $@
    
    echo -e "\e[1;32mShift once test:\e[0m"
    shift
    echo "1st arg is $1"
    echo "2st arg is $2"
    echo "2st arg is $3"
    echo "10st arg is ${10}"
    echo -e "\e[1;32mShift twice test:\e[0m"
    shift
    echo "1st arg is $1"
    echo "2st arg is $2"
    echo "2st arg is $3"
    echo "10st arg is ${10}"       

    arg2. sh 와 arg3. sh:
    #!/bin/bash
    echo "1st arg is $1"
    echo "2st arg is $2"
    echo "2st arg is $3"
    echo "10st arg is ${10}"
    echo "all args are "$*""
    echo "all args are "$@""
    echo "args sumnumber is $#"       
    echo "scriptname is `basename $0`"

    테스트 환경 변수 스 크 립 트 에서 전달
    father.sh
    #!/bin/bash
    export name=farther
    
    echo "start farther.sh"
    echo "name=$name"
    echo "farther pid is $BASHPID"
    son.sh

    son.sh
    #!/bin/bash
    echo "starting son.sh "
    echo "son.sh pid is $BASHPID"
    echo "name=$name"
    sleep 100

    네트워크 에서 다른 호스트 로 파일 복사 (간단 한 버 전)
    scpfile.sh arg1 arg2....
    #!/bin/bash
    scp $*  [email protected]:/data/scripttest

    호스트 이름, IPv 4 주소, 운영 체제 버 전, 커 널 버 전, CPU 모델, 메모리 12068, 하 드 디스크 12068, 12073,
    SysteminfoCheck.sh
    #!/bin/bash
    

    백업 파일 (수 동 버 전)
    backup.sh
    #! /bin/bash                                                                                                                   
    #SOURCE="/data/script36"
    DEST="/data/backup/backupfile_`date "+%F_%T"`" #Destination cp directory
    BEGINCOLOR="\e[1;35m"
    ENDCOLOR="\e[0m"
    NOPASS=0                                       #Used to determine whether All filename are correct and exist, 0 is yes ,1is no.
    #ARGNUM=$#
    set -u    
                                                   #variable is not exist ,then exit
    #set -e                      
    if [ $# -eq 0 ]; then
            echo -e "\e[1;31mPlease input one or more filename[directory]correctly!!!\e[0m"
            echo -e "\e[1;31mFor example :\e[0m
    \e[1;32mbackup.sh\e[0m /home/zhang/ /dev/zero ..." exit else echo -e "\e[1;36mCheck input filename whether exists or not...\e[0m" for n in $*;do if [[ ! -a "$n" ]];then echo -e "\e[1;31mThere is no file[Dir]\e[0m\e[1;5;41m$n\e[0m"; NOPASS=1; #Judge if file exist; fi done #exit; if [ $NOPASS -eq 1 ] ;then echo -e "\e[1;5;31mCheck Not Pass ,Please check your input filename and redo!!!\e[0m" exit fi echo -e "\e[1;32mFilename check done,All file exists\e[0m" fi #sleep 50 echo -e "\e[1;33mGet Ready For Backup After 10 Seconds...\e[0m" sleep 0.5 echo -e "\e[1;5;31mYou can press down key \e[0m\e[1;5;34m\"ctrl + c\"\e[0m\e[1;5;31m to stop backup now!\e[0m" sleep 0.5 echo "Counting down:" for i in {1000..1};do #10seconds to stop backup x=$[i/100]; y=$[i%100]; if [ $y -lt 10 ]; then y="0$y" fi let Rdmcolor=$RANDOM%7+31 echo -ne "\e[1;${Rdmcolor}m\e[K${x}.${y}\e[0m\r"; sleep 0.01 done if [[ ! -d "$DEST" ]]; then mkdir -p "$DEST"; echo -e "\e[1;32mMaking Backup_Destination_Directory Successfully!!!\e[0m"; fi #sleep 0.1 echo -e "${BEGINCOLOR}Starting backup....$ENDCOLOR" #sleep 0.1 cp -a -v -u --backup=numbered $* $DEST echo -e "${BEGINCOLOR}Backup is finished~$ENDCOLOR" echo -e "\e[1;32mFile backup to Directory '$DEST'\e[0m" # unset SOURCE DEST BEGINCOLOR ENDCOLOR

    매일 정시 백업 파일 (자동 버 전)
  • 소프트 링크 로 backup. sh 를 가리 키 고 판단 하여 설정 할 수 있 으 며, 스 크 립 트 를 다시 쓸 수도 있 습 니 다
  • IP , 。

    linkcheck.sh

    #!/bin/bash
    echo "The Sumnumber and IPAdress Connecting Now:"                                                               
    netstat -tan | tr -s " " ":" |cut -d: -f6 |grep -Eo "(([1-9][0-9]?|1[0-9]{2}|2[0-4][0-9]|25[0-5]).){3}([1-9][0-9]?|1[0-9]{2}|2[0-4][0-9]|25[0-5])"|sort|uniq -c
    

    • PATH=/###/###:$PATH
      echo $PATH >> /etc/profile.d/evn.sh

    linux ( )

    • PATH ,HISTCONTROL ,HISTFORMAT,HISTSIZE,PS1
    • issue,motd
    • umask
    • ~/.vimrc
    #! /bin/bash
    

    좋은 웹페이지 즐겨찾기