【網絡運維】Shell:變量進階知識

Shell 變量進階知識

Shell 中的特殊變量

位置參數變量

Shell 腳本中常用的位置參數變量如下:

  • $0:獲取當前執行的 Shell 腳本文件名(包含路徑時包括路徑)
  • $n:獲取第 n 個參數值(n>9 時需使用 ${n}
  • $#:獲取參數個數
  • $*:獲取所有參數(加雙引號時視為單個字符串)
  • $@:獲取所有參數(加雙引號時保留各參數獨立性)

示例:

#!/bin/bash
echo "腳本名稱: $0"
echo "第一個參數: $1"
echo "第二個參數: $2"
echo "第十個參數: ${10}"
echo "參數個數: $#"
echo "所有參數: $*"
echo "所有參數: $@"
echo "帶引號的參數: $@"

執行結果:

$ bash showargs.sh {a..z}
腳本名稱: showargs.sh
第一個參數: a
第二個參數: b
第十個參數: j
參數個數: 26
所有參數: a b c d e f g h i j k l m n o p q r s t u v w x y z
所有參數: a b c d e f g h i j k l m n o p q r s t u v w x y z
帶引號的參數: a b c d e f g h i j k l m n o p q r s t u v w x y z

進程狀態變量

  • $?:獲取上一條命令的退出狀態(0 表示成功,非零表示失敗)
  • $$:獲取當前 Shell 進程的 PID
  • $!:獲取上一個后臺進程的 PID
  • $_:獲取上一個命令的最后一個參數

示例:

$ ls /root
ls: 無法打開目錄/root: 權限不夠
$ echo $?
2$ echo $$
2447$ md5sum /dev/zero &
[1] 2611
$ echo $!
2611$ ls /etc/hosts /etc/fstab
$ cat $_
# 顯示 /etc/fstab 內容

Shell 內置變量命令

echo 命令

echo 命令常用選項:

  • -n:不換行輸出
  • -e:解析轉義字符

轉義字符:

  • \n:換行
  • \t:制表符
  • \b:退格

示例:

$ echo -n "Hello "; echo "World"
Hello World$ echo -e "Line1\nLine2"
Line1
Line2$ echo -e "Name\tAge"
Name    Age$ echo -e "123\b456"
12456

eval 命令

eval 命令會將參數組合成新命令并執行:

示例:

$ cat noeval.sh
echo \$$#
$ bash noeval.sh hello world
$2$ cat eval.sh
eval "echo \$$#"
$ bash eval.sh hello world
world

read 命令

從標準輸入讀取數據:

示例:

#!/bin/bash
read -p "請輸入內容: " input
echo "您輸入的內容是: $input"# 隱藏輸入內容(適用于密碼)
read -s -p "請輸入密碼: " password
echo
echo "密碼已接收"

exec 命令

exec 命令會替換當前進程執行指定命令:

示例:

# 執行 sleep 命令替換當前 shell
$ exec sleep 10
# 10 秒后返回原 shell# 從文件讀取內容
$ cat exec.sh
#!/bin/bash
seq 5 > /tmp/seq.log
exec < /tmp/seq.log
while read line
doecho $line
done

shift 命令

shift 命令用于移動位置參數:

示例:

$ cat shift.sh
#!/bin/bash
echo "第一個參數: $1"
shift
echo "shift 后的第一個參數: $1"$ bash shift.sh A B C
第一個參數: A
shift 后的第一個參數: B

Shell 變量子串處理

常用子串操作

  • ${parameter}:返回變量值
  • ${#parameter}:返回變量長度
  • ${parameter:offset}:從指定位置提取子串
  • ${parameter:offset:length}:提取指定長度子串
  • ${parameter#word}:從開頭刪除最短匹配
  • ${parameter##word}:從開頭刪除最長匹配
  • ${parameter%word}:從結尾刪除最短匹配
  • ${parameter%%word}:從結尾刪除最長匹配
  • ${parameter/pattern/string}:替換第一個匹配
  • ${parameter//pattern/string}:替換所有匹配

使用示例

$ str="abc123abc123"# 獲取長度
$ echo ${#str}
12# 提取子串
$ echo ${str:3}
123abc123
$ echo ${str:3:4}
123a# 刪除子串
$ echo ${str#a*c}
123abc123
$ echo ${str##a*c}
123# 替換子串
$ echo ${str/abc/def}
def123abc123
$ echo ${str//abc/def}
def123def123

實際應用案例

重命名文件:

[furongwang@shell ~]$ touch stu-202112-snap.jpg# 創建sh腳本文件
$ file="stu-202112-snap.jpg"
$ mv $file ${file/2021/2025}  # 改為 2025
$ mv $file ${file/-snap/}     # 刪除 -snap

Shell 特殊擴展變量

常用擴展變量

  • ${parameter:-word}:變量為空時返回 word
  • ${parameter:=word}:變量為空時設置并返回 word
  • ${parameter:?word}:變量為空時輸出錯誤信息
  • ${parameter:+word}:變量不為空時返回 word

使用示例

# 變量未定義
$ unset test
$ echo ${test:-DEFAULT}
DEFAULT# 變量定義
$ test=hello
$ echo ${test:-DEFAULT}
hello# 設置默認值
$ echo ${SHELL:=/bin/bash}
/bin/bash# 錯誤檢查
$ unset test
$ echo ${test:?變量未定義}
-bash: test: 變量未定義

實際應用案例

Apache 啟動腳本片段:

HTTPD_LANG=${HTTPD_LANG:-"C"}
httpd=${HTTPD:-/usr/sbin/httpd}
pidfile=${PIDFILE:-/var/run/httpd.pid}

安全刪除文件:

#!/bin/bash
# 防止 path 變量未定義
find ${path:-/tmp} -name "*.tar.gz" -type f -mtime +7 | xargs rm -f

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

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

相關文章

部署Qwen2.5-VL-7B-Instruct-GPTQ-Int3

模型下載 from modelscope import snapshot_download model_dir snapshot_download(ChineseAlpacaGroup/Qwen2.5-VL-7B-Instruct-GPTQ-Int3)相關包導入 import os import numpy as np import pandas as pd from tqdm import tqdm from datetime import datetime,timedelta fro…

sourcetree 拉取代碼

提示&#xff1a;文章旨在于教授大家 sourcetree 拉取代碼的方式&#xff0c;關于代碼的提交合并等操作后續會補充。 文章目錄前言一、sourcetree 安裝二、http 與 ssh 拉取代碼1.http 方式&#xff08;1&#xff09;生成 token&#xff08;2&#xff09;拼接項目的 url&#x…

epoll模型網絡編程知識要領

1、程序初始化創建監聽socket調用bind函數綁定ip地址、port端口號調用listen函數監聽調用epoll_create函數創建epollfd調用epoll_ctrl函數將listenfd綁定到epollfd上&#xff0c;監測listenfd的讀事件在一個無限循環中&#xff0c;調用epoll_wait函數等待事件發生2、處理客戶端…

15-day12LLM結構變化、位置編碼和投機采樣

多頭機制transformer結構歸一化層選擇 歸一化層位置歸一化層類型激活函數Llama2結構MoE架構 混合專家模型DeepSeek MLA為何需要位置編碼目前的主流位置編碼正余弦位置編碼可學習位置編碼ROPE旋轉位置編碼推導參考&#xff1a; https://spaces.ac.cn/archives/8265 https://zhua…

記錄 docker容器打包成鏡像 在其他服務器快速啟動鏡像和容器

我有個nginx服務器 需要在其他服務器直接部署使用 里面都是完整的 使用 docker ps 查看容器id 進行打包成鏡像docker commit [容器ID或名稱] 新鏡像名:版本 docker commit 28f60e2206b2 my-nginx-custom:v1鏡像保存成文件 docker save -o my-nginx-custom.tar my-nginx-custom:…

使用LLaMA-Factory對大模型進行微調-詳解

書接上回 啟動llama Factory可視化頁面 llamafactory-cli webui 如果想后臺運行 使用 nohup llamafactory-cli webui &瀏覽器訪問 http://127.0.0.1:7860/配置項主要參數: 參考: https://docs.coreshub.cn/console/compute_platform/help/llama_factory/ 模型路徑 : 解…

【AI】錄制自動生成UI自動化腳本

命令行輸入&#xff1a;npx playwright codegen https://myerp.dmyc.XXX.com:9443/打開的瀏覽器上操作&#xff0c;會自動錄制&#xff0c;并生成自動化腳本

深度剖析字節跳動VeOmni框架

背景與設計動機 隨著推薦系統和AI模型走向多模態、多任務的趨勢&#xff0c;字節跳動面臨著訓練、迭代效率和系統復雜度的雙重挑戰。一方面&#xff0c;各類業務&#xff08;如新聞推薦、短視頻、圖文廣告、電商帶貨等&#xff09;都需要處理文本、圖像、視頻、音頻等多種輸入模…

OCR庫pytesseract安裝保姆級教程

本文將介紹使用工具安裝OCR庫pytesseract的詳細流程。 Anaconda安裝教程參考Anaconda安裝保姆級教程。 目錄 一、工具安裝 二、創建虛擬環境 三、安裝pytesseract 總結 一、工具安裝 點擊鏈接前往官網codetou.com&#xff0c;下載安裝最新版即可&#xff0c;本篇博客以摳頭…

開源im即時通訊軟件開發社交系統全解析:安全可控、功能全面的社交解決方案

在即時通訊與社交需求日益增長的今天&#xff0c;一款安全、穩定、功能全面的聊天軟件成為不少團隊和開發者的剛需。但市面上多數聊天 APP 要么依賴第三方插件&#xff0c;面臨數據安全隱患和高額服務費&#xff1b;要么功能單一&#xff0c;難以滿足復雜社交場景。今天給大家推…

殘差神經網絡(ResNet)

殘差神經網絡&#xff08;Residual Neural Network&#xff0c;簡稱 ResNet&#xff09;是深度學習領域的里程碑式模型&#xff0c;由何凱明等人在 2015 年提出&#xff0c;成功解決了深層神經網絡訓練中的梯度消失 / 爆炸問題&#xff0c;使訓練超深網絡&#xff08;如 152 層…

學習嵌入式之驅動

一、基礎搭建1.基礎&#xff1a;c語言 軟件編程語言 數據結構 軟件編程思想2.驅動實現目標如果將Linux系統細致到開發板平臺上&#xff1f; Liunx系統與硬件設備的適配3.自我能力的鍛煉繼續強化C語言鍛煉大型代碼閱讀和分析能力學習大型項目的代碼搭建和管理的能力…

在 Golang 中復用 HTTP 連接

問題提出最近在實現一個轉發大模型調用請求的中轉功能&#xff0c;涉及到要構造client發送請求的內容&#xff0c;一開始我每次都是新建一個client來發送請求&#xff0c;這樣的代碼實現存在一些問題——每次都要構造新的client&#xff0c;并且要重新建立連接。后面了解到在Go…

前端:el-upload文件上傳與FormData 對象

<el-uploadclass"uploadDemo":limit"1"dragaccept".xls,.xlsx" <!-- 只保留Excel格式 -->:on-exceed"handleExceedFileLimit":on-change"handleChangeExcelFile":on-remove"handleRemoveExcelFile":bef…

自然處理語言NLP:One-Hot編碼、TF-IDF、詞向量、NLP特征輸入、EmbeddingLayer實現、word2vec

文章目錄自然語言處理&#xff08;NLP&#xff09;一、什么是自然語言處理&#xff08;NLP&#xff09;&#xff1f;二、NLP 的核心目標三、NLP 的主要應用方向&#xff08;應用場景&#xff09;四、NLP 的基本概念五、NLP 的基本處理流程1. 文本預處理2. 特征表示3. 模型選擇與…

單詞記憶-輕松記憶10個實用英語單詞(13)

1. board含義&#xff1a;板子&#xff1b;董事會&#xff1b;登機 讀音標注&#xff1a;/b??rd/ 例句&#xff1a;Write your name on the board. 譯文&#xff1a;把你的名字寫在板上。 衍生含義&#xff1a;董事會&#xff08;如“board of directors”&#xff09;&#…

Spring循環依賴源碼調試詳解,用兩級緩存代替三級緩存

Spring循環依賴源碼詳解&#xff0c;改用兩級緩存并實驗 背景 最近一直在研究Spring的循環依賴&#xff0c;發現好像兩級緩存也能解決循環依賴。 關于為何使用三級緩存&#xff0c;大致有兩個原因 對于AOP的類型&#xff0c;保證Bean生命周期的順序 對于有AOP代理增強的類型&am…

亞馬遜BALL PIT球池外觀專利侵權指控?不侵權意見書助力4條鏈接申訴成功!

兒童球池作為玩具品類中常見的一款產品&#xff0c;能夠給兒童提供游樂的安全空間&#xff0c;深受亞馬遜平臺用戶的喜愛。然而在近期&#xff0c;賽貝收到了部分亞馬遜賣家的咨詢&#xff0c;原因是他們在售的兒童球池產品鏈接被美國外觀專利USD1009203S&#xff08;下稱203專…

開源,LangExtract-Python庫用LLM從非結構化文本提取結構化信息

摘要&#xff1a; LangExtract是一個Python庫&#xff0c;利用大語言模型&#xff08;LLM&#xff09;根據用戶定義指令從非結構化文本文檔中提取結構化信息。它具備精確源定位、可靠結構化輸出、長文檔優化、交互式可視化、靈活LLM支持、適應任意領域等特點。可通過幾行代碼快…

如何根據團隊技術能力選擇最適合的PHP框架?

作為一名PHP開發者&#xff0c;面對眾多的PHP框架&#xff0c;你是否曾感到選擇困難&#xff1f;Laravel、Symfony、CodeIgniter、ThinkPHP…每個框架都有其特色和優勢&#xff0c;但沒有最好的框架&#xff0c;只有最適合的框架。而選擇合適框架的關鍵因素之一&#xff0c;就是…