成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

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

[[330430]]

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

現以nginx控制腳本為例,看一下腳本的美容過程:

 

  1. #!/bin/bash 
  2. set命令的奇妙用途留在文章末尾 
  3. set -eu 
  4. # nginx重載配置文件 
  5. nginx -c /etc/nginx/nginx.conf -t 
  6. kill -HUP `ps auxf | grep -E "nginx:[[:space:]]+master"| awk '{print $2}'

寶典秘籍之變量抽離

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

 

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

寶典秘籍之模塊化

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

 

  1. # 由于nginx配置文件檢查是執行其他操作的第一步,所以我們將其獨立成一個單獨函數 
  2. #!/bin/bash 
  3. set命令的奇妙用途留在文章末尾 
  4. set -eu 
  5. # nginx配置文件在不同環境中,位置可能不同,所以需要將其抽離成可配置變量,腳本來引用 
  6. NGINX_CONFIG_FILE=/etc/nginx/nginx.conf 
  7.  
  8. # 抽離配置文件檢查為單獨的函數 
  9. config_test() { 
  10.     nginx -c $NGINX_CONFIG_FILE -t 
  11. get_nginx_master_pid(){ 
  12.     echo `ps auxf | grep -E "nginx:[[:space:]]+master"| awk '{print $2}'
  13. # 抽離配置重載為獨立函數 
  14. reload() { 
  15.     kill -HUP `get_nginx_master_pid` 
  16.  
  17. # nginx重載配置文件 
  18. config_test 
  19. reload 

寶典秘籍之main函數

腳本的可維護性在于腳本的結構的好壞,為了擁有更好的結構,通常需要在腳本中定義入口函數,即main函數,讓我在維護腳本時,可以更好的把握腳本的組織架構,找到切入點:

 

  1. # 由于nginx配置文件檢查是執行其他操作的第一步,所以我們將其獨立成一個單獨函數 
  2. #!/bin/bash 
  3. set命令的奇妙用途留在文章末尾 
  4. set -eu 
  5. # nginx配置文件在不同環境中,位置可能不同,所以需要將其抽離成可配置變量,腳本來引用 
  6. NGINX_CONFIG_FILE=/etc/nginx/nginx.conf 
  7.  
  8. # 抽離配置文件為單獨的函數 
  9. config_test() { 
  10.     nginx -c $NGINX_CONFIG_FILE -t 
  11.  
  12. get_nginx_master_pid(){ 
  13.     echo `ps auxf | grep -E "nginx:[[:space:]]+master"| awk '{print $2}'
  14. # 抽離配置重載為獨立函數 
  15. reload() { 
  16.     kill -HUP `get_nginx_master_pid` 
  17.  
  18. # 入口函數 
  19. main() { 
  20.     config_test 
  21.     reload 
  22.  
  23. # main在此需要獲取腳本本身的參數, 故將$@傳遞給main函數 
  24. main $@ 

寶典秘籍之函數返回值

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

 

  1. #!/bin/bash 
  2. set -eu 
  3. NGINX_CONFIG_FILE=/etc/nginx/nginx.conf 
  4.  
  5. config_test() { 
  6.     nginx -c $NGINX_CONFIG_FILE -t 
  7.  
  8. # 在此處直接把nginx的master pid可以通過反引號來獲取echo后的值 
  9. get_nginx_master_pid(){ 
  10.     echo `ps auxf | grep -E "nginx:[[:space:]]+master"| awk '{print $2}'
  11.  
  12. reload() { 
  13.     # `get_nginx_master_pid` 獲得nginx master pid 
  14.     kill -HUP `get_nginx_master_pid` 
  15.  
  16. # 入口函數 
  17. main() { 
  18.     config_test 
  19.     reload 
  20.  
  21. # main在此需要獲取腳本本身的參數, 故將$@傳遞給main函數 
  22. main $@ 

寶典秘籍之set命令

bash內置的set命令,可以改變我們腳本的執行行為,讓我對腳本的把握和調試更有力,下面說幾種常用的set指令,相信你都會喜歡的:

  • set -e: bash腳本遇到錯誤立即退出
  • set -n: 檢查腳本語法但不執行
  • set -u: 遇到未設置的變量立即退出
  • set -o pipefail: 控制在管道符執行過程中有錯誤立即退出
  • set -x: 分步調試命令

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

 

  1. #!/bin/bash
  2. set -euxo pipefail 

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

 

  1. bash -n main.sh 

 

責任編輯:龐桂玉 來源: 運維派
相關推薦

2011-09-27 13:52:41

2024-02-27 18:06:35

2019-04-24 15:20:44

Shell腳本編程Linux

2020-10-21 11:55:44

Shell編程語言Linux

2024-11-27 09:19:25

2025-06-05 08:20:00

Shell腳本Linux系統管理

2017-04-21 14:57:57

AndroidSuperTextViTextView

2010-06-23 15:55:36

Linux Bash

2009-12-25 09:55:18

LinuxShell編程Shell基本語法

2019-08-09 13:50:08

shellLinux

2022-08-12 12:19:13

Cluster檢索集群

2019-05-23 10:55:22

Istio灰度發布ServiceMesh

2013-06-14 10:36:00

2015-08-10 14:42:40

Explain SheShell 命令

2009-12-25 09:49:32

LinuxShell編程運行Shell程序

2009-10-23 13:24:20

linux Shell

2012-04-26 14:02:58

ibmdw

2022-06-21 09:26:21

Shell腳本JavaScript

2021-07-02 06:54:44

Shell腳本 Linux

2009-11-18 13:52:30

PHP shell腳本
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产亚洲精品精品国产亚洲综合 | 在线中文字幕亚洲 | 中文字幕韩在线第一页 | 日本一区二区高清不卡 | 国产一区欧美 | 色伊人久久 | 亚洲视频免费观看 | 国产精品久久久久国产a级 欧美日韩国产免费 | 欧美精品在欧美一区二区 | 99久久久国产精品免费消防器 | 九九热在线观看视频 | 精品中文字幕久久 | 国产一级毛片精品完整视频版 | 国内精品久久久久久久 | 范冰冰一级做a爰片久久毛片 | 一区二区播放 | 颜色网站在线观看 | 久久一区精品 | 国产免费福利 | 久久一区二区视频 | 一区二区在线 | 91av在线视频观看 | 久久婷婷麻豆国产91天堂 | 日本a在线 | 精品欧美一区二区在线观看欧美熟 | 欧美一区二区三区在线观看 | 亚洲一区二区三区欧美 | 亚洲欧美一区二区三区国产精品 | 国产福利在线视频 | 希岛爱理在线 | 国产一区二区三区色淫影院 | 久久久久国产精品一区二区 | 日韩av一区二区在线观看 | 久久国产欧美日韩精品 | 亚洲精品区 | 香蕉av免费| 在线国产一区 | 亚洲一区二区在线播放 | 欧美国产日韩成人 | 色成人免费网站 | 久草免费在线视频 |