【Linux】腳本shell script

shell是與Linux交互的基本工具

shell script是針對shell所寫的腳本,解釋執行,無需編譯

注意事項

  1. 指令的執行是從上而下、從左而右的分析與執行;?
  2. 指令、選項與參數間的多個空白都會被忽略掉;?
  3. 空白行也將被忽略掉,并且[tab]按鍵的空白同樣視為空格鍵;?
  4. 如果讀取到一個Enter符號(CR),就嘗試開始執行該行(或該串)命令;?
  5. 如果一行的內容太多,則可以使用[Enter]]來延伸至下一行;?
  6. [#]可做為注釋!任何加在#后面的資料將全部被視為批注文字而被忽略!

執行

必須要具備可讀可執行權限

直接命令執行

sudo chmod u+x test.sh
./test.sh

bash程序執行

shell名稱 腳本名

將輸入重定向到shell腳本

bash < 腳本名

內容

echo [-n -e]

-n:輸出后不換行

-e:轉義字符

#! /bin/bash
# author
# date: 2024-4-26
# function: the first sctiptecho "current time"
date
echo -n "env path:"$PATH
echo "current user name:`hzy`" 
echo "current work path:"
pwdexit 0

內嵌腳本

#! /bin/bash
# author
# date: 2024-4-26
# function: the first sctiptecho "test:"
. test.shexit 0

調試

bash -v 腳本名

絕對路徑

相對路徑

變量path功能

重定向輸入:bash < 腳本名

變量

變量就是以一組文字或符號等,來替代一些設置或者是一串保留的數據Shell編程中變量是非類型性質的,不必指定變量是數字還是字符串都需要事先聲明

局部變量

局部變量在腳本或命令中定義,僅在當前shel實例中有效,其他shel啟動的程序不能訪問局部變量。

環境變量

所有的程序,包括shel1啟動的程序,都能訪問環境變量,有些程序需要環境變量來保證其正常運行,必要的時候shel腳本也可以定義環境變量。(是系統的一部分,無需定義,如PATH)

內部變量

是由shell程序設置的特殊變量,在程序內這些變量無法修改($#、?)。?

$0:當前腳本名稱

$n:傳遞給腳本或函數的參數,n表示第n個參數(下標從1開始)

$#:傳遞給腳本或函數的參數個數

$*:傳遞給腳本或函數的全部參數,把所有參數作為一個整體

$@:傳遞給腳本或函數的全部參數,把所有參數分開,分別傳遞

$?:上一個命令的退出狀態,或者函數的返回值

$$:當前Shell進行的ID,對于腳本,就是腳本所在進程ID

變量賦值

w:=3

變量值讀取

read [-ptn] variable1?variable2?variable3:將用戶輸入的數據分配給變量。

-p:提示用戶輸入數據,并在讀取數據之前顯示提示信息。

-t:設置超時時間,如果用戶在指定的時間內沒有輸入數據,則返回失敗。

-n:限制讀取的字符數,只讀取指定數量的字符。

例如

#!/bin/bashecho "請輸入三個變量的值:"
read -p "variable1: " var1
read -p "variable2: " var2
read -p "variable3: " var3echo "您輸入的變量值如下:"
echo "variable1: $var1"
echo "variable2: $var2"
echo "variable3: $var3"

替換變量

new_var=${old_var-content}:如果old_var不存在,content賦值給new_var

new_var=${old_var:-content}:為空也替換

new_var=${old_var:+content}:如果old_var是非空,content就賦值給new_var(與-號相反)

new_var=${old_var:?content}:如果old_var被刪除或為空,將content輸出到控制臺

${w1:+${w3:=root}}表示如果變量$w1被定義且非空(即不為null或空字符串),則執行${w3:=root},否則返回null。

${w3:=root}表示如果變量$w3未被定義或為空,則將其賦值為字符串"root",否則保持其當前值不變

數組

bash只支持一維數組,沒有限制大小。

下標由0開始。

數組名=(v1 v2 ...?v3)(括號表示數組用空格分開)

單獨定義:array[9]=0,無需定義數組,直接執行,除了已經定義的元素,其他為空(類似與字典,或者python的Counter())

讀取數組:${array[1]},${array[*]}(數組所有元素),${array[@]}(數組所有元素),加#讀取個數

表達式

只支持整數運算

算術運算符

expr 5 + 3#有空格val=`expr 5 + 3`#有空格val=$(expr 5 + 3)#有空格val=$[5+2]#無空格n=1
m=2
let val=$n+$m#無空格var=$((運算內容))#var=$((9+8))

關系運算符(邏輯表達式)

test 條件:判斷

-eq:是否相等

-ne:不等

-gt:大于

-lt:小于

-ge:大于等于

-le:小于等于

test "abc"=="xyz"[ "abc" == "xyz" ]#要空格
[ "abc" -eq "xyz" ]#要空格

布爾運算符

邏輯表達式

cmd1 && cmd2:與運算

cmd1 || cmd2:或運算

[邏輯表達式1 -a 邏輯表達式2]

-a:與運算

-o:或運算

!:非運算

返回0是true,false為非零值

字符串運算符

test -z string:是否為空

test -n string:是否為0

test?string1=string2:是否相等

test string1!=string2:是否不等

test string:是否為空

文件測試運算符

-e:文件是否存在

-f:文件是否存在且為普通文件

-d:文件是否存在且為目錄

-r:是否存在且可讀

-w:是否存在且可寫

-x:是否存在且可執行

語句

if-then

if [condition]; then當條件成立時執行內容
fi#結束判斷if [condition1]; then當條件成立1時執行內容
elif [condition2];then當條件成立2時執行內容
else當條件不成立時執行內容
fi

while

不滿足條件,循環結束

while [condition]
do執行內容
done

until

滿足條件,循環結束,與while相反

until [condition]
do執行內容
done

for

for val in arr
do執行內容
done

break

continue

exit

函數

函數可以在Shell腳本中做出一個類似自定義執行命令的東西
函數的設置一定要在程序的最前面
不但可以簡化程序代碼,還可以做成類似“模塊”的東西
函數也是有內部變量的,函數名稱為$0,后續參數為$1,$2...

[function] name()
{return
}#調用
name val1 val2 val3 ... valN#例子
#!/bin/bash# 定義一個函數,用于計算兩個數的和
function add() {local num1=$1local num2=$2local sum=$((num1 + num2))echo "兩數之和為: $sum"
}# 調用函數
add 3 5

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

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

相關文章

抽象工廠模式(AbstractFactoryPattern)

文章目錄 1.抽象工廠模式定義2.UML類圖3.抽象工廠模式具體實現工廠模式實現單一產品族抽象工廠實現多產品族產品類工廠類使用 4.抽象工廠模式優缺點 1.抽象工廠模式定義 提供一個創建一系列相關或相互依賴對象的接口&#xff0c;而無需指定它們具體的類。 工廠方法模式是單一產…

2024電工杯B題食譜評價與優化模型思路代碼論文分析

2024年電工杯數學建模競賽B題論文和代碼已完成&#xff0c;代碼為B題全部問題的代碼&#xff0c;論文包括摘要、問題重述、問題分析、模型假設、符號說明、模型的建立和求解&#xff08;問題1模型的建立和求解、問題2模型的建立和求解、問題3模型的建立和求解&#xff09;、模型…

正點原子[第二期]Linux之ARM(MX6U)裸機篇學習筆記-17講 定時器按鍵消抖

前言&#xff1a; 本文是根據嗶哩嗶哩網站上“正點原子[第二期]Linux之ARM&#xff08;MX6U&#xff09;裸機篇”視頻的學習筆記&#xff0c;在這里會記錄下正點原子 I.MX6ULL 開發板的配套視頻教程所作的實驗和學習筆記內容。本文大量引用了正點原子教學視頻和鏈接中的內容。…

計算機網絡安全控制技術

1.防火墻技術 防火墻技術是近年來維護網絡安全最重要的手段&#xff0c;但是防火墻不是萬能的&#xff0c;需要配合其他安全措施來協同 2.加密技術 目前加密技術主要有兩大類&#xff1a;對稱加密和非對稱加密 3.用戶識別技術 核心是識別網絡者是否是屬于系統的合法用戶 …

【設計模式深度剖析】【1】【結構型】【代理模式】| 玩游戲打怪、升級為例加深理解

&#x1f448;?上一篇:創建型設計模式對比 | 下一篇:裝飾器模式&#x1f449;? 目 錄 代理模式定義英文原話直譯如何理解&#xff1f; 3個角色UML類圖1. 抽象主題&#xff08;Subject&#xff09;角色2. 代理類&#xff1a;代理主題&#xff08;Proxy Subject&#xff0…

UE5 OnlineSubsystem Steam創建會話失敗解決方法

連接上Steam但是創建會話失敗 解決方法 在DefaultEngine.ini中加上bInitServerOnClienttrue,這個其實在官方文檔里用注釋給出了&#xff0c;直接取消注釋就行 刪除項目目錄中的Saved、Internmediate、Binaries目錄 右鍵你的項目.uproject選擇Generate Visual Studio project f…

ASP.Net MVC在控制臺添加視圖時沒有模型類并且不能添加視圖

情況如下&#xff1a; 解決方法&#xff1a; 1.查看vs能否創建asp.net mvc項目&#xff0c;這種情況一般是更換了vs打開老項目 2.點擊跳轉至修改安裝選項界面 3.選擇安裝項即可 如果以上都有&#xff1a; 看看你的視圖文件是否存在在項目中 也不能點擊添加&#xff0c;如果…

探索數值分析的奧秘:掌握NumPy與Pandas基礎

新書上架~&#x1f447;全國包郵奧~ python實用小工具開發教程http://pythontoolsteach.com/3 歡迎關注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目錄 一、NumPy&#xff1a;數值計算的效率提升器 二、Pandas&#xff1a;數據處理與分析的利器 …

Linux文本三劍客之sed

set的定義&#xff1a; sed是一種流編輯器&#xff0c;流編輯器會在編輯器處理數據之前基于預先提供的一組規則來編輯數據流。 sed編輯器可以根據命令來處理數據流中的數據&#xff0c;這些命令要么從命令行中輸入&#xff0c;要么存儲在一個命令文本文件中。 sed的執行過程&a…

Nextjs 動態路由獲取參數

目錄 一、創建page目錄下的路由文件 二、通過useRouter來獲取動態參數 先看官方文檔&#xff1a;Routing: Dynamic Routes | Next.js 使用Nextjs13版本參考官方文檔后實現仍有問題&#xff0c;網上的材料大多和官網一致&#xff0c;經過測試后&#xff0c;我找到了這個解決方…

【日記】今天好困(407 字)

正文 4T 硬盤降價了&#xff0c;好心動。雖然只降了 10 塊錢……. 為什么硬盤這么貴啊&#xff01;哼。 柜面上雜事好多。雖然一天到晚見不到幾個客戶&#xff0c;但雜事就是很多。一個頭兩個大。也不知道從哪兒冒出來的這么多事。 芒果干到了&#xff01;還沒去取&#xff0c;…

sql把一個表的某幾列的數據存到另一個表里

一.如何用slq語句把一個表中的某幾個字段的數據插入到另一個新表中&#xff0c;就要用下面這條slq語句&#xff1a; insert into 表名1(字段1,字段2) select 字段1,字段2 from 表名2 這里有一點值得注意的是這2個字段要一一對應&#xff0c;并且按順序。 二.如果另一個表是…

JAVASE之類和對象(1)

路雖遠&#xff0c;行則將至&#xff1b;事雖難&#xff0c;做則必成。 主頁&#xff1a;趨早——Step 專欄&#xff1a;JAVASE gitte&#xff1a;https://gitee.com/good-thg 引言&#xff1a; 這篇文章我們只介紹前半部分&#xff0c;下一篇文章會介紹剩下的部分。 目錄 一、…

LeetCode 面試150

最近準備面試&#xff0c;我以前不愿意面對的 現在保持一顆本心&#xff0c;就是專注于算法思想&#xff0c;語言基礎的磨煉&#xff1b; 不為速成&#xff0c;不急功近利的想要比賽&#xff0c;或者為了面試。 單純的本心&#xff0c;體驗算法帶來的快樂&#xff0c;是一件非常…

Python操作MySQL數據庫的工具--sqlalchemy

文章目錄 一、pymysql和sqlalchemy的區別二、sqlalchemy的詳細使用1.安裝庫2.核心思想3.整體思路4.sqlalchemy需要連接數據庫5.使用步驟1.手動提前創建數據庫2.使用代碼創建數據表3.用代碼操作數據表3.1 增加數據3.2 查詢數據3.3 刪除數據3.4 修改數據 一、pymysql和sqlalchemy…

2025秋招深度學習基礎面試題(一)

01. 卷積和BN如何融合提升推理速度 Conv和BN的融合:在網絡的推理階段,可以將BN層的運算融合到Conv層中,減少運算量,加速推理。本質上是修改了卷積核的參數,在不增加Conv層計算量的同時,略去了BN層的計算量。def fuse_conv_bn(conv, bn):std = (bn.running_var + bn.eps).…

數據倉庫、數據中臺、大數據平臺之間的關系

數據行業經常會出現數據倉庫、數據中臺、大數據平臺等概念&#xff0c;容易產生疑問&#xff0c;它們中間是相等&#xff0c;還是包含的關系&#xff1f; 數據中臺和數據倉庫概念的關系 數據中臺概念是包含數據倉庫的&#xff0c;數據倉庫是數據中臺中的一部分&#xff0c;包含…

探索Facebook:數字社交的新時代

Facebook&#xff0c;作為全球最大的社交網絡平臺之一&#xff0c;一直在引領著數字社交的發展潮流。隨著科技的不斷進步和社會的不斷變遷&#xff0c;Facebook也在不斷演進和創新&#xff0c;迎接著數字社交的新時代。本文將探索Facebook在數字社交領域的新發展&#xff0c;以…

Behind the Code:Polkadot 如何重塑 Web3 未來

2024 年 5 月 17 日 Polkadot 生態 Behind the Code 第二季第一集 《創造 Web3 的未來》正式上線。第一集深入探討了 Polkadot 和 Web3 技術在解決數字身份、數據所有權和去中心化治理方面的巨大潛力。 &#x1f50d; 查看完整視頻&#xff1a; https://youtu.be/_gP-M5nUidc?…

抖音視頻怎么去水印保存部分源碼|短視頻爬蟲提取收集下載工具

抖音視頻怎么去水印保存部分源碼|短視頻爬蟲提取收集下載工具 抖音視頻去水印保存部分源碼&#xff1a; 通過使用Python中的requests、re和os等庫&#xff0c;可以編寫如下代碼來實現抖音視頻去水印保存的功能。 短視頻爬蟲提取手機下載工具的使用方法&#xff1a; 該工具主…