20.1 shell腳本介紹php
20.2 shell腳本結構和執行mysql
20.3 date命令用法linux
20.4 shell腳本中的變量sql
20.1 shell腳本介紹:shell
~~1.shell是什麼vim
shell是一種腳本語言 aming_linux blog.lishiming.net(shell的練習題)bash
#與傳統的C語言、php語言相比,仍是很簡單的運維
可使用邏輯判斷、循環等語法ide
能夠自定義函數函數
shell是系統命令的集合
#好比在凌晨三點的時候,去執行若干條命令。就能夠把命令寫入一個腳本,到點去執行就好了(批量的去執行這些命令)
shell腳本能夠實現自動化運維,能大大增長咱們的運維效率
#好比批量的去安裝系統,直接在機器上運行這個腳本就能夠了
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
20.2 shell腳本結構和執行:
~1.開頭須要加#!/bin/bash
#若是咱們在這臺機器上可以執行添加的命令,就能夠不用寫這一行。若是換一臺可能不能執行
~2.以#開頭的行做爲解釋說明
#就是說,咱們接下來要執行的命令,是經過哪一個解釋器來操做的。一般都是/bin/bash,說明咱們接下來須要運行的這些命令/語句,是經過/bin/bash這個解釋器來執行的
~3.腳本的名字以.sh結尾,用於區分這是一個shell腳本
#也方便後期咱們去找
~4.執行方法有兩種
chmod +x 1.sh; ./1.sh
#先給這個文件執行權限。咱們能夠直接在目錄下 ./1.sh 去執行(固然也能夠寫絕對路徑、./是相對路徑)
bash 1.sh #或者直接sh 1.sh
~5.查看腳本執行過程 bash -x 1.sh
#咱們只能sh -x 1.sh,就不能相對或絕對路徑了
~6.查看腳本是否語法錯誤 bash -n 1.sh
#沒有任何的輸出就表明沒有錯
實例:
[root@axinlinux-01 ~]# vim /etc/init.d/network
#! /bin/bash #這一行就是文件頭,表明bin/bash解釋的
# #通常狀況下,除了文件頭的#,其餘的都表明解釋說明
# network Bring up/down networking
#
# chkconfig: 2345 10 90 #這個比較特殊。用來定義啓動腳本的級別(2345)。10表明順序,第10個啓動,第90個關閉
# description: Activates/Deactivates all network interfaces configured to \ #這個是表明腳本的解釋說明
#以上這兩行 chkconfig與description必需要有。否則這個啓動腳本沒辦法加入到chkconfig列表裏面去。這個腳本屬於特殊的腳本
如下剩下的#都表明解釋說明
# start at boot time.
#
### BEGIN INIT INFO
# Provides: $network
# Should-Start: iptables ip6tables NetworkManager-wait-online NetworkManager $network-pre
# Short-Description: Bring up/down networking
# Description: Bring up/down networking
### END INIT INFO
~5.
[root@axinlinux-01 shell]# sh -x 01.sh
+ echo $'\342\200\234123\342\200\235' #每個+號表示一個操做,下面顯示的是結果
「123」
+ w
22:21:04 up 20 min, 1 user, load average: 0.00, 0.02, 0.10
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 192.168.208.1 22:04 0.00s 3.20s 0.00s w
+ ls
01.sh
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
20.3 date命令用法:
date在shell當中做用很大。好比,針對某一個文件作更改。咱們天天去備份一個文件(一個mysql),最終生成一個.sql的文件。那麼咱們能夠針對這個sql文件加一個日期標記,這樣就能夠很清晰的額知道,備份的這個sql文件是哪一天生成的。
好比,咱們還能夠給他標記星期幾。好比周一叫1.sql,週二叫2.sql,那麼一週下來。下一週的週一他就能夠把以前上一週的1.sql給覆蓋。這樣咱們就不用手動的去刪除這些文件了
~1.
date +%Y-%m-%d, date +%y-%m-%d 年月日
+%Y(year)表示2018,+%y表示18
+%m(month)表示月,+%M(minute)表示分鐘
+%d(date)表示日期,+%D表示年月日
date +%Y%m%d
20180913
date +%F
2018-09-13
~2.
date +%H:%M:%S = date +%T 時間
+%H(hour)表示小時
+%M(minute)表示分鐘
+%S(second)表示秒
+%T
22:48:12
~3.
date +%s 時間戳
距離1970-01-01-00-00到如今過去多少秒
~4.
date -d @1504620492
把具體的日期換算成時間戳:date +%s -d "2018-09-13 23:01:17"
把時間戳換算成具體的日期:date -d @1536850983
[root@axinlinux-01 shell]# date +%s
1536850933
[root@axinlinux-01 shell]# date +%s -d "2018-09-13 23:03:03"
1536850983
[root@axinlinux-01 shell]# date -d @1536850983
2018年 09月 13日 星期四 23:03:03 CST
以上是互相換算的方法
date -d "+1day" 一天後
date -d "-1 day" 一天前
#好比,咱們刪除昨天的日誌
[root@axinlinux-01 shell]# date -d "-1 day"
2018年 09月 12日 星期三 22:57:08 CST
[root@axinlinux-01 shell]# date -d "-1 day" +%F
2018-09-12
date -d "-1 month" 一月前
date -d "-1 min" 一分鐘前
date +%w, date +%W 星期
+%w(week)表示周幾
+%W表示今年的第幾周
~5.cal #查看日曆
[root@axinlinux-01 shell]# cal
九月 2018
日 一 二 三 四 五 六
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
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
20.4 shell腳本中的變量:
shell當中處處都會使用變量。
變量可理解爲 一個變化的參數,一個數值,又或者一個字符串。咱們能夠反覆的去引用它,調用它
如下,爲何狀況下用到變量
~1.當腳本中使用某個字符串較頻繁而且字符串長度很長時就應該使用變量代替
#好比腳本中常常用到的全局路徑
~2.使用條件語句時,常使用變量 if [ $a -gt 1 ]; then ... ; fi
~3.引用某個命令的結果時,用變量替代 n=`wc -l 1.txt`
~4.寫和用戶交互的腳本時,變量也是必不可少的 read -p "Input a number: " n; echo $n 若是沒寫這個n,能夠直接使用$REPLY
~5.內置變量 $0, $1, $2… $0表示腳本自己,$1 第一個參數,$2 第二個 .... $#表示參數個數
#好比腳本的名字叫1.sh,那麼$0就表明1.sh
~6.數學運算a=1;b=2; c=$(($a+$b))或者$[$a+$b]