shell腳本基礎

目錄

前言

一、概述

(一)、shell腳本基礎概念

(二)、shell的類型

二、Shell變量

(一)、組成

1.變量名

2.變量值

(二)、類型

1.系統內置變量(環境變量)

2.自定義變量

3.預定義變量

?4.位置變量

5.作用域? ? ??

?6.shell中的字符串? ? ??

三、運算符

(一)、數學運算

(二)、比較運算? ? ?

1.邏輯運算符

2.條件測試

3.字符串比較

4.數值比較

5.文件比較

四、shell腳本

(一)、shell腳本編寫規范?? ??? ?

(二)、shell運行規則

(三)、shell腳本運行追蹤

總結



前言

shell是一個用 C 語言編寫的程序,它是用戶使用 Linux 的橋梁。Shell 既是一種命令語言,又是一種程序設計語言。

Shell 是指一種應用程序,這個應用程序提供了一個界面,用戶通過這個界面訪問操作系統內核的服務。

Shell屬于內置的腳本,程序開發的效率非常高,依賴于功能強大的命令可以迅速地完成開發任務(批處理)語法簡單,代碼寫起來比較輕松,簡單易學。

一、概述

(一)、shell腳本基礎概念

腳本就是將手動一次性執行的命令進行規范且自動化

(二)、shell的類型

shell ????????命令解釋環境

類型有
?? ?sh
?? ?ash
?? ?bsh
?? ?csh
?? ?bash
?? ?tcsh
?? ?dsh
?? ?zsh

在Linux系統中

文件名.sh ??? ????????.sh是linux下bash shell 的默認后綴

查看系統中支持的shell
?? ?cat /etc/shells

查看系統默認shell
?? ?echo $SHELL

二、Shell變量

(一)、組成

1.變量名

不會變化

聲明規范
?? ?不能是數字或數字開頭
?? ?以_或字母開頭
?? ?變量名中不能包含特殊字符

聲明方法
?? ?駝峰式????????????????userName
?? ??? ?
?? ?雙駝峰????????????????UserName
?? ??? ?
?? ?shell寫法
?? ??? ?user_name
?? ??? ?username
?? ??? ?USERNAME

2.變量值

????????不斷變化

????????數字、字符

(二)、類型

1.系統內置變量(環境變量)

這種變量中主要保存的是和系統操作環境相關的數據,一般對系統起作用的環境變量的變量名是系統預先設定好的。

env可在/etc/profile文件中修改
???

查看環境變量

echo $PATH

顯示當前環境變量的值

echo $LANG

?表示系統的默認語言環境為美式英語(English, United States)并使用UTF-8編碼

查看當前的區域設置

locale

查看遠程連接

echo ?$SSH_CONNECTION

2.自定義變量

這種變量是最常見的變量,由用戶自由定義變量名和變量的值。

varName=varValue

等號兩邊不能有空格

字符串
?? ?shell中可以不使用引號
?? ?當包含有空格時,需要使用引號

引號的用法

不會引用變量值單引號????????'
會應用變量值雙引號????????"
引用命令結果反撇號????????`
$(命令)應用場景較多

3.預定義變量

是Bash中已經定義好的變量,變量名不能自定義,變量作用也是固定的。

$0腳本本身的名稱
$#腳本后參數的個數
$*腳本運行時參數的內容(整體輸出)
$@腳本運行時參數的內容(逐個輸出)
$?腳本運行完畢后的返回值
默認情況大0? ? ? ? ? 成功
非0? ? ? 失敗

??

?一般情況下失敗為1,特殊的失敗


?4.位置變量

這種變量主要是用來向腳本當中傳遞參數或數據的,變量名不能自定義,變量作用是固定的。

? ? 腳本后參數所在的位置
?? ?$1
?? ?...
?? ?$9? ? ? ?
?? ?
?

5.作用域? ? ??

輸出????????echo $varName

默認變量只在當前shell下生效

若要在當前及其子shell下生效,需要聲明為全局變量(export


??
?? ??? ?
??
? 6.shell中的字符串? ? ??

string
?1)獲得字符串的長度?????????

語法:?? ?${#StringName}

2)字符串取子串?? ??? ?
語法:?? ?${#StringName:position:lenght}?? ???

注意:lenght沒有定義時,一直取到字符串的結尾! ?

3)字符串的截取? ? ? ? ??
a.從左至右截取最后一個匹配字符串string之后的所有字符串?? ??? ??? ??? ?
語法:?? ?${StringName##*string}?? ?

b.從左至右截取第一個匹配字符串string之后的所有字符串
語法:?? ?${StringName#*string}

c.從右至左截取最后一個匹配字符串string之后的所有字符串
語法:?? ?${StringName%%string*}?? ?

d.從右至左截取第一個匹配字符串string之后的所有字符串
語法: ${StringName%string*}

4)字符串的拼接
語法:?? ?StringName3=${StingName1}${StringName2}

5)字符串替換:
語法:?? ?${StringName/OldString/NewString}

三、運算符

(一)、數學運算

+ - * / %???* 作為乘號時需要加轉義符為\*
運算方法
?exprexpr $a + $b
$((a+b))echo $((a+b))
$[a+b]echo $[a+b]?
注意shell不支持浮點數的顯示

\r回車符
\d垂直制表符
\v水平制表符

??

(二)、比較運算? ? ?

1.數值比較

-eq等于
-ne? ?不等于
-lt小于
-le小于等于
-gt大于
-ge大于等于

用test測試

2.文件比較

-e文件或目錄是否存在
-f是否為文件
-d是否為目錄
-r判斷文件是否可讀
-w判斷文件是否可寫
-x判斷文件是否可執行

?

3.字符串比較

=字符串一致
!=字符串不一致
-z字符串為空
! ? ? -z字符串不為空

4.邏輯運算符

&&并且,有假則假,全真為真
||或者,有真則真,全假為假
!取反有真則假,有假則真

??

5.條件測試

&&[ $a -ne $b ] && ?echo OK條件 && 輸出結果
條件為真輸出
||[ $a -ne $b ] || ?echo OK條件 || 輸出結果
條件為假輸出

四、shell腳本

(一)、shell腳本編寫規范
?? ??? ?

第一行#!/bin/bash
第二行#腳本的說明
第三行?腳本正文

(二)、shell運行規則

沒有x權限bash ?腳本所在路徑/腳本文件
source 腳本所在路徑/腳本文件
.(點)腳本所在路徑/腳本文件
有x權限.(點)/腳本文件
腳本絕對路徑/腳本文件

不打斷會一直查看?

(三)、shell腳本運行追蹤

shell腳本運行追蹤bash -x 腳本所在路徑/腳本文件
?? ?
$[$RANDOM%100]返回100內隨機數
?? ?
seq 1 10返回1到10 的連續數字
?? ?
{1..10}返回1到10 的連續數字
?? ?
seq 1.1 10.1返回1.1 2.1 3.1.... 10.1


?? ?
read -p "提示語" 變量名讀取鍵盤輸入并賦值給變量名
?


總結

今天的任務量有些重,但知識點是看懂和編輯Shell腳本的基礎,需要花費時間進行反復背記,加油吧!

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

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

相關文章

PIN TO PIN替代LT8911EXB|CS5523低成本替代LT8911EXB|MIP DSI轉DP EDP方案設計

PIN TO PIN替代LT8911EXB|CS5523低成本替代LT8911EXB|MIP DSI轉DP EDP方案設計 LT8911EXB是MIPI DSI/CSI 轉eDP轉換芯片,ASL CS5523不需要改電路就可以直接PIN TO PIN替代與兼容LT8911EXB。 ASL CS5523與 LT8911EXB的功能與參數,用途方式以及封裝方式和…

【題解】旋轉數組的最小數字、比較版本號

文章目錄 旋轉數組的最小數字比較版本號 旋轉數組的最小數字 題目鏈接&#xff1a;旋轉數組的最小數字 解題思路1&#xff1a;遍歷求最小值 代碼如下&#xff1a; int minNumberInRotateArray(vector<int> rotateArray) {int min rotateArray[0];for(auto const&…

迪米特法則

迪米特法則&#xff0c;也稱為最少知識原則&#xff08;Law of Demeter&#xff09;&#xff0c;是面向對象設計中的一個原則&#xff0c;旨在降低對象之間的耦合性&#xff0c;提高系統的可維護性和可擴展性。該原則強調一個類不應該直接與其它不相關的類相互交互&#xff0c;…

Android 控件截圖保存本地并分享

目錄 需求 需求分析 一、截圖控件生成圖片 二、將圖片保存至本地 2.1 權限 2.2 保存圖片 2.3 調用 三、分享 四、通過測試機型 需求 截圖當前頁面某個控件的內容&#xff0c;并且保存在本地&#xff0c;可分享。 需求分析 1.截圖控件生成圖片 2.保存至本地(需考慮版…

【SpringCloud】Ribbon定制化配置

文章目錄 使用Ribbon自帶負載均衡算法添加負載均衡算法ConfigurationRestTemplate使用上面負載均衡算法 自定義負載均衡算法負載均衡算法實現RestTemplate在Controller中使用該負載均衡算法ServiceIInstance解釋 使用Ribbon自帶負載均衡算法 添加負載均衡算法Configuration /…

實現矩陣地圖與rviz地圖重合

文章目錄 一、rviz地圖轉換矩形地圖(只能用于全局規劃)二、在rviz上顯示地圖邊界信息,可視化調整,實現重合(只能用于局部規劃)一、rviz地圖轉換矩形地圖(只能用于全局規劃) 此方法矩形地圖可能會與rviz地圖不重合,通過改變偏移量x_offset,y_offset接近地圖 可以將矩…

FL Studio for Windows-21.1.0.3713中文直裝版功能介紹及系統配置要求

FL Studio 21簡稱FL水果軟件,全稱是&#xff1a;Fruity Loops Studio編曲&#xff0c;由于其Logo長的比較像一款水果因此&#xff0c;在大家更多的是喜歡稱他為水果蘿卜&#xff0c;FL studio21是目前最新的版本&#xff0c;這是一款可以讓你的計算機就像是一個全功能的錄音室&…

Docker Dockerfile Docker-compose學習筆記

文章目錄 Centos環境下安裝Docker配置鏡像源 Windows環境下安裝Docker配置鏡像源 使用Dokcer鏡像1.獲取鏡像2.查看鏡像信息(1)列出鏡像(2)鏡像標簽(3)鏡像詳細信息(4)鏡像歷史 3.搜索鏡像4.刪除和清理鏡像(1)使用標簽刪除鏡像(2)使用ID刪除鏡像(3)清理鏡像 5.創建鏡像(1)基于已…

基于SpringBoot和Freemarker的頁面靜態化

頁面靜態化能夠緩輕數據庫的壓力&#xff0c;還能提高頁面的并發能力&#xff0c;但是網頁靜態化是比較適合大規模且相對變化不太頻繁的數據。 頁面靜態化在實際應用中還是比較常見的&#xff0c;比如博客詳情頁、新聞網站或者文章類網站等等。這類數據變化不頻繁比較適合靜態…

56.linux 進程管理命令和用戶管理命令

目錄 一、進程管理命令 1.ps 2.pstree 3.kill 4.pkill 5.&后臺運行程序 6.jobs 7.fg bg 8.top 二、用戶管理命令 1.系統存儲用戶信息的文件 2.添加新用戶 3.修改用戶密碼 4.刪除用戶 一、進程管理命令 1.ps 用于查看當前系統中運行的進程信息。它可以…

Golang 程序性能優化利器 PGO 詳解(一):簡單介紹及使用

在軟件開發過程中&#xff0c;性能優化是不可或缺的一部分。無論是在Web服務、數據處理系統還是實時通信中&#xff0c;良好的性能都是至關重要的。Golang 從1.20版版本開始引入的 Profile Guided Optimization&#xff08;PGO&#xff09;機制能夠幫助更好地優化 Go 程序的性能…

The Age of Data and AI: Challenges and Opportunities

Simply put Abstract: This paper examines the impact of the “Age of Data” on the field of artificial intelligence (AI). With the proliferation of digital technologies and advancements in data collection, storage, and processing, organizations now have ac…

進行 200 瓦太陽能 (PV) 模塊設計以測量太陽能光伏陣列的電壓、電流和功率、綜合負荷頻率和電壓控制系統的方法研究(Simulink實現)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;歡迎來到本博客????&#x1f4a5;&#x1f4a5; &#x1f3c6;博主優勢&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客內容盡量做到思維縝密&#xff0c;邏輯清晰&#xff0c;為了方便讀者。 ??座右銘&a…

Levenshtein python調用

函數解釋&#xff1a; Levenshtein距離又稱作編輯距離&#xff08;Edit Distance&#xff09;&#xff0c;是指兩個字符之間&#xff0c;由一個字符轉變成另一個字符所需的最少編輯操作次數。被允許的操作有以下幾種&#xff1a; a. Replace替換&#xff0c;將一個字符替換成另…

如何使用CSS實現一個響應式視頻播放器?

聚沙成塔每天進步一點點 ? 專欄簡介? 使用CSS實現響應式視頻播放器? 寫在最后 ? 專欄簡介 前端入門之旅&#xff1a;探索Web開發的奇妙世界 記得點擊上方或者右側鏈接訂閱本專欄哦 幾何帶你啟航前端之旅 歡迎來到前端入門之旅&#xff01;這個專欄是為那些對Web開發感興趣…

vue輸入框只能輸入數字類型,禁止輸入和粘貼e

js怎么去除1e里面e 方法一&#xff1a;使用 Number() 函數將科學計數法表示的字符串轉換為數字。然后&#xff0c;使用 toString() 方法將其轉換回字符串形式&#xff0c;這樣就會自動移除科學計數法中的 "e" var num 1e10; // 科學計數法表示的數字 var numStr …

【小夢C嘎嘎——啟航篇】string介紹以及日常使用的接口演示

【小夢C嘎嘎——啟航篇】string 使用&#x1f60e; 前言&#x1f64c;C語言中的字符串標準庫中的string類string 比較常使用的接口對上述函數和其他函數的測試代碼演示&#xff1a; 總結撒花&#x1f49e; &#x1f60e;博客昵稱&#xff1a;博客小夢 &#x1f60a;最喜歡的座右…

c語言每日一練(9)

前言&#xff1a;每日一練系列&#xff0c;每一期都包含5道選擇題&#xff0c;2道編程題&#xff0c;博主會盡可能詳細地進行講解&#xff0c;令初學者也能聽的清晰。每日一練系列會持續更新&#xff0c;暑假時三天之內必有一更&#xff0c;到了開學之后&#xff0c;將看學業情…

rollup工具打包報錯問題匯總

1. (!) this has been rewritten to undefined 原因&#xff1a;這是因為打包后沒有給this指向window&#xff0c;導致this undefined&#xff0c;因此需要配置context參數來指定代碼執行環境的參數為window 解決&#xff1a;rollup.config.js文件中添加配置 module.exports…

算法通關村第十關 | 數組中第k個最大元素

1.數組中第k大的數字 題目&#xff1a; LeetCode&#xff1a;數組中的第k個最大元素&#xff0c;給定整數數組nums和整數k&#xff0c;請返回數組中第k個最大的元素&#xff0c;請注意&#xff0c;你需要找的是數組排序后第k個最大的元素&#xff0c;而不是第k個不同的元素。 運…