十六週五次課python
20.1shell腳本介紹:shell
20.2shell腳本結構和執行方法ubuntu
20.3date命令用法vim
20.4shell腳本中的變量bash
20.1shell腳本介紹:網絡
摘要: Shell是一個用C 語言編寫的程序, 它是用戶操做Linux的橋樑, 也就是平時咱們鏈接Linux 的所看到的命令行窗口。平時咱們輸入的Linux 命令都是在Shell 程序中完成的。Shell 腳本, 我認爲就是一組在Shell 程序中按照順序執行的命令。一般使用的shell不會是太複雜的操做, 由於shell 腳本對於實現一些比較複雜的邏輯比較麻煩,由於對於比較複雜的邏輯可使用 python 語言實現。運維
shell是一種腳本語言函數
可使用邏輯判斷、循環等語法spa
可自定義函數.net
shell是系統命令的集合
shell腳本能夠實現自動化運維,能大大增長咱們的運維效果
shell就是系統中敲過的一些命令把它們寫到了文件中,而後再去執行這個文件,批量的執行文件裏的命令。
要想學好shell,首先要熟悉命令,各類服務的搭建,包括各類服務的管理和配置,只有懂了這些,才能寫出來。另外,除了以上這些,還要懂一些判斷。
20.2shell腳本結構和執行方法
結構
開頭須要「#!/bin/bash」
腳本內容中以#開頭的行做爲解釋說明
編寫腳本時備註:做者、時間、功能等信息,方便以後查看
腳本的名字用「.sh」結尾,用於區分這是一個shell腳本
[root@localhost ~]# mkdir shell
[root@localhost ~]# cd shell
[root@localhost shell]# ls
[root@localhost shell]# vim 01.sh
#!/bin/bash
echo "123"
w
ls
[root@localhost shell]# sh 01.sh
123
07:47:04 up 30 min, 1 user, load average: 0.04, 0.04, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 192.168.231.1 07:44 0.00s 0.17s 0.00s sh 01.sh
01.sh
[root@localhost shell]#
第1行以#!/bin/bash開頭,表示該文件使用的是bash語法。若是不設置該行,你的shell腳本也能夠執行,可是不符合規範。
[root@localhost shell]# vim 01.sh
echo "123"
w
ls
保存,退出。
[root@localhost shell]# sh 01.sh
123
07:51:14 up 34 min, 1 user, load average: 0.02, 0.03, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 192.168.231.1 07:44 2.00s 0.20s 0.00s sh 01.sh
01.sh
[root@localhost shell]#
能夠運行,說明這臺機器是能夠識別這些一條一條的命令的。若是不加開頭,換一臺機器,可能不會執行,開頭是爲了說明使用哪一個解釋器(/bin/bash)來執行的。
執行方法:
給腳本添加執行權限「chmod a+x test.sh」,而後直接執行該腳本「./test.sh」
bash test.sh;sh test.sh
[root@localhost shell]# chmod a+x 01.sh
[root@localhost shell]# ./01.sh
123
07:55:47 up 39 min, 1 user, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 192.168.231.1 07:44 3.00s 0.22s 0.00s /bin/bash ./01.sh
01.sh
[root@localhost shell]#
既然可以執行,就說明被解析了,被/bin/bash認識了。
[root@localhost shell]# cat 01.sh
#!/bin/bash
echo "123"
w
ls
[root@localhost shell]#
其實,/bin/bash是一條命令。
[root@localhost shell]# ll /bin/bash
-rwxr-xr-x. 1 root root 960472 Aug 3 05:11 /bin/bash
[root@localhost shell]#
[root@localhost shell]# ll /bin/sh
lrwxrwxrwx. 1 root root 4 Dec 21 11:43 /bin/sh -> bash
[root@localhost shell]#
/bin/bash和/bin/sh是同一個文件,若是沒有開頭#!/bin/bash,能夠這樣執行。
[root@localhost shell]# /bin/bash 01.sh
123
08:00:29 up 44 min, 1 user, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 192.168.231.1 07:44 5.00s 0.26s 0.00s /bin/bash 01.sh
01.sh
[root@localhost shell]#
sh -x test.sh 查看腳本執行過程
[root@localhost shell]# sh -x 01.sh
+ echo 123
123
+ w
07:22:14 up 11:39, 2 users, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 192.168.231.1 07:21 6.00s 0.07s 0.01s w
root pts/1 192.168.231.1 20:36 8:31m 0.05s 0.05s -bash
+ ls
01.sh
[root@localhost shell]#
每個+都是一個命令,下面一行是該命令的執行結果。
sh -n test.sh 查看腳本是否存在語法錯誤,若是出現語法問題,會報錯,但報錯的地方可能不太精確。
[root@localhost shell]# sh -n 01.sh
[root@localhost shell]#
20.3date命令用法
date命令用於顯示或設置系統時間與日期。
語法: date [option] 參數
Options:
-d <string>:顯示字符串指定的日期與時間(字符串先後必須加上雙引號)
-s<string>:根據字符串來設置時間與日期(字符串先後必須加雙引號)
參數:
<+時間日期格式>:指定日期和時間顯示的格式
顯示當前時區的當前時間:
[root@localhost shell]# date
Wed Jan 24 07:30:01 CST 2018
[root@localhost shell]#
經常使用日期格式
查看系統日曆
[root@localhost shell]# cal
January 2018
Su Mo Tu We Th Fr Sa
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
[root@localhost shell]#
注: cal=calendar(日曆),「cal -y」能夠查看一年的日曆。
date +%Y(%y):以四位(兩位)數字格式顯示年份
[root@localhost shell]# date +%Y
2018
[root@localhost shell]# date +%y
18
[root@localhost shell]#
date "+%Y-%m-%d %H:%M:%S %w"
以上參數分別表示:年、月、日、時、分、秒、星期
[root@localhost shell]# date "+%Y-%m-%d %H:%M:%S %w"
2018-01-24 07:36:27 3
[root@localhost shell]#
date +%F:顯示完整的年月日
[root@localhost shell]# date +%F
2018-01-24
date +%W:顯示當前時間是一年的第幾周
[root@localhost shell]# date +%W
04
date +%T:顯示當前時間是幾點
[root@localhost shell]# date +%T
07:39:43
date +%s:時間戳,顯示從1970年1月1日00:00:00到目前經歷的秒數
[root@localhost shell]# date +%s
1516750791
[root@localhost shell]# date +%s -d "2017-01-24 07:42:30"
1485214950
[root@localhost shell]# date -d @1485214950
Tue Jan 24 07:42:30 CST 2017
[root@localhost shell]#
打印製定日期&時間
有時候須要使用N天(小時、分鐘、秒)前的日期或時間。
格式: date -d "1 day" +%d
[root@localhost shell]# date -d "-2 day" +%d
22
[root@localhost shell]# date -d "-1 year -2 month -1 day" +%Y-%m-%d
2016-11-23
說明: 指定某時間或日期的時候,後面要跟對應的時間格式參數(以上方法一樣適用於時分秒)。
時間設置
手動設置時間:date -s 「x-x-x x:x:x:」
[root@localhost shell]# date -s "2018-01-24 07:46:30"
Wed Jan 24 07:46:30 CST 2018
同步網絡時間:ntpdate命令
[root@localhost shell]# yum install -y ntp
#安裝ntp的同時會同步安裝ntpdate命令
[root@localhost shell]# ntpdate ntp.ubuntu.com
24 Jan 07:48:15 ntpdate[12847]: step time server 91.189.89.198 offset -18.244893 sec
[root@localhost shell]# date
Wed Jan 24 07:48:43 CST 2018
20.4shell腳本中的變量
當腳本中使用某個字符串較頻繁,而且字符串長度很長,此時就應該使用變量來代替該字符串。
[root@tianqi-01 shell]# vim variate.sh
#!/bin/bash
d=`date +%F`
echo "Today is $d"
[root@tianqi-01 shell]# sh variate.sh
Today is 2018-01-23
[root@tianqi-01 shell]#
說明: 該腳本中將變量d定義爲了當前日
注意: 在shell腳本中將命令結果定義爲變量時要使用反引號,調用變量的方法:「$變量名」 。
$0,$1,$2,$3……
$0:表示腳本自己
$1:第一個參數
$2:第二個參數
$#:表示參數的個數
[root@tianqi-01 shell]# vim sum.sh
#!/bin/bash
a=1
b=2
sum=$[$a+$b]
echo "$a+$b=$sum"
注: 數學運算要用[ ]括起來,且前面要加符號$。
[root@tianqi-01 shell]# 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@tianqi-01 shell]# sh sum.sh
Please input a number:6
Please input a number:7
6+7=13
[root@tianqi-01 shell]#
注: read命令用於和用戶交互,它把用戶輸入的字符串做爲變量值,可使用-t選項指定讀取值時等待的時間(超出時間後自動退出腳本)。
有時候使用相似/etc/init.d/iptables restart的命令,前面的/etc/init.d/iptables文件其實就是一個shell腳本,後面的字符串restart就是預設變量。
[root@tianqi-01 shell]# vim option.sh
#!/bin/bash
sum=$[$1+$2]
echo "sum=$1+$2=$sum"
echo "Result of $0"
[root@tianqi-01 shell]# sh option.sh 7 8
sum=7+8=15
Result of option.sh
[root@tianqi-01 shell]#
說明: 腳本中的$1和$2即爲shell的預設變量,分別爲腳本的第一個參數和第二個參數,shell腳本預設變量是沒有限制的,注意$0位腳本自己的名字。