内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

shell高效編程:shell腳本從未如此美麗

平常工作中,你是否感覺 shell 腳本只是 命令的堆砌;很多時(shí)候只是為了實(shí)現(xiàn)功能而沒有好的組織結(jié)構(gòu);自己的 腳本都不想再看一遍;哈哈,我這就教給shell的“葵花寶典“,自此讓你的shell腳本有python一樣的美感并且極易維護(hù),真的是shell腳本寫到停不下來。

shell高效編程:shell腳本從未如此美麗

創(chuàng)新互聯(lián)建站是一家朝氣蓬勃的網(wǎng)站建設(shè)公司。公司專注于為企業(yè)提供信息化建設(shè)解決方案。從事網(wǎng)站開發(fā),網(wǎng)站制作,網(wǎng)站設(shè)計(jì),網(wǎng)站模板,微信公眾號(hào)開發(fā),軟件開發(fā),小程序設(shè)計(jì),10余年建站對(duì)廣告推廣等多個(gè)領(lǐng)域,擁有豐富建站經(jīng)驗(yàn)。

平常工作中,你是否感覺shell腳本只是 命令的堆砌;很多時(shí)候只是為了實(shí)現(xiàn)功能而沒有好的組織結(jié)構(gòu);自己的腳本都不想再看一遍;哈哈,我這就教給shell的“葵花寶典“,自此讓你的shell腳本有python一樣的美感并且極易維護(hù),真的是shell腳本寫到停不下來。

現(xiàn)以nginx控制腳本為例,看一下腳本的美容過程:

#!/bin/bash 
# set命令的奇妙用途留在文章末尾 
set -eu 
# nginx重載配置文件 
nginx -c /etc/nginx/nginx.conf -t 
kill -HUP `ps auxf | grep -E "nginx:[[:space:]]+master"| awk '{print $2}'`
寶典秘籍之變量抽離

在腳本中,需要依賴外部的配置,比如配置文件位置,監(jiān)聽端口之類的可變參數(shù),編程時(shí),需要將其抽離為變量,為了更好的引用與維護(hù),省去了外部配置變化時(shí),一個(gè)個(gè)修改帶來的麻煩。

#!/bin/bash 
# set命令的奇妙用途留在文章末尾 
set -eu 
# nginx配置文件在不同環(huán)境中,位置可能不同,所以需要將其抽離成可配置變量,腳本來引用 
NGINX_CONFIG_FILE=/etc/nginx/nginx.conf 
 
# nginx重載配置文件 
nginx -c $NGINX_CONFIG_FILE -t 
kill -HUP `ps auxf | grep -E "nginx:[[:space:]]+master"| awk '{print $2}'`
寶典秘籍之變量抽離

在腳本中,需要依賴外部的配置,比如配置文件位置,監(jiān)聽端口之類的可變參數(shù),編程時(shí),需要將其抽離為變量,為了更好的引用與維護(hù),省去了外部配置變化時(shí),一個(gè)個(gè)修改帶來的麻煩。

#!/bin/bash 
# set命令的奇妙用途留在文章末尾 
set -eu 
# nginx配置文件在不同環(huán)境中,位置可能不同,所以需要將其抽離成可配置變量,腳本來引用 
NGINX_CONFIG_FILE=/etc/nginx/nginx.conf 
 
# nginx重載配置文件 
nginx -c $NGINX_CONFIG_FILE -t 
kill -HUP `ps auxf | grep -E "nginx:[[:space:]]+master"| awk '{print $2}'`
寶典秘籍之模塊化

運(yùn)維畢竟不是專業(yè)程序員,寫腳本時(shí)是怎么舒服怎么來,簡單講就是從上到下依次執(zhí)行,這就導(dǎo)致復(fù)用性差,不易維護(hù),解決這問題的關(guān)鍵在于函數(shù)化、模塊化思想,shell雖然是一種比較簡單的語言,但語言基本的邏輯控制、函數(shù)功能都有,這就讓我們編寫高質(zhì)量shell腳本帶了無限可能。接下來就看一下具體例子來感受一下:

# 由于nginx配置文件檢查是執(zhí)行其他操作的第一步,所以我們將其獨(dú)立成一個(gè)單獨(dú)函數(shù) 
#!/bin/bash 
# set命令的奇妙用途留在文章末尾 
set -eu 
# nginx配置文件在不同環(huán)境中,位置可能不同,所以需要將其抽離成可配置變量,腳本來引用 
NGINX_CONFIG_FILE=/etc/nginx/nginx.conf 
 
# 抽離配置文件檢查為單獨(dú)的函數(shù) 
config_test() { 
    nginx -c $NGINX_CONFIG_FILE -t 
} 
get_nginx_master_pid(){ 
    echo `ps auxf | grep -E "nginx:[[:space:]]+master"| awk '{print $2}'` 
} 
# 抽離配置重載為獨(dú)立函數(shù) 
reload() { 
    kill -HUP `get_nginx_master_pid` 
} 
 
# nginx重載配置文件 
config_test 
reload
寶典秘籍之main函數(shù)

腳本的可維護(hù)性在于腳本的結(jié)構(gòu)的好壞,為了擁有更好的結(jié)構(gòu),通常需要在腳本中定義入口函數(shù),即main函數(shù),讓我在維護(hù)腳本時(shí),可以更好的把握腳本的組織架構(gòu),找到切入點(diǎn):

# 由于nginx配置文件檢查是執(zhí)行其他操作的第一步,所以我們將其獨(dú)立成一個(gè)單獨(dú)函數(shù) 
#!/bin/bash 
# set命令的奇妙用途留在文章末尾 
set -eu 
# nginx配置文件在不同環(huán)境中,位置可能不同,所以需要將其抽離成可配置變量,腳本來引用 
NGINX_CONFIG_FILE=/etc/nginx/nginx.conf 
 
# 抽離配置文件為單獨(dú)的函數(shù) 
config_test() { 
    nginx -c $NGINX_CONFIG_FILE -t 
} 
 
get_nginx_master_pid(){ 
    echo `ps auxf | grep -E "nginx:[[:space:]]+master"| awk '{print $2}'` 
} 
# 抽離配置重載為獨(dú)立函數(shù) 
reload() { 
    kill -HUP `get_nginx_master_pid` 
} 
 
# 入口函數(shù) 
main() { 
    config_test 
    reload 
} 
 
# main在此需要獲取腳本本身的參數(shù), 故將$@傳遞給main函數(shù) 
main $@
寶典秘籍之函數(shù)返回值

在其他編程語言,可以通過return獲得函數(shù)的返回值,但是return語句在shell中含義不同,return命令會(huì)使一個(gè)函數(shù)返回,會(huì)返回一個(gè)單一的數(shù)字參數(shù),而這個(gè)數(shù)字參數(shù)在調(diào)用這個(gè)函數(shù)的腳本是可見的,如果沒有指定返回參數(shù),return在默認(rèn)情況下會(huì)返回上一次命令的返回代碼。那如何實(shí)現(xiàn)類似其他編程語言的return效果呢?可以使用echo命令:

#!/bin/bash 
set -eu 
NGINX_CONFIG_FILE=/etc/nginx/nginx.conf 
 
config_test() { 
    nginx -c $NGINX_CONFIG_FILE -t 
} 
 
# 在此處直接把nginx的master pid可以通過反引號(hào)來獲取echo后的值 
get_nginx_master_pid(){ 
    echo `ps auxf | grep -E "nginx:[[:space:]]+master"| awk '{print $2}'` 
} 
 
reload() { 
    # `get_nginx_master_pid` 獲得nginx master pid 
    kill -HUP `get_nginx_master_pid` 
} 
 
# 入口函數(shù) 
main() { 
    config_test 
    reload 
} 
 
# main在此需要獲取腳本本身的參數(shù), 故將$@傳遞給main函數(shù) 
main $@
寶典秘籍之set命令

bash內(nèi)置的set命令,可以改變我們腳本的執(zhí)行行為,讓我對(duì)腳本的把握和調(diào)試更有力,下面說幾種常用的set指令,相信你都會(huì)喜歡的:
set -e: bash腳本遇到錯(cuò)誤立即退出
set -n: 檢查腳本語法但不執(zhí)行
set -u: 遇到未設(shè)置的變量立即退出
set -o pipefail: 控制在管道符執(zhí)行過程中有錯(cuò)誤立即退出
set -x: 分步調(diào)試命令

在寫腳本時(shí),我們可以直接在腳本開頭簡寫為如下格式:

#!/bin/bash
set -euxo pipefail

檢查bash腳本的語法時(shí),可以這樣寫:

bash -n main.sh

原文來自: https://www.linuxprobe.com/shell-programming-scripts.html

分享文章:shell高效編程:shell腳本從未如此美麗
鏈接分享:http://m.rwnh.cn/article30/jdgdpo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站排名動(dòng)態(tài)網(wǎng)站、營銷型網(wǎng)站建設(shè)、網(wǎng)站維護(hù)、App開發(fā)、域名注冊(cè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)
陈巴尔虎旗| 托克托县| 博湖县| 抚松县| 遂溪县| 邹平县| 明溪县| 嘉鱼县| 丹寨县| 广南县| 荣成市| 靖江市| 锡林浩特市| 阳信县| 邓州市| 子洲县| 长春市| 奉化市| 广平县| 兰西县| 平顺县| 成安县| 老河口市| 高密市| 安达市| 大邑县| 岳西县| 沾化县| 新丰县| 溧阳市| SHOW| 仪陇县| 黄梅县| 常宁市| 安多县| 临汾市| 马鞍山市| 陆良县| 西乡县| 曲松县| 永和县|