Shell編程(shell腳本介紹、shell腳本結構和執行、date命令用法、shell腳本變量)

shell腳本介紹

Shell Script,Shell腳本與Windows/Dos下的批處理類似,也就是用各種命令預先放入到一個文件中,方便一次性執行的一個程序文件,主要是方便管理員進行設置或者管理用的。可是它比Windows下的批處理更強大,比用其餘編程程序編輯的程序效率更高,它使用了Linux/Unix下的命令。python

換一種說法也就是,shell script是利用shell的功能所寫的一個程序,這個程序是使用純文本文件,將一些shell的語法與指令寫在裏面,而後用正規表示法,管道命令以及數據流重導向等功能,以達到咱們所想要的處理目的。linux

更明白地來講,shell script就像早期dos年代的.bat,最簡單的功能就是將許多指令彙整寫一塊兒,讓使用者很容易地就可以一個操做執行多個命令,而shell script更是提供了數組,循環,條件以及邏輯判斷等重要功能,讓使用者能夠直接以shell來寫程序,而沒必要使用相似C程序語言等傳統程序編寫的語法。nginx

shell腳本能夠實現自動化運維,能大大增長咱們的運維效率shell

shell腳本結構和執行

Shell腳本的第一行必須是:#!/bin/bash,"#!" 是一個約定的標記,後面跟着的/bin/bash是告訴系統這個腳本須要使用/bin/bash解釋器來執行,即便用哪種Shell。編程

簡單來講就是告訴系統這是一個什麼語言寫的腳本,是python是shell或者是其餘的腳本語言所寫的,而後系統才能使用相應的解釋器去執行這個腳本。不過若是這個shell腳本是在本機執行的話,卻是能夠省略掉:#!/bin/bash,由於可以識別本機的命令,可是若是到另外一臺機器就不必定可以執行了,因此文件的第一行纔要寫這樣的聲明。數組

Shell腳本的文件名稱是以.sh爲後綴,用於區分這是一個shell腳本,shell中的註釋符是井號「#」,和其餘編程語言同樣,註釋的那一行內容不會被解釋器執行,可是要注意區別「#!」和「#」,前者是標記,後者纔是註釋符。bash

編寫第一個腳本運維

#!/bin/bash
echo "hello shell!"
w
ls

執行腳本的方法有三種:編程語言

  • sh studyshell01.sh
  • chmod a+x studyshell01.sh; ./studyshell01.sh
  • bash studyshell01.sh

第二種執行方法是給這個Hello.sh的腳本文件加上了可執行權限,因此能夠當作一個二進制文件直接執行日誌

sh和bash其實是同一個命令,由於sh是bash的軟鏈接文件:

查看腳本執行過程 bash -x studyshell01.sh ,每個「+」表明執行的命令,後面跟着命令的執行結果。

查看腳本是否語法錯誤 bash -n studyshell01.sh,沒有輸出表明沒有錯誤,不然直接輸出錯誤:

可是要注意的是,這只是檢查腳本的語法錯誤,若是你係統命令寫錯了,是不會被檢查到的。

date命令用法

1.date命令,會顯示當前系統時間日期

[root@yolks3 shell]# date
2018年 09月 13日 星期四 23:45:07 CST

2.date命令,在shell中用處很是大;對文件後綴增長一個時間,以便後期管理 3.date +%Y-%m-%d, date +%y-%m-%d 年月日

[root@yolks3 shell]# LANG=en #臨時切換爲英文顯示
[root@yolks3 shell]# date
Thu Sep 13 23:46:51 CST 2018 //英文日期
[root@yolks3 shell]# date +%Y
2018                四位的年
[root@yolks3 shell]# date +%y
18                  兩位的年
[root@yolks3 shell]# date +%m
09                 月份
[root@yolks3 shell]# date +%M
47                 分鐘
[root@yolks3 shell]# date +%d
13                 日期
[root@yolks3 shell]# date +%D
09/13/18           特殊格式的年月日
[root@yolks3 shell]# date +%Y%m%d
20180913           組合年月日
[root@yolks3 shell]# date +%Y-%m-%d
2018-09-13         拼接年-月-日
[root@yolks3 shell]# date +%F
2018-09-13         格式化後的年-月-日
[root@yolks3 shell]# date +%H
23                 時
[root@yolks3 shell]# date +%s
1536853846         時間戳,表示距離1970年總共過去了多少秒
[root@yolks3 shell]# date +%S
57                 秒
[root@yolks3 shell]# date +%T
23:53:26           時間:時:分:秒

4.常見時間單位

[root@yolks3 shell]# date +%w
4                  今天周幾
[root@yolks3 shell]# date +%W
37                 本週是今年第多少周

5.日曆

[root@yolks3 shell]# cal
   September 2018   
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

6.標記以前或以後的時間

需求:在作nginx日誌切割的時候,到了凌晨切割日誌,到了零點零分切割的日誌是前一天的日誌。因此把日誌加一個時間標記的話,應標記爲昨天的日期

  • day、month、year、hour、min後面能夠加 s 能夠不加 s
  • 減號- 表示以前的日期,加號 + 表示從今日後的日期
  • date -d "-1 day" +%F 顯示前一天的日期
  • date -d "-1 month" +%F 顯示上個月的日期
  • date -d "-1 years" +%F 顯示上一年的日期
  • date -d "+1 hour" +%T 顯示下一小時
  • date -d "+1 min" +%T 顯示下一分鐘

示例:

[root@yolks3 shell]# date -d "-1 day"
Wed Sep 12 23:59:16 CST 2018
[root@yolks3 shell]# date -d "-1 day" +%F
2018-09-12
[root@yolks3 shell]# date -d "-1 month" +%F
2018-08-13
[root@yolks3 shell]# date -d "-1 months" +%F
2018-08-14

7.時間戳 : date +%s

另外一種表現方法,表示時間戳 : date -d @1504620492 就是@後跟時間戳

[root@yolks3 shell]# date +%s
1536854629
[root@yolks3 shell]# date -d @1536854629
Fri Sep 14 00:03:49 CST 2018

8.若想在linux系統中,把具體的日期換算成時間戳的時候,可使用date +%s -d "2018-09-14 00:06:19"

[root@yolks3 shell]# date +%F" "%T
2018-09-14 00:06:19  顯示年月日時分秒
[root@yolks3 shell]# date +%s -d "2018-09-14 00:06:19"
1536854779  轉換時間戳

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 第二個 .... $#表示參數個數
  • 數學運算a=1;b=2; c=$(($a+$b))或者$[$a+$b]
相關文章
相關標籤/搜索