十六週五次課

十六週五次課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選項指定讀取值時等待的時間(超出時間後自動退出腳本)。

shell腳本預設變量

有時候使用相似/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位腳本自己的名字。

相關文章
相關標籤/搜索