1.shell腳本介紹
shell編寫,最重要是的是思路,其次是要練習
shell是一種腳本語言,類似於python,php等,有自己的語法,相對簡單
shell可以使用邏輯判斷,循環等語法
shell可以自定義函數,目的在於減少重複代碼
shell是系統命令的集合
shell腳本可以實現自動化運維,能大大增加我們的運維效率,批量執行
2.shell腳本結構和執行
#!/bin/bash:定義shell內的文件是用/bin/bash進行解析的
以“#”開頭的行,爲解釋說明,可以註釋時間,編寫人,名稱等等,也存在特殊的用法如添加chkconfig啓動的語句
腳本的名字以.sh結尾,用於區分shell腳本
shell腳本的執行:
- chmod -x word.sh
- ./word.sh:./爲相對路徑,可以找到文件,使用絕對路徑
- 查看腳本的執行過程:sh -x word.sh
- 查看腳本是否有錯誤:sh -n word.sh
3.date命令用法
date +%Y-%m-%d,date +%y-%m-%d 年 月 日,大寫Y四位的年,y爲2位的年,m標記月份,M標記分鐘,d標記日期,D標記年月日,顯示日的方法還有,date +%F和date +%Y%m%d
[root@Chauncey ~]# date +%y
18
[root@Chauncey ~]# date +%Y
2018
[root@Chauncey ~]# date +%Y-%m-%d
2018-12-24
[root@Chauncey ~]# date +%y-%m-%d
18-12-24
[root@Chauncey ~]# date +%F
2018-12-24
[root@Chauncey ~]# date +%Y%m%d
20181224
[root@Chauncey ~]#
date +%H:%M:%S = date +%T 時 間,H標記小時,小h標記英文的月,M標記分鐘,S標記秒
[root@Chauncey ~]# date +%H:%M:%S
22:33:56
[root@Chauncey ~]# date +%T
22:34:02
[root@Chauncey ~]#
date +%s 時間戳 date +%s "XXXX-XX-XX XX:XX:XX"將時間轉換爲時間戳,date -d @時間戳,將時間戳轉換成具體的時間
date -d @1504620492
[root@Chauncey ~]# date +%s
1545662080
[root@Chauncey ~]# date -d @1545662080
Mon Dec 24 22:34:40 CST 2018
[root@Chauncey ~]#
date -d “+1day” 一天後
date -d “-1day” 一天前
date -d "-1 month" 一月前
date -d “1 min” 一分鐘前
date +%w,date +%W 星期幾,w標記,W是今年的第幾周
如果要組合使用時,應加雙引號
[root@Chauncey ~]# date "+%Y-%m-%d %H:%M:%S"
2018-12-24 22:51:34
cal查看日曆
[root@Chauncey ~]# date -d "+1day"
Tue Dec 25 22:35:48 CST 2018
[root@Chauncey ~]#
[root@Chauncey ~]# date -d "-1day"
Sun Dec 23 22:36:09 CST 2018
[root@Chauncey ~]#
[root@Chauncey ~]# date -d "-1month"
Sat Nov 24 22:36:28 CST 2018
[root@Chauncey ~]#
[root@Chauncey ~]# date -d "1min"
Mon Dec 24 22:37:49 CST 2018
[root@Chauncey ~]#
[root@Chauncey ~]# cal
December 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@Chauncey ~]# date +%w
1
[root@Chauncey ~]# date +%W
52
[root@Chauncey ~]#
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]
5.腳本中的邏輯判斷
格式1:if 條件;then 語句;fi
[root@Chauncey ~]# if [ $a -gt 3 ]; then echo ok; fi
ok
[root@Chauncey ~]#
格式2:if 條件;then 語句;else 語句 ;fi
[root@Chauncey ~]# cat ifel.sh
#!/bin/bash
echo -n "Please input a number:"
read a
if [ $a -ge 5 ]
then
echo "a>=5"
else
echo "a<5"
fi
格式3:if...;then...;elif...;then...;else...;fi
[root@Chauncey ~]# cat ifelsif.sh
#!/bin/bash
echo -n "please input a number:"
read a
if [ $a -gt 4 ] && [ $a -lt 7 ]
then
echo "4<a<7"
elif [ $a -gt 7 ]
then
echo "a>7"
else
echo "a<4"
fi
邏輯判斷表達式:if [ $a -gt $b ];if [ $a -lt 5 ];if[ $b -eq 10 ]等 -gt(>);-lt(<);-ge(>=);-le(<=);-eq(==);-ne(!=)注意到處都是空格 當使用數學符號時,具體表達要使用兩個小括號
[root@Chauncey ~]# a=3
[root@Chauncey ~]# if (($a>1)); then echo ok; fi
ok
可以使用&& || 結合多個條件
if [ $a -gt 5 ] &&[ $a -lt 10 ]; then
if [ $b -gt 5 ] || [ $b -lt 3 ]; then
[root@Chauncey ~]# cat ifelsif.sh
#!/bin/bash
echo -n "please input a number:"
read a
if [ $a -gt 4 ] && [ $a -lt 7 ]
then
echo "4<a<7"
elif [ $a -gt 7 ]
then
echo "a>7"
else
echo "a<4"
fi