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第二個,...$#表示參數個數