1. 程式人生 > >Shell腳本(腳本結構和執行方法,date命令用法,腳本中的變量)

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

cal 方式 spa 12月 自動化 復制 自定義函數 soft 變量

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 (顯示月份)

01

[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 (顯示今天是周幾)

4

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

02


更直觀的我們可以用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第二個,...$#表示參數個數


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


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