1. 程式人生 > >shell腳本介紹、結構和執行、date命令用法、shell腳本中的變量

shell腳本介紹、結構和執行、date命令用法、shell腳本中的變量

出現 用法 日期 腳本語言 通過 idle ali 日歷 實現

shell 腳本介紹
  • shell 是一種腳本語言

    • shell有自己的語法,可以使用邏輯判斷、循環等語法
  • 可以自定義函數,目的就是為了減少重復的代碼

  • shell 是系統命令的集合

  • shell 腳本可以實現自動化運維,能大大增加我們的運維效率

shell 腳本結構和執行

結構

  • 腳本第一行必須為 #!/bin/bash

  • 腳本內容中以#開頭的行為作為解釋說明

  • 編寫腳本時備註:作者、時間、功能等信息,方便之後查看

  • 腳本名用“.sh”結尾,用於區分這是一個shell腳本

執行方法

1、給腳本添加執行權限“chmod a+x test.sh”,然後直接執行過程

2、bash test.sh ; sh test.sh

  • sh 參數

    • -x:sh -x test.sh 查看腳本執行過程
    • -n:sh -n test.sh 查看腳本是否存在語法錯誤

    創建一個shell 腳本:
    [root@localhost shell]# vim 01.sh
    #! /bin/bash //固定格式
    echo "123"
    w
    ls

    給腳本加上執行權限:
    [root@localhost shell]# chmod a+x 01.sh

    執行腳本
    [root@localhost shell]# ./01.sh
    abc
    22:46:45 up 2:33, 1 user, load average: 0.00, 0.01, 0.05
    USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT

    root pts/0 192.168.159.1 20:17 5.00s 0.06s 0.00s /bin/bash ./01.sh
    01.sh

  • 在當前終端裏,把01.sh中的#! /bin/bash 去掉後在執行腳本,會看到得到的結果相同,不會出現任何的問題,這就說明這臺機器是能識別裏面一條一條的命令的,去運行這裏面的命令;但若是換一臺機器,就不一定能執行了

  • 在第一行,文件頭指定 #!/bin/bash ,接下來要運行的命令是通過哪一個解釋器來操作的,通常都是 /bin/bash 解釋器來執行的

date 命令用法

  • date命令用於顯示或設置系統時間與日期

  • 語法:date 選項 參數

  • 選項

    • -d:顯示字符串指定的日期與時間(字符串前後必須加上雙引號)
    • -s:根據字符串來設置時間與日期(字符串前後必須加上雙引號)
  • 參數

    顯示當前時間:
    [root@localhost ~]# date
    2018年 02月 07日 星期三 09:56:28 CST

    查看系統日歷:
    [root@localhost ~]# 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

    // cal -y可以查看一年的日歷

    "+時間日期格式":指定日期和時間顯示的格式

    date +%Y(%y):以四位(兩位)數格式顯示年份
    [root@localhost ~]# date +%Y
    2018
    [root@localhost ~]# date +%y
    18

    date "+%Y-%m-%d %H:%M:%S %w"
    表示:年、月、日、時、分、秒、星期
    [root@localhost ~]# date "+%Y-%m-%d %H:%M:%S %w"
    2018-02-07 10:02:43 3
    // 以上參數組合時,中間有特殊符號的話需要加雙引號

    date +%F:顯示完整的年月日
    [root@localhost ~]# date +%F
    2018-02-07

    date +%W:顯示當前時間是一年的第幾周
    [root@localhost ~]# date +%W
    06

    date +%T:顯示當前時間是幾點
    [root@localhost ~]# date +%T
    10:05:50

    date +%s:時間戳
    // 顯示從1970年1月1日00:00:00到目前經歷的秒數
    [root@localhost ~]# date +%s
    1517969292

    時間戳換算:
    [root@localhost ~]# date +%s -d "20180207 10:10:00"
    1517969400
    [root@localhost ~]# date -d @1517969400
    2018年 02月 07日 星期三 10:10:00 CST

打印指定日期&時間

  • 有時候需要使用N天(小時、分鐘、秒)前的日期或時間

    兩天以前:
    date -d "-2 day"
    [root@localhost ~]# date
    2018年 02月 07日 星期三 10:14:10 CST
    [root@localhost ~]# date -d "-2 day"
    2018年 02月 05日 星期一 10:14:13 CST

    兩天以後:
    date -d "+2 day"
    [root@localhost ~]# date
    2018年 02月 07日 星期三 10:14:58 CST
    [root@localhost ~]# date -d "+2 day"
    2018年 02月 09日 星期五 10:15:02 CST

    一年兩個月一天以前:
    date -d "-1 year -2 month -1 day"
    [root@localhost ~]# date
    2018年 02月 07日 星期三 10:16:32 CST
    [root@localhost ~]# date -d "-1 year -2 month -1 day"
    2016年 12月 06日 星期二 10:16:34 CST

時間設置

  • 手動設置時間:date -s "年-月-日 時:分:秒"

    [root@localhost ~]# date -s "2017-01-01 12:00:00"
    2017年 01月 01日 星期日 12:00:00 CST
    [root@localhost ~]# date
    2017年 01月 01日 星期日 12:00:02 CST

  • 同步網絡時間:ntpdate命令

    [root@localhost ~]# yum install -y ntp
    // 安裝ntpdate命令

    [root@localhost ~]# ntpdate ntp1.aliyun.com
    7 Feb 10:24:16 ntpdate[2681]: step time server 182.92.12.11 offset 34726773.904725 sec
    [root@localhost ~]# date
    2018年 02月 07日 星期三 10:24:24 CST
    // ntpdate 後面跟ntp時間服務器地址

shell 腳本中的變量

  • 當腳本中使用某個字符串較頻繁,並且字符串長度很長,此時就應該使用變量來代替該字符串。

  • 使用條件語句時,常使用變量 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第二個參數 $n表示第n個參數

  • 數學運算 a=1;b=2;c=$(($a+$b))或者$[$a+$b]

shell腳本介紹、結構和執行、date命令用法、shell腳本中的變量