shell腳本結構、date命令、變量
shell是一種腳本語言
可以使用邏輯判斷、循環等語法
可自定義函數
shell是系統命令的集合
shell腳本可以實現自動化運維,能大大增加我們的運維效率
20.2 shell腳本結構和執行
結構
開頭需要“#!/bin/bash”
腳本內容中以#開頭的行作為解釋說明
編寫腳本時備註:作者、時間、功能等信息,方便之後查看
腳本的名字用“.sh”結尾,用於區分這是一個shell腳本
執行方法
給腳本添加執行權限“chmod a+x test.sh”,然後直接執行該腳本“./test.sh”
bash test.sh;sh test.sh
sh參數
-x:sh -x test.sh 查看腳本執行過程
-n:sh -n test.sh 查看腳本是否存在語法錯誤
[root@localhost sbin]# vim test.sh
#!/bin/bash
#This is a example of shell structure
#Written by adai
ehco "Hello world"
20.3 date命令用法
date命令用於顯示或設置系統時間與日期。
語法: date [option] 參數
Options:
-d <string>:顯示字符串指定的日期與時間(字符串前後必須加上雙引號)
-s<string>:根據字符串來設置時間與日期(字符串前後必須加雙引號)
參數:
<+時間日期格式>:指定日期和時間顯示的格式
顯示當前時區的當前時間:
[root@localhost sbin]# date
2017年 09月 03日 星期日 19:36:32 CST
常用日期格式
查看系統日歷
[root@localhost sbin]# cal
九月 2017
日 一 二 三 四 五 六
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
註: cal=calendar(日歷),“cal -y”可以查看一年的日歷。
date +%Y(%y):以四位(兩位)數字格式顯示年份
[root@localhost sbin]# date +%Y
[root@localhost sbin]# date +%y
17
date "+%Y-%m-%d %H:%M:%S %w"
以上參數分別表示:年、月、日、時、分、秒、星期
[root@localhost sbin]# date "+%Y-%m-%d %H:%M:%S %w"
2017-09-03 19:54:57 0
說明: 如果以上參數組合時中間有特殊符號的話需要加雙引號。
date +%F:顯示完整的年月日
[root@localhost sbin]# date +%F
2017-09-03
date +%W:顯示當前時間是一年的第幾周
[root@localhost sbin]# date +%W
35
date +%T:顯示當前時間是幾點
[root@localhost sbin]# date +%T
18:55:35
date +%s:時間戳,顯示從1970年1月1日00:00:00到目前經歷的秒數
[root@localhost sbin]# date +%s
1504440220
時間戳換算:
[root@localhost sbin]# date +%s -d "2017-09-01 12:00:00"
1504238400
[root@localhost sbin]# date -d @1504238400
2017年 09月 01日 星期五 12:00:00 CST
打印指定日期&時間
有時候需要使用N天(小時、分鐘、秒)前的日期或時間。
格式: date -d "1 day" +%d
[root@localhost sbin]# date -d "-2 day" +%d
01
[root@localhost sbin]# date -d "-1 year -2 month -1 day" +%Y-%m-%d
2016-07-02
說明: 指定某時間或日期的時候,後面要跟對應的時間格式參數(以上方法同樣使用於時分秒)。
時間設置
手動設置時間:date -s “x-x-x x:x:x:”
[root@localhost sbin]# date -s "2016-9-3 12:10:00"
2016年 09月 03日 星期六 12:10:00 CST
同步網絡時間:ntpdate命令
[root@localhost sbin]# yum install -y ntp
#安裝ntp的同時會同步安裝ntpdate命令
[root@localhost sbin]# ntpdate ntp.ubuntu.com
3 Sep 20:28:54 ntpdate[3407]: step time server 91.189.91.157 offset 31565561.035581 sec
[root@localhost sbin]# date
2017年 09月 03日 星期日 20:29:02 CST
說明: ntpdate後面跟ntp時間服務器地址(國內ntp時間服務器地址:http://www.cnblogs.com/JemBai/archive/2012/04/15/2450045.html )。
20.4 shell腳本中的變量
當腳本中使用某個字符串較頻繁,並且字符創長度很長,此時就應該使用變量來代替該字符串。
普通變量
[root@localhost sbin]# vim variate.sh
#!/bin/bash
d=date +%F
echo "Today is $d"
[root@localhost sbin]# sh variate.sh
Today is 2017-09-03
說明: 該腳本中將變量d定義為了當前日
註意: 在shell腳本中將命令結果定義為變量時要使用反引號,調用變量的方法:“$變量名” 。
內置變量
$0,$1,$2,$3……
$0:表示腳本本身
$1:第一個參數
$2:第二個參數
$#:表示參數的個數
數學運算
[root@localhost sbin]# vim sum.sh
#!/bin/bash
a=1
b=2
sum=$[$a+$b]
echo "$a+$b=$sum"
[root@localhost sbin]# sh sum.sh
1+2=3
註: 數學運算要用[ ]括起來,且前面要加符號$。
和用戶交互模式
[root@localhost sbin]# vim sum.sh
#!/bin/bash
read -p "Please input a number:" x
read -p "Please input a number:" y
sum=$[$x+$y]
echo "$x+$y=$sum"
[root@localhost sbin]# sh sum.sh
Please input a number:5
Please input a number:5
5+5=10
註: read命令用於和用戶交互,它把用戶輸入的字符串作為變量值,可以使用-t選項指定讀取值時等待的時間(超出時間後自動退出腳本)。
shell腳本預設變量
有時候使用類似/etc/init.d/iptables restart的命令,前面的/etc/init.d/iptables文件其實就是一個shell腳本,後面的字符串restart就是預設變量。
[root@localhost sbin]# vim option.sh
#!/bin/bash
sum=$[$1+$2]
echo "sum=$1+$2=$sum"
echo "Result of $0"
[root@localhost sbin]# sh option.sh 3 6
sum=3+6=9
Result of option.sh
說明: 腳本中的$1和$2即為shell的預設變量,分別為腳本的第一個參數和第二個參數,shell腳本預設變量是沒有限制的,註意$0位腳本本身的名字。
shell腳本結構、date命令、變量