天天看點

Shell腳本(腳本結構和執行方法,date指令用法,腳本中的變量)

Shell是什麼

Shell是一種腳本語言,和傳統語言C,Python...相比還是比較簡單的。

可以使用邏輯判斷,循環等文法

可以自定義函數

shell是系統指令的集合

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

Shell腳本結構和執行方法

1.開頭必須要#!/bin/bash  解釋器指令,下面的指令是通過哪一個解釋器執行的

我們發現sh其實隻是bash的軟連接配接

[root@congji shell]# ll /bin/sh

lrwxrwxrwx. 1 root root 4 10月 20 08:08 /bin/sh -> bash

[root@congji shell]# ll /bin/bash

-rwxr-xr-x. 1 root root 960392 8月   3 2016 /bin/bash

2.除過第一行,剩下以#開頭的大多隻是作為解釋說明用

3.腳本的名字通常以.sh結尾,用于區分這是一個shell腳本。

4.執行方法有兩種

(1)chmod +x 01.sh;./01.sh    先給腳本執行權限,然後用相對路徑執行(因為$PATH裡有/bin/的路徑)

(2)bash 01.sh 或者 sh 01.sh

5.檢視腳本執行過程

sh -x + 腳本        (每一個+表示一個動作)

[root@congji shell]# sh -x 01.sh 

+ echo renxinrui

renxinrui

+ ls

01.sh

6.檢視腳本是否文法錯誤 bash -n 01.sh

(我們為了看到實驗效果,故意寫一個錯的腳本,在for循環的結尾少寫一個done)

[root@congji shell]# cat 01.sh 

#!/bin/bash

for i in `seq 1 10`

do

   echo $i

[root@congji shell]# sh -n 01.sh                 

01.sh:行6: 文法錯誤: 未預期的檔案結尾

它提示報錯,那我們加上done試試,

[root@congji shell]# sh -n 01.sh          (執行後沒有報錯,也沒有傳回值)

[root@congji shell]# sh  01.sh 

1

2

3

4

5

6

7

8

9

10

date指令用法

在shell裡直接輸入date,會顯示時間資訊。

[root@congji ~]# date 

2018年 01月 11日 星期四 00:00:07 CST

那麼加上參數他會怎麼顯示呢

[root@congji ~]# date +%Y                   (顯示4位數年)

2018

[root@congji ~]# date +%y                    (顯示2位數年)

18

[root@congji ~]# date +%m                    (顯示月份)

[root@congji ~]# date +%d                    (顯示日期)

11

[root@congji ~]# date +%Y%m%d                  (如果把他們綜合在一起就會顯示目前日期)

20180111

[root@congji ~]# date +%D                    (以月,日,年的方式顯示時間)

01/11/18

[root@congji ~]# date +%F                     (以年-月-日的方式顯示時間)

2018-01-11

既然有年月日,那就有分鐘和小時

[root@congji ~]# date +%H                      (顯示目前的小時)

00

[root@congji ~]# date +%M                       (顯示目前的分鐘)

20

[root@congji ~]# date +%S                        (顯示目前多少秒)

36

[root@congji ~]# date +%s                       (這是一個時間戳,舉例1970年1月1日0點過去了多少秒)

1515601302

我們可以把所有的參數組合起來顯示多少秒,也可以直接加T顯示多少秒,用T顯示的更為清楚

[root@congji ~]# date +%H%M%S

002910

[root@congji ~]# date +%T

00:29:16

把全部的參數組合起來:

[root@congji ~]# date +%Y-%m-%d/%H:%M:%S     (為了更清晰的看到結果,我們給中間加上了分隔符)

2018-01-11/00:35:58

[root@congji ~]# date +%F/%T              (同樣我們用F和T也能顯示出同樣的效果)

2018-01-11/00:36:45

是以我們得出結論

date +%Y-%m-%d = date +%F

date  +/%H:%M:%S = date +%T

[root@congji ~]# date +%w        (顯示今天是周幾)

[root@congji ~]# date +%W        (顯示今天是今年的第幾周)

更直覺的我們可以用cal指令,像月曆一樣顯示時間,會顯示日期,隻是這裡複制不出來。

[root@congji ~]# 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 31

現在有一個執行個體,今天是1月11日,你要寫一個切割日志腳本,在每天的0點切割日志,但是我們都知道,一到0點,時間就會顯示後一天。是以我們要學會增加減少,我們以減少為例。

[root@congji ~]# date

2018年 01月 11日 星期四 00:54:00 CST

[root@congji ~]# date -d "-1 day"                    (顯示目前時間提前一天)

2018年 01月 10日 星期三 00:54:02 CST

[root@congji ~]# date -d "-1 month"                    (顯示目前時間提前一小時)

2017年 12月 11日 星期一 00:54:12 CST

[root@congji ~]# date -d "-1 min"                     (顯示目前時間提前一分鐘)

2018年 01月 11日 星期四 00:53:19 CST

我們知道顯示時間戳是%s,那麼如何讓時間戳顯示成日期呢?

[root@congji ~]# date +%s

1515603280

[root@congji ~]# date -d @1515603280 

2018年 01月 11日 星期四 00:54:40 CST

Shell腳本中的變量

當腳本中使用某個字元串比較頻繁,并且字元串長度很長時間,就應該使用變量代替,使腳本變的簡單明了

使用條件語句時,嘗試用變量 if[$a -gt 1];then...;fi

引用某個指令時,用變量替代 n='wc -l 1.txt'

寫使用者互動腳本時,變量也是必不可少的

内置變量$1,$2,$3...$0表示腳本本身,$1第一個參數,$2第二個,...$#表示參數個數

繼續閱讀