1. 程式人生 > >2018-4-17 16周5次課 shell腳本 date、if

2018-4-17 16周5次課 shell腳本 date、if

shell date if


20.1 shell腳本介紹


·shell是一種腳本語言

·可以使用邏輯判斷、循環等語法

·可以自定義函數

·shell是系統命令的集合

·shell腳本可以實現自動化運維,能大大增加我們的運維效率





20.2 shell腳本結構和執行


·開頭需要加 #!/bin/bash,在本機上可以運行,換臺機器就不一定能執行。在行首文件頭處指定接下來要運行的命令是通過哪一個解釋器進行操作的。

·以#開頭的行作為解釋說明,腳本的名字以.sh結尾,用於區分這是一個shell腳本

技術分享圖片


·執行方法有兩種:1,bash 或 sh sh文件 ;2,給文件加執行權限,然後 ./文件

1,bash 1.sh /bin/bash 實際上就是 /bin/sh

[root@localhost shell]# ll /bin/bash
-rwxr-xr-x. 1 root root 960472 8月   3 2017 /bin/bash
[root@localhost shell]# ll /bin/sh
lrwxrwxrwx. 1 root root 4 12月 28 05:37 /bin/sh -> bash


2,有執行權限的話,chmod +x 1.sh; 可以直接 ./1.sh


3,其實直接輸入文件的絕對路徑也可以執行


[root@localhost shell]# /root/shell/01.sh
123
22:22:27 up  2:21,  1 user,  load average: 0.02, 0.02, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    192.168.65.1     20:08    3.00s  0.06s  0.00s /bin/bash /root/shell/01.sh
總用量 4
-rwxr-xr-x 1 root root 32 4月  16 22:22 01.sh


·查看腳本執行過程:bash -x 1.sh / sh -x 1.sh

[root@localhost shell]# sh -x 01.sh
+ echo 123
123
+ w
22:23:55 up  2:23,  1 user,  load average: 0.00, 0.01, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    192.168.65.1     20:08    3.00s  0.07s  0.00s sh -x 01.sh
+ ls -l
總用量 4
-rwxr-xr-x 1 root root 32 4月  16 22:22 01.sh



·查看腳本是否語法錯誤:bash -n 1.sh

故意寫錯腳本(隨機的字符是不報錯的)

技術分享圖片

[root@localhost shell]# sh -n 01.sh
01.sh:行10: 語法錯誤: 未預期的文件結尾





20.3 date命令用法


[root@localhost ~]# date
2018年 04月 17日 星期二 20:15:04 CST


·date +%Y-%m-%d, date +%y-%m-%d 年月日

[root@localhost ~]# date +%Y-%m-%d
2018-04-17
[root@localhost ~]# date +%y-%m-%d
18-04-17
[root@localhost ~]# date +%d            ## d 日期
17
[root@localhost ~]# date +%D            ## 美國格式年月日
04/17/18
[root@localhost ~]# date +%M            ## M 分鐘
06
[root@localhost ~]# date +%m            ## m 月份
04
[root@localhost ~]# date +%F            ## 日期
2018-04-17


·date +%H:%M:%S = date +%T 時間

[root@localhost ~]# date  +%H:%M:%S
21:29:15
[root@localhost ~]# date +%T
21:29:35
[root@localhost ~]# date +%H            ##小時
21
[root@localhost ~]# date +%h            ##月份(帶格式,設置中文就是 4月,英文就是 Aprl)
4月
[root@localhost ~]# date +%M            ##分鐘
31
[root@localhost ~]# date +%m            ##月份
04
[root@localhost ~]# date +%S            ##秒
44
[root@localhost ~]# date +%s            ##世時間戳
1523971907


·date +%s 時間戳

距離1970-01-01-00-00-00 過去多少秒


·date +%w, date +%W 星期

[root@localhost ~]# date +%w## 星期幾
2
[root@localhost ~]# date +%W## 今年的第幾周
16


·date -d @1504620492

[root@localhost ~]# date -d @1504620492##知道時間戳查日期
2017年 09月 05日 星期二 22:08:12 CST
[root@localhost ~]# date +%s -d "2018-4-17 21:52:30"##知道日期查時間戳
1523973150


·date -d "+1day" 一天後

[root@localhost ~]# date -d "+1day"
2018年 04月 18日 星期三 21:46:48 CST
[root@localhost ~]# date -d "+1day" +%F
2018-04-18


·date -d "-1 day" 一天前


·date -d "-1 month" 一月前 ##年year

[root@localhost ~]# date -d "-1 month" +%F
2018-03-17


·date -d "-1 min" 一分鐘前 ##小時hour,秒second

[root@localhost ~]# date -d "-1 min" +%T
21:47:09


[root@localhost ~]# 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





20.4 shell腳本中的變量


·當腳本中使用某個字符串較頻繁並且字符串長度很長時就應該使用變量代替

·使用條件語句時,常使用變量 if [ $a -gt 1 ]; then ... ; fi

·引用某個命令的結果時,用變量替代 n=`wc -l 1.txt`

·寫和用戶交互的腳本時,變量也是必不可少的 read -p "Input a number: " n; echo $n 如果沒寫這個n,可以直接使用$REPLY

·內置變量 $0, $1, $2… $0表示腳本本身,$1 第一個參數,$2 第二個 .... $#表示參數個數

·數學運算a=1;b=2; c=$(($a+$b))或者$[$a+$b]



2018-4-17 16周5次課 shell腳本 date、if