序言
一個業務複雜,結構複雜的項目需要自動化部署.以此爲基礎梳理下使用jenkins自動化部署的過程.
Shell
shell腳本就是一些命令的集合。舉個例子,我想實現這樣的操作:
- 進入到/tmp/目錄;
- 列出當前目錄中所有的文件名;
- 把所有當前的文件拷貝到/root/目錄下;
- 刪除當前目錄下所有的文件。
簡單的4步在shell窗口中需要你敲4次命令,按4次回車。這樣是不是很麻煩?當然這4步操作非常簡單,如果是更加複雜的命令設置需要幾十次操作呢?那樣的話一次一次敲鍵盤會很麻煩。所以不妨把所有的操作都記錄到一個文檔中,然後去調用文檔中的命令,這樣一步操作就可以完成。其實這個文檔呢就是shell腳本了,只是這個shell腳本有它特殊的格式。
有一個問題需要約定一下,凡是自定義的腳本建議放到/usr/local/sbin/目錄下,這樣做的目的是,一來可以更好的管理文檔;二來以後接管你的管理員都知道自定義腳本放在哪裏,方便維護[email protected]。
【shell腳本的基本結構以及如何執行】
Shell腳本通常都是以.sh 爲後綴名的,這個並不是說不帶.sh這個腳本就不能執行,只是大家的一個習慣而已。所以,以後你發現了.sh爲後綴的文件那麼它一定會是一個shell腳本了。
test.sh中第一行一定是 “#! /bin/bash” 它代表的意思是,該文件使用的是bash語法。如果不設置該行,那麼你的shell腳本就不能被執行。
第三行和第四行的’#’表示註釋,在前面講過的。
Shell腳本的執行很簡單,直接”sh filename “ (因爲是通過vi創建的一個文件,沒有執行權限所以需要藉助sh 命令+ 文件名的方式.如果./filename.sh 的方式調用 則需要增加執行權限命令: chmod +x filename.sh [email protected]) .
另外使用sh命令去執行一個shell腳本的時候是可以加-x選項來查看這個腳本執行過程的,這樣有利於我們調試這個腳本哪裏出了問題。
Shell的date使用
上面的Shell腳本中用到了’date’這個命令,它的作用就是用來打印當前系統的時間。使用方法如下所示.
#%Y表示年,%m表示月,%d表示日期,%H表示小時,%M表示分鐘,%S表示秒
[root@localhost [email protected]]# date "+%Y%m%d %H:%M:%S"
20200617 12:17:33
#這裏的是小y 故此值有年份的後兩位
[root@localhost [email protected]]# date "+%y%m%d %H:%M:%S"
200617 12:19:37
#-d 選項也是經常要用到的,它可以打印n天前或者n天后的日期,當然也可以打印n個月/年前或者後的日期。
#-d 的用法通俗易懂
[root@localhost [email protected]]# date -d "-1 day" "+%y%m%d %H:%M:%S"
200616 12:20:58
[root@localhost [email protected]]# date -d "+1 day" "+%y%m%d %H:%M:%S"
200618 12:21:05
[root@localhost [email protected]]# date -d "+1 month" "+%y%m%d %H:%M:%S"
200717 12:21:12
[root@localhost [email protected]]# date -d "+1 year" "+%y%m%d %H:%M:%S"
210617 12:21:19
#顯示星期幾
[root@localhost [email protected]]# date "+%w"
3
Shell變量
定義變量的格式爲 “變量名=變量的值”。當在腳本中引用變量時需要加上’$’符號;
#! /bin/bash
#this my first shell script
#[email protected]
date
echo "hello world"
# 表達式使用了 反引號注意 就是d=的後面,[email protected]
d=`date +%w`
echo "the script begin at $d"
# 數學計算要用’[ ]’括起來並且外頭要帶一個’$’
echo "hello world"
# 表達式使用了 反引號注意 就是d=的後面,[email protected]
d=`date +%w`
echo "the script begin at $d"
# 數學計算要用’[ ]’括起來並且外頭要帶一個’$’
a=1
b=2
sum=$[$a+$b]
echo "result is $sum"
# 獲取標準輸入獲得變量的值
# read x表示x變量的值需要用戶通過鍵盤輸入得到
echo "please input a number"
read x
echo "please input another number"
read y
sum=$[$x+$y];
echo "result is $sum"
#也有一種簡潔的寫法
#read -p 選項類似echo的作用。執行如下:
#read -p "please input a number:" x
echo $0 $1 $2
你有沒有用過這樣的命令”/etc/init.d/iptables restart “ 前面的/etc/init.d/iptables 文件其實就是一個shell腳本,爲什麼後面可以跟一個”restart”? 這裏就涉及到了shell腳本的預設變量。實際上,shell腳本在執行的時候後邊是可以跟變量的,而且還可以跟多個。
./test.sh 1 2
其中$1的值就是在執行的時候輸入的1,而$2的值就是執行的時候輸入的2,當然一個shell腳本的預設變量是沒有限制的,這回你明白了吧。另外還有一個$0,不過它代表的是腳本本身的名字。不妨把腳本修改一下。
shell的邏輯判斷
if的使用不帶else
格式爲:
- if 判斷語句; then
- command
- fi
read -p "please input you score: " a
#在if1.sh中出現了 ((a<60))這樣的形式,這是shell腳本中特有的格式,用一個小括號或者不用都會報錯,請記住這個格式,即可
if ((a <60)); then
echo "you didn't pass the exam."
fi
if帶else
格式爲:
- if 判斷語句 ; then
- command
- else
- command
- fi
read -p "please input you score: " a
#在if1.sh中出現了 ((a<60))這樣的形式,這是shell腳本中特有的格式,用一個小括號或者不用都會報錯,請記住這個格式,即可
if ((a <60)); then
echo "you didn't pass the exam."
else
echo "you pass the exam"
fi
if帶elif(elif 相當於else if)
格式爲
- if 判斷語句一 ; then
- command
- elif 判斷語句二; then
- command
- else
- command
- fi
read -p "please input you score: " a
#在if1.sh中出現了 ((a<60))這樣的形式,這是shell腳本中特有的格式,用一個小括號或者不用都會報錯,請記住這個格式,即可
if ((a <60)); then
echo "you didn't pass the exam."
#這裏的 && 表示“並且”的意思,當然你也可以使用 || 表示“或者”,執行結果:
elif((a.60)) && ((a<85)); then
echo "you didn't get a high score"
else
echo "you pass the exam"
fi
其它邏輯運算符
以上只是簡單的介紹了if語句的結構。在判斷數值大小除了可以用”(( ))”的形式外,還可以使用”[ ]”。但是就不能使用>, < , = 這樣的符號了,要使用 -lt (小於),-gt (大於),-le (小於等於),-ge (大於等於),-eq (等於),-ne (不等於)。
文件目錄判斷
格式
- if [ -e filename ] ; then
可選參數:
- -e :判斷文件或目錄是否存在
- -d :判斷是不是目錄,並是否存在
- -f :判斷是否是普通文件,並存在
- -r :判斷文檔是否有讀權限
- -w :判斷是否有寫權限
- -x :判斷是否可執行
case的使用
格式爲:下面的結構中,不限制value的個數,*則代表除了上面的value外的其他值。
- case 變量 in
- value1)
- command
- ;;
- value2)
- command
- ;;
- value3)
- command
- ;;
- *)
- command
- ;;
- esac
Shell循環
for循環
格式:
- for 變量名 in 循環的條件; do
- command
- done
有如下的2種寫法.大同小異.同時也可以試:,(in 後面其實就可以跟一些linux命令,然後接受該命令返回的內容,並循環展示它[email protected])------------另外注意in後面的是反引號,
- for i in `ls`; do echo $i; done
- for i in `cat test.txt`; do echo $i; done
while循環
格式:
- while 條件; do
- command
- done
去掉條件就是死循環如下所示,可以監聽端口或者輸入
- while :; do
- command
- done
shell函數
在shell腳本中,函數一定要寫在最前面,不能出現在中間或者最後,因爲函數是要被調用的,如果還沒有出現就被調用,肯定是會出錯的。
函數格式:
- function 函數名() {
- command
- }
Jenkins配置Git
待續~~~~~~~~