Linux之shell腳本篇(二)

一、shell編程之if語句

  • 引言

Linux在shell編程中,通常都是以自上而下運行,但是為了提高其代碼嚴謹性,我們即引入了多條件 控制語句例如:if、for、while、case等語句,有時候針對條件我們還會結合正則表達式去運用。將這些流程控制語句進行熟練掌握,必然對shell腳本編寫有很大的幫助

  • if表達式結構(三種)

結構形式語法
單表達式

if 表達式;then

? ? ? ? 語句1

fi

雙表達式

if 表達式;then

? ? ? ? 語句1

else:

? ? ? ? 語句2

fi

多表達式

if 表達式;then?

? ? ? ? 語句1

elif 表達式

? ? ? ? 語句2

else

? ? ? ? 語句3

fi

二、示例分析

大小比較分析單分支、對分支語法

### if單語句#####引用單個數字比較
#!/bin/bash if (( 5 > 2 ));then echo "hello"###引用變量比較#!/bin/bash
$NUM1="$1"
$NUM2="$2"if (( $NUM1 > $NUMM2 ));then echo "=================="echo "$NUM1 greter than $NUM2"
fi## if多條件和雙條件判斷###引用變量比較#!/bin/bash
NUM1=$1
NUM2=$2if (( $NUM1 > $NUM2 ));then echo "=================="echo "$NUM1 greter than $NUM2"
else if [ $NUM1 == $NUM2 ];thenecho "$NUM1 is equal $NUM2"exitfiecho  "$NUM1 less than $NUM2"
fi

除了上述表達式可以用((表達式))之外,還可以使用test命令來表示表達式,除次之外還能判斷文件是否存在(-f 參數? ?-d參數),我們通常會將test? =? [? ] 表示為等效的,【 】中不支持數學運算(>、<、=),但是可以用(gt、lt、eq)

上面的$?表示若執行結果為真那么返回結果為0,但如果非真,即結果不為0

我這里使用了test 的另一種等效寫法做了修改(【? ?】)

#!/bin/bash
NUM1=$1
NUM2=$2if [ $NUM1 -gt $NUM2 ];then echo "=================="echo "$NUM1 greter than $NUM2"
else if [ $NUM1 -eq $NUM2 ];thenecho "$NUM1 is equal $NUM2"exitfiecho  "$NUM1 less than $NUM2"
fi

雖然一個[ express] 和[ [ express ]?],中的表達式都能用-eq、-gt、lt,但是在邏輯關系表示時的情況確截然不同

[ [ express ] ]中只能填寫&&(邏輯與) 和 ||(邏輯或)

[ express] 只能填寫-a(邏輯與),-o(邏輯或)

創建不存在的目錄

#!/bin/bash
if [ ! -d /tmp/hello ];thenmkdir -p /tmp/helloecho "ok!!!!"
fi

if 多個條件測試判斷成績

#!/bin/bash
NUM=$1
if [ $NUM -ge 100 ];thenecho "vary good."elseif [ $NUM -ge 85 ];thenecho "good."elseif [ $NUM -ge 60 ];thenecho "pass."elseecho  "no pass."fifi
fiNUM=$1
if [ $NUM -ge 100 ];thenecho "vary good."
elif [ $NUM -ge 85 ];thenecho "good."
elif [ $NUM -ge 60 ];thenecho "pass."
elseecho  "no pass."

Nginx之v3腳本優化引用(位置參數)

嚴格規范參數表達

vim可視化塊快捷使用技巧

(ctrl +v --------- 上下鍵選擇----------大寫I----------------修改----------- 2 Esc)

## 對help參數和位置參數的限制if [ $1 == "help" -o $1 == "-h"];then echo -e "\033[32m-----------------\033[0m"echo -e "\033[32mUsage:{/bin/sh $0 1.24.0|1.26.1|help}\033[0m"exit
fi## 避免重復性安裝軟件包
CHECK_NUM=$(rpm -qa | grep -wE "gcc|pcre-devel|zlib-devel|wget"|wc -l)
if [ $CHECK_NUM -lt 4 ];thenyum -y install wget tar make gccyum -y install pcre-devel zlib-devel openssl-devel
fi## 避免重復性編譯,對于文件不存在編譯安裝if [ ! -f $NGX_DIR/sbin/nginx ];then
CHECK_NUM=$(rpm -qa | grep -wE "gcc|pcre-devel|zlib-devel|wget"|wc -l)
if [ $CHECK_NUM -lt 4 ];thenyum -y install wget tar make gccyum -y install pcre-devel zlib-devel openssl-devel
fi## 若軟件已部署,提示已經部署了(若存在軟件文件夾)
else  echo -e "\033--軟件已經部署完成!!!!!無需重復部署,請輸入是否重裝?yes/no--\033[0m"ls -ld $NGX_DIRll $NGX_DIRread INPUT if [ $INPUT == "yes" -o $INPUT == "Y" ];then重裝邏輯## 由于防火墻報錯問題,需要先關閉nginx,然后對防火墻對外端口進行判斷CHECK_FIRE=$(firewalld-cmd --list-all | grep -w "80" | wc -l)if [ $CHECK_FIRE -ne 1 ];thenfirewalld-cmd -add-port=80/tcp --permanentsystemctl reload firewalld.service
fi

如果想要對預編譯、編譯結果進行隱藏,可以使用黑洞文件 >> /dev/null 2>&1(這里2表示標準輸出。1表示錯誤輸出)

三、條件判斷符號的使用

單引號和雙引號本質區別在于內置變量引用必須使用雙引號,單引號默認是字符串格式

$( command )? ? 和`command`執行腳本命令結果是一樣的

Nginx:v4版本更新之虛擬主機(多網站)的添加

虛擬主機完成構建

echo -e "\033[32m----正在配置虛擬主機--$NGX_VHOST-----\033[0m"
## 切換到Nginx目錄
cd $NGX_DIR/conf## 備份Nginx配置文件
\cp  nginx.conf nginx.conf.bak
echo "
worker_processes  1;
events {worker_connections  1024;
}
http {include       mime.types;default_type  application/octet-stream;sendfile        on;keepalive_timeout  65;include domains/*;
}
">nginx.conf## 創建虛擬主機配置文件目錄mkdir -p domains/## cd切換到domains目錄
cd domains/echo "
server{listen 80;server_name v1.nginx;location / {root /data/webapp/v1.nginx;index index.html index.htm index.php;}
}">v1.nginx.conf## 創建虛擬主機發布目錄,寫入測試頁面######## 多虛擬主機創建 添加位置參數$1($NGX_VHOST)   
mkdir -p /data/webapp/v1.nginx
echo "v1.nginx test pages." > /data/webapp/v1.nginx/index.html## 判斷是否重啟
$NGX_DIR/sbin/nginx -t > /dev/null 2>&1if [ $? -eq 0 ];then
## 重啟nginx服務$NGX_DIR/sbin/nginx -s reload
fi
cat $NGX_VHOST
echo -e "\033[32m------------------\033[0m"
echo -e "\033[32m----nginx虛擬主機--$NGX_VHOST-----添加成功\033[0m"

添加成功效果如下:

添加nginx_host虛擬主機腳本位置優化之后腳本

#!/bin/bash# ***************************************************************************
# * 
# * @file:auto_install_nginx_v1.sh 
# * @author:www.hxd666.cn 
# * @date:2025-07-22 09:47 
# * @version 1.0  
# * @description: Shell script 
# * @Copyright (c)  all right reserved 
#* 
#**************************************************************************/ NGX_VER="$1"
NGX_URL="http://nginx.org/download"
NGX_SOFT="nginx-${NGX_VER}.tar.gz"
NGX_DIR="/usr/local/nginx"
NGX_ARGS="--user=www --group=www --with-http_stub_status_module"
NGX_SRC=$(echo $NGX_SOFT | sed 's/.tar.gz//g')
NGX_VHOST=$1
## 創建虛擬主機echo -e "033[32m---------正在配置虛擬主機------033[32m"cd $NGX_DIR/conf\cp nginx.conf nginx.conf.bak## 創建nginx配置文件
echo "
worker_processes  1;
events {worker_connections  1024;
}
http {include       mime.types;default_type  application/octet-stream;sendfile        on;keepalive_timeout  65;include domains/*;
}" > nginx.conf## 創建 虛擬主機配置文件
mkdir -p domains/cd domainsecho "server{listen 80;server_name $NGX_VHOST;location / {root /data/webapp/$NGX_VHOST;index index.html index.htm index.php;}
}
" > $NGX_VHOST.conf## 創建虛擬主機目錄mkdir -p /data/webapp/$NGX_VHOST
echo "$NGX_VHOST test pages." > /data/webapp/"$NGX_VHOST"/index.html## 判斷是否重啟if [ $? -eq 0 ];then $NGX_DIR/sbin/nginx -s reload
ficat $NGX_VHOST.confecho "033[32m----------nginx 虛擬主機--$NGX_VHOST-----添加成功!!!!"

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/93305.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/93305.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/93305.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

如何在android framewrok dump camera data

實現dump 函數 實現1 void dumpBufferToFile(buffer_handle_t* buffer, int width, int height, int frameNum) {void* data NULL;GraphicBufferMapper::getInstance().lock(*buffer, GRALLOC_USAGE_SW_READ_OFTEN, Rect(width, height), &data);char filename[128];sprin…

機器學習中的可解釋性:深入理解SHAP值及其應用

機器學習可解釋性的重要性在人工智能技術快速發展的2025年&#xff0c;機器學習模型已經深度滲透到醫療診斷、金融風控、司法量刑等關鍵領域。然而&#xff0c;隨著模型復雜度的不斷提升&#xff0c;一個根本性矛盾日益凸顯&#xff1a;模型預測性能的提升往往以犧牲可解釋性為…

.NET9 使用 OData 協議項目實戰

.NET 中 ODate 協議介紹 OData(Open Data Protocol) 是一個開放的 Web 協議&#xff0c;用于查詢和更新數據。在 .NET 生態系統中&#xff0c;OData 被廣泛支持和使用。 主要特性 1. 統一的數據訪問方式 提供標準化的查詢語法支持 CRUD 操作支持元數據描述 2. 查詢能力 標…

Android 性能優化:提升應用啟動速度(GC抑制)

前言 在移動應用開發領域&#xff0c;啟動速度是用戶體驗的重要指標。對于Android應用而言&#xff0c;垃圾回收&#xff08;Garbage Collection, GC&#xff09;機制雖然是內存管理的核心&#xff0c;但在應用啟動期間頻繁觸發GC會顯著拖慢啟動速度。本文將深入探討如何通過GC…

做了一款小而美的本地校驗器

需求說明 前陣子收到一則讀者留言&#xff0c;指出&#xff1a;市面上AI核稿工具&#xff08;ProWritingAid&#xff0c;WPS AI Spell Check&#xff0c;Writer&#xff0c;QuillBot&#xff0c;Grammarly&#xff09;要么收費太高&#xff0c;要么讓人擔心文章泄露。 如下圖所…

uniapp + uview-plus 微信小程序二維碼生成和保存完整解決方案

uniapp + uview-plus 微信小程序二維碼生成和保存完整解決方案 ?? 項目背景 在開發微信小程序時,經常需要實現二維碼的生成和保存功能。本文檔提供了一個基于 uniapp + uview-plus 框架的完整解決方案,徹底解決了以下常見問題: ? Canvas API 兼容性問題 ? 微信小程序權…

Linux中應用程序的安裝于管理

Linux中應用程序的安裝于管理 一 . rpm安裝 1.掛載 光驅里面存放了很多rpm的軟件包 光驅在系統中使用時&#xff0c;需要掛載 mount /dev/cdrom /mnt/ cd /mnt[rootstw mnt]# ls CentOS_BuildTag GPL LiveOS RPM-GPG-KEY-CentOS-7 EFI images Packag…

mysql重置密碼

要區分 MySQL 是通過 systemd 還是傳統 service 管理&#xff0c;以及對應的密碼重置方案&#xff0c;可按以下步驟操作&#xff1a; 一、如何區分管理方式&#xff08;systemd 還是傳統 service&#xff09; 通過以下命令判斷系統默認的服務管理方式&#xff1a;檢查系統是否使…

C++ TAP(基于任務的異步編程模式)

&#x1f680; C TAP&#xff08;基于任務的異步編程模式&#xff09;1. 引言&#xff1a;走進異步編程新時代&#xff08;&#x1f680;&#xff09; 在當今高性能計算領域&#xff0c;同步編程模型的局限性日益凸顯。傳統的回調地獄和線程管理復雜性促使微軟提出了基于任務的…

利用C++手撕棧與隊列的基本功能(四)

棧和隊列詳細教程可以觀看 https://www.bilibili.com/video/BV1nJ411V7bd?spm_id_from333.788.videopod.episodes&vd_sourcedaed5b8a51d3ab7eb209efa9d0ff9a34&p48棧和隊列概念 棧和隊列是限定插入和刪除只能在表的端點進行的線性表在裝電池、裝彈夾、拿放盤子時都會出…

net8.0一鍵創建支持(Redis)

Necore項目生成器 - 在線創建Necore模板項目 | 一鍵下載 RedisController.cs using CSRedis; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using UnT.Template.Application.Responses; using UnT.Template.Domain;namespace UnT.Template.Controllers {…

Leetcode——42. 接雨水

還記得第一次見該題根本無從下手。其實&#xff0c;我們不妨把問題拆解&#xff0c;簡單化。不要怕自己寫的是暴力算法&#xff0c;有很多算法技巧其實就是在暴力算法的基礎上優化得來。題目目的是求所有可接雨水數量&#xff0c;我們可以求出每一個位置可接雨水數量&#xff0…

Go 語言-->指針

Go 語言–>指針 它允許你操作內存中的實際數據&#xff0c;而不僅僅是數據的副本。指針存儲的是另一個變量的內存地址&#xff0c;而不是變量的實際值。 1. 什么是指針 指針是存儲變量內存地址的變量&#xff0c;它指向另一個變量。通過指針&#xff0c;你可以間接地訪問和修…

軟工八將:軟件開發全流程核心角色體系解析

軟工八將&#xff1a;軟件開發全流程核心角色體系解析 作者注&#xff1a;本概念是由大學生董翔提出&#xff0c;具有一些影響意義。 在現代軟件開發領域&#xff0c;團隊角色的專業化分工是產品成功的核心保障。“軟工八將”作為一套系統梳理軟件開發全流程核心角色的術語&…

安全風險監測系統是什么?內容有哪些?

安全風險監測系統是基于物聯網感知網絡與智能分析技術的綜合管理平臺&#xff0c;通過實時采集、分析和評估各類安全風險指標&#xff0c;構建起覆蓋識別、預警、處置全流程的主動防御體系。作為現代安全管理的中樞神經系統&#xff0c;該系統實現了從被動響應到主動預防的范式…

車載診斷架構 ---面向售后的DTC應該怎么樣填寫?

我是穿拖鞋的漢子,魔都中堅持長期主義的汽車電子工程師。 老規矩,分享一段喜歡的文字,避免自己成為高知識低文化的工程師: 簡單,單純,喜歡獨處,獨來獨往,不易合同頻過著接地氣的生活,除了生存溫飽問題之外,沒有什么過多的欲望,表面看起來很高冷,內心熱情,如果你身…

墨者:SQL注入漏洞測試(寬字節)

墨者學院&#xff1a;SQL注入漏洞測試(寬字節)&#x1f680; 1. 寬字節注入原理? 1.1. 與普通注入對比? 特性普通注入寬字節注入適用場景無轉義處理使用addslashes()等轉義函數核心原理直接閉合引號利用GBK等編碼吞掉轉義符\關鍵字符 " -- #%df %5c防御難度易防御需調…

(二)Eshop(RabbitMQ手動)

文章目錄項目地址一、Rabbit MQ1.1 Pulibsher1. IRabbitMQPublisher接口2. RabbitMQPublisher接口實現3. 使用1.2 Consumer1. 消費接口2. 實現消費者接口項目地址 教程作者&#xff1a;教程地址&#xff1a; 代碼倉庫地址&#xff1a; 所用到的框架和插件&#xff1a; dbt a…

WPF高級學習(一)

文章目錄一、理解進程和線程1. 進程&#xff1a;就像一個獨立的“工廠”舉例&#xff1a;2. 線程&#xff1a;就像工廠里的“工人”舉例&#xff1a;總結&#xff1a;進程 vs 線程二、線程一、WPF 中的線程類型二、核心規則&#xff1a;線程親和性&#xff08;Thread Affinity&…

JAVA知識點(四):SpringBoot與分布式、微服務架構

文章目錄SpringBoot 使用 Validation 進行參數校驗并統一返回校驗異常引入相應的依賴Validation的基本校驗注解添加參數校驗在DTO的屬性上添加校驗在controller對應的DTO添加Valid或者Validated對于復雜String校驗我們可以使用正則來校驗&#xff0c;如下所示&#xff1a;自定義…