linux shell入門

linux shell入門

Shell是一個命令行解釋器,它爲用戶提供了一個向Linux內核發送請求以便運行程序的界面系統程序。使用Shell能夠啓動、掛起、中止一些程序。

1. shell腳本格式要求

  • 腳本以 #!/bin/bash 開頭
  • 腳本須要有可執行權限,或以 sh test.sh 方式執行

2.shell變量介紹

  • 系統變量:$HOME、$PATH、$PWD...,執行命令 set 能夠查看全部系統變量

  • 自定義變量:mysql

    • 定義變量:變量名=A
    • 銷燬變量:unset 變量名
    • 聲明靜態變量:readonly 變量,注意:不能銷燬


  • 定義變量的規則:linux

    • 變量名和等號之間不能有空格
    • 命名只能使用英文字母,數字和下劃線,首個字符不能以數字開頭
    • 不能使用標點符號
    • 不能使用bash裏的關鍵字(可用help命令查看保留關鍵字)


  • 將命令的返回值賦給變量sql

    方式一:
    #!/bin/bash
    A=`date`
    echo $A
    
    方式二:
    A=$(date)
    echo $A
    
    //Mon May 24 18:35:05 CST 2021


  • 位置參數變量:能夠在腳本中獲取參數信息shell

    • $n ,n 表明一個數字,1 爲執行腳本的第一個參數,2 爲執行腳本的第二個參數,以此類推……當n大於等於10時,參數變量須要用大括號包含,例${n}
    • $# ,獲取傳遞到腳本的參數個數
    • $* ,以一個單字符串顯示全部向腳本傳遞的參數
    • $@ ,與$*相同,可是使用時加引號,並在引號中返回每一個參數。


  • 預約義變量數據庫

    • $$ ,獲取腳本運行的當前進程ID號
    • $! ,後臺運行的最後一個進程的ID號
    • $? ,顯示最後命令的退出狀態。0表示沒有錯誤,其餘任何值代表有錯誤。

3. 基本運算符

  • 算數運算符:原生bash不支持簡單的數學運算,可是能夠經過其餘命令來實現,例如 awk 和 expr,expr 最經常使用。bash

    #!/bin/bash 
    1.使用expr
    TEMP=`expr 2 + 3`
    VAL=`expr $TEMP \* 4`  //輸出 20
    
    2.使用$((運算表達式))
    VAL=$(((2 + 3) * 4))   //輸出20
  • 關係運算符:只支持數字,不支持字符串,除非字符串的值是數字。測試

    #!/bin/bash 
    if [ 23 -ge 22 ]
    then
          echo "大於等於"
    fi
  • 字符串運算符命令行

    #!/bin/bash 
    if [ 'ok' = 'ok' ]
    then 
          echo "equal"
    fi
    
    if [ -n 'abc' ]
    then
         echo '字符串長度不爲零'
    fi
  • 文件測試運算符:文件測試運算符用於檢測 Unix 文件的各類屬性。code

    #!/bin/bash 
    if [ -f /root/shell_code/hello.sh ]
    then
          echo '/root/shell_code/hello.sh 是一個文件'
    fi
  • 布爾運算符:進程

    #!/bin/bash 
    if [ !false ]
    then
          echo 'true'
    fi
    
    if [ 1 -lt 2 -o 2 -lt 3 ]
    then
         echo 'true'
    fi


4. 流程控制

  • if else

    #!/bin/bash
    if [ 10 -gt $A]
    then
      echo "10 大於 $A"
    elif [ 10 -gt $b ]
    then
      echo "10 大於 $B"
    elif [ 10 -gt $C ]
    then
      echo "10 大於 $C"
    else
      echo "啥也不是"
    fi
  • for 循環

    #!/bin/bash
    for var in 1 2 3 4 5
    do
      echo $var
    done
  • while

    #!/bin/bash
    int=1
    while [ $int -le 5  ]
    do
      echo $int
      let "int++"
    done
  • case ... esac

    #!/bin/bash
    value=2
    case $value in 
           1) echo 1
           ;;
           2) echo 2
           ;;
           3) echo 3
           ;;
           *) echo '匹配失敗'
           ;;
    esac


5. 綜合案例

  • 需求分析:

    • 天天凌晨2:30備份數據庫test到/data/backup/mysql
    • 記錄備份開始和結束時間
    • 備份後的文件以時間格式命名,並打包成.tar.gz文件。
    • 備份的同時,檢查是否存在10天前的備份文件,並刪除。
#!/bin/bash
#備份目錄
BACKUP=/data/backup/mysql
#當前時間
DATETIME=$(date +%Y%m%d%H%M%S)
#數據庫地址
HOST=localhost
#數據庫名稱
DATABASE=test
#數據庫帳號
DB_USER=root
#數據庫密碼DATABASE
DB_PWD=root

#建立備份目錄,若是不存在,就建立
[ ! -d "${BACKUP}/${DATETIME}" ] && mkdir -p "${BACKUP}/${DATETIME}"

#備份數據庫
mysqldump -u${DB_USER} -p${DB_PWD} --host=${HOST} -q -R --databases ${DATABASE} | gzip > ${BACKUP}/${DATETIME}/${DATETIME}.sql.gz

#將文件處理成 tar.gz
cd ${BACKUP}
tar -zcvf $DATETIME.tar.gz ${DATETIME}
#刪除備份源目錄
rm -rf ${BACKUP}/${DATETIME}

#刪除10天前的備份文件
find ${BACKUP} -atime +10 -name "*.tar.gz" -exec rm -rf {} \;
echo "備份數據庫${DATABASE} ok..."

//crontab定時任務設置:30 2 * * * /root/shell_code/mysql_db_backup.sh
相關文章
相關標籤/搜索