目錄
一、shell腳本介紹
二、shell腳本結(jié)構(gòu)和執(zhí)行
三、date命令用法
四、shell腳本中的變量
一、shell腳本介紹
- shell是一種腳本語言 aming_linux blog.lishiming.net
- 可以使用邏輯判斷、循環(huán)等語法
- 可以自定義函數(shù)
- shell是系統(tǒng)命令的集合
- shell腳本可以實現(xiàn)自動化運維,能大大增加我們的運維效率
二、shell腳本結(jié)構(gòu)和執(zhí)行
shell腳本以#!/bin/bash開頭
它作用是告訴系統(tǒng)接下來的命令是由解釋器/bin/bash執(zhí)行的。如果不設(shè)置該行,shell腳本也可以執(zhí)行,但這是不符合規(guī)范的。以#開頭的行作為解釋說明
#表示注釋,后面跟一些該腳本的相關(guān)注釋內(nèi)容,以及作者、創(chuàng)建日期或者版本等。除了第一行的#!/bin/bash,其余以#開頭的行的內(nèi)容將被認為是注釋,不會被解釋器執(zhí)行。腳本的名字以.sh結(jié)尾
用于區(qū)分這是一個shell腳本hell腳本兩種執(zhí)行方法
- bash/sh 1.sh
[root@minglinux-01 /usr/local/sbin] bash 1.sh
22:19:56 up 1 day, 4:39, 1 user, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/2 192.168.162.1 19:54 4.00s 0.05s 0.00s bash 1.sh
[root@minglinux-01 /usr/local/sbin] sh 1.sh
22:20:27 up 1 day, 4:39, 1 user, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/2 192.168.162.1 19:54 3.00s 0.05s 0.00s sh 1.sh
- ./1.sh
[root@minglinux-01 /usr/local/sbin] ./1.sh
-bash: ./1.sh: 權(quán)限不夠
[root@minglinux-01 /usr/local/sbin] chmod +x 1.sh
[root@minglinux-01 /usr/local/sbin] ./1.sh
22:21:48 up 1 day, 4:40, 1 user, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/2 192.168.162.1 19:54 4.00s 0.07s 0.00s w
#使用該方法運行shell腳本的前提是腳本本身有執(zhí)行權(quán)限,所以需要給腳本加一個x權(quán)限。
- 查看腳本執(zhí)行過程
#使用sh命令執(zhí)行一個shell腳本時,可以加-x選項來查看這個腳本的執(zhí)行過程
#這樣有利于我們調(diào)試這個腳本,如下所示:
[root@minglinux-01 /usr/local/sbin] sh -x 1.sh
+ w
22:24:41 up 1 day, 4:43, 1 user, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/2 192.168.162.1 19:54 1.00s 0.09s 0.00s sh -x 1.sh
- 檢查腳本是否有錯
#使用sh命令執(zhí)行一個shell腳本時,加-n選項可以檢查腳本是否有錯,沒有任何輸出則為正確
三、date命令用法
date命令是y用于顯示或設(shè)置系統(tǒng)時間與日期。
[root@minglinux-01 /usr/local/sbin] date //默認顯示當前時間
2018年 12月 29日 星期六 23:10:18 CST
- 格式化輸出:
## 固定格式: date "+" 時間變量,date命令和+之間用空格分隔
? date +%Y:表示以四位數(shù)字格式打印年份。
? date +%y:表示以兩位數(shù)字格式打印年份。
? date +%m:表示月份。
? date +%d:表示日期。
? date +%H:表示小時。
? date +%M:表示分鐘。
? date +%S:表示秒。
? date +%F = %Y-%m-%d
? date + %T = %H:%M:%S
? date +%w:表示星期。結(jié)果顯示0則表示周日。
? date +%W:表示這一周是這一年的第幾周
? date +%s 表示時間戳,指格林威治時間1970年01月01日00時00分00秒(北京時間1970年01月01日08時00分00秒)起至現(xiàn)在的秒數(shù)。
- 部分示例如下:
[root@minglinux-01 /usr/local/sbin] date +%Y
2018
[root@minglinux-01 /usr/local/sbin] date +%d
29
[root@minglinux-01 /usr/local/sbin] date +%Y%m%d
20181229
[root@minglinux-01 /usr/local/sbin] date +%F
2018-12-29
[root@minglinux-01 /usr/local/sbin] date +%y%m%d%H%M%S
181229232609
[root@minglinux-01 /usr/local/sbin] date +"%Y-%m-%d %H:%M:%S"
2018-12-29 23:29:47
[root@minglinux-01 /usr/local/sbin] date +%w
6
[root@minglinux-01 /usr/local/sbin] date +%s
1546097199
#日歷
[root@minglinux-01 /usr/local/sbin] 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
- date -d<字符串>:顯示字符串所指的日期與時間。字符串前后必須加上雙引號
#
# date -d "+1 day" 一天后
[root@minglinux-01 /usr/local/sbin] date -d "+1day"
2018年 12月 30日 星期日 23:33:03 CST
# date -d "-1 day" 一天前
[root@minglinux-01 /usr/local/sbin] date -d "-1 day"
2018年 12月 28日 星期五 23:33:23 CST
# date -d "-1 month" 一月前
[root@minglinux-01 /usr/local/sbin] date -d "-1 month"
2018年 11月 29日 星期四 23:33:36 CST
# date -d "-1 min" 一分鐘前
[root@minglinux-01 /usr/local/sbin] date -d "-1 min"
2018年 12月 29日 星期六 23:32:43 CST
[root@minglinux-01 /usr/local/sbin] date -d "-1 min" +%T
23:36:47
# date -d "+1 year" 一年后
[root@minglinux-01 /usr/local/sbin] date -d "+1 year"
2019年 12月 29日 星期日 23:35:47 CST
# date -d "-1 years" 一年前
[root@minglinux-01 /usr/local/sbin] date -d "-1 years"
2017年 12月 29日 星期五 23:35:54 CST
- 時間戳
[root@minglinux-01 /usr/local/sbin] date +%s
1546098022
#由時間戳推出當前時間
[root@minglinux-01 /usr/local/sbin] date -d @1546098022
2018年 12月 29日 星期六 23:40:22 CST
#由當前時間換算時間戳
[root@minglinux-01 /usr/local/sbin] date +%s -d "2018-12-29 23:40:22"
1546098022
四、shell腳本中的變量
? 當腳本中使用某個字符串較頻繁并且字符串長度很長時就應(yīng)該使用變量代替。
? 定義變量的格式為:“變量名=變量的值”。
? 在腳本中引用變量時需要加上符號$。
[root@minglinux-01 /usr/local/sbin] a="元旦"
[root@minglinux-01 /usr/local/sbin] b="快樂"
[root@minglinux-01 /usr/local/sbin] echo $a$b
元旦快樂
- 使用條件語句時,常使用變量
[root@minglinux-01 /usr/local/sbin] a=2
[root@minglinux-01 /usr/local/sbin] if [ $a -gt 1 ];then echo $b;fi
快樂
- 引用某個命令的結(jié)果時,用變量替代
[root@minglinux-01 /usr/local/sbin] n=`wc -l 1.sh`
[root@minglinux-01 /usr/local/sbin] echo $n
2 1.sh
- 寫和用戶交互的腳本時,變量也是必不可少的
[root@minglinux-01 /usr/local/sbin] read -p "Please input a number:" n
Please input a number:10
[root@minglinux-01 /usr/local/sbin] echo $n
10
#如果沒寫這個n,可以直接使用$REPLY
[root@minglinux-01 /usr/local/sbin] read -p "Please input a number:"
Please input a number:12
[root@minglinux-01 /usr/local/sbin] echo $REPLY
12
- 內(nèi)置變量
? $0,$1,$2…
? $0表示腳本本身,$1 第一個參數(shù),$2 第二個 ....
? $#表示參數(shù)個數(shù)
? $@ 表示所有參數(shù)
[root@minglinux-01 /usr/local/sbin] vim 1.sh
#腳本內(nèi)容如下:
1 #!/bin/bash
2 echo "$0"
3 echo "$1"
4 echo "$2"
5 echo "$#"
6 echo "$@"
~
[root@minglinux-01 /usr/local/sbin] sh 1.sh 1 2 3
1.sh
1
2
3
1 2 3
- 數(shù)學(xué)運算也會用到變量
[root@minglinux-01 /usr/local/sbin] a=1;b=2;c=$(($a+$b))
[root@minglinux-01 /usr/local/sbin] echo $c
3
[root@minglinux-01 /usr/local/sbin] a=2;b=3;c=$[$a+$b]
[root@minglinux-01 /usr/local/sbin] echo $c
5