Shell是什麼shell
Shell是一種腳本語言,和傳統語言C,Python...相比仍是比較簡單的。數組
可使用邏輯判斷,循環等語法bash
能夠自定義函數
運維
shell是系統命令的集合ide
shell腳本能夠實現自動化運維,能大大增長咱們的運維效率函數
Shell腳本結構和執行方法ui
1.開頭必需要#!/bin/bash 解釋器命令,下面的命令是經過哪個解釋器執行的spa
咱們發現sh其實只是bash的軟鏈接日誌
[root@congji shell]# ll /bin/shorm
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]