Linux中的shell腳本

什么是shell腳本

  • shell腳本是文本的一種
  • shell腳本是可以運行的文本
  • shell腳本的內容是由邏輯和數據組成
  • shell腳本是解釋型語言

用file命令可以查看文件是否是一個腳本文件

file filename

腳本書寫規范

注釋

單行注釋

使用#號來進行單行注釋

多行注釋

使用

: "

注釋內容

注釋內容

注釋內容

"

注意:冒號后面有空格

注意

在.vimrc里面注釋行時
用的是"

vim用于書寫腳本的設定

ts:tab鍵的大小

sw:縮進大小

ai:自動縮進

et:將tab鍵補齊的大空格拆分成小空格

注:當你規定了tab鍵的大小時,再規定sw的縮進大小將不生效

用vim編輯這個配置文件?

vim ~/.vimrc

自動添加新創建的特定文件的預定內容

也是編寫這個配置文件

vim ~/.vimrc

如下代碼塊

?第一行的意思是當新創建一個以.sh或.script時自動執行下面我們自己寫的一個SHELLTITLE函數

其中函數中寫的是

在第1行(linux中行數從0開始計算,所以代碼中寫的是0而不是1)添加上“hahahahahahahahaha”這行內容

在第2行添加上日期,其格式為年/月/日

autocmd BufNewFile *.sh,*.script call SHELLTITLE()
func SHELLTITLE()call append(0,"hahahahahahahahaha")call append(1,"# Date:             ".strftime("%Y/%m/%d"))
endfunc

檢驗效果

以.sh結尾的新文件會自動添加

以.script結尾的新文件

也會自動添加

如果不是以.sh或.script結尾的新文件
也是不會自動添加的

腳本執行方法

創建了一個新腳本文件

里面編寫的內容

注:沒有可執行權限

在沒有可執行權限時

. 腳本

. 腳本

source 腳本

source 腳本

sh 腳本

sh 腳本

?

當有可執行權限時

./腳本

./腳本

?

直接執行腳本的絕對路徑

腳本的絕對路徑

腳本調試

寫一個手殘腳本

其中cat處本應該是cal

運行手殘腳本

會發現被卡住了

假裝排查代碼眼殘也沒發現問題哈哈哈哈

那么我們就可以用sh -x 來執行腳本

調試腳本

sh -x 腳本

這次可以清楚的看到卡在了哪一步?

這樣對我們的腳本排錯有很大的作用

然后我們改一下我們的腳本

腳本在指定環境中運行

.? ? ? ? 腳本

source????????腳本

直接執行腳本的絕對路徑 會直接新開bash來執行腳本

exit值

查看退出值

echo $?

退出值0為正常退出,非0值都是錯誤退出,不正常。

修改退出值

exit 你想要的退出值

打印文本

cat&tac

正向打印&反向打印

seq

注:只能打數字

seq 1 3
#打印1到3
seq 2 2 10
#打印2到10 步長為2
seq 1 2 10
#打印1到10 步長為2

echo

echo 123
echo "hello world"echo -n "hello world" //不換行打印echo -e "hello\tworld" //解析轉義字符

printf

printf "hello vb" //不換行打印
printf "hello vb\n" //換行打印printf "3%%" //打印百分號printf "%0.1f" "3.141592653579"    //保留一位小數
printf "%0.2f" "3.141592653579"    //保留兩位小數
printf "%0.3f" "3.141592653579"    //保留三位小數
printf "%.3f"  "3.141592653579"    //保留三位小數
printf "%.2f"  "3.141592653579"    //保留兩位小數
printf "%.1f"  "3.141592653579"    //保留一位小數
printf "%.0f"  "3.141592653579"    //取整數

注:保留幾位小數都是會四舍五入的

uniq

對于命令輸出的字符冗余部分進行處理

注:只對有排序后的文件有用

vb里有實驗素材,就是這些無序的數字

-d #顯示重復的行
sort  -n vb  | uniq   -d
-u #顯示唯一的行
sort  -n vb  | uniq   -u

-c #合并重復并統計重復個數
sort  -n vb  | uniq   -c

cut

用戶對字符的截取

生成實驗文件,我是從/etc/passwd中復制出來的

cut -d : -f 1 ./test

?指定分割符為 : 指定顯示的列為第1列 對當前目錄下的test文件作用

?指定分割符為 : 指定顯示的列為第1列到第3列?對當前目錄下的test文件作用?

cut -d : -f 1-3 ./test

?指定分割符為 : 指定顯示的列為第3列到最后一列 對當前目錄下的test文件作用

cut -d : -f 3- ./test

?指定分割符為 : 指定顯示的列為第1列和第3列?對當前目錄下的test文件作用

cut -d : -f 1,3 ./test

第一個字符到第四個字符

cut -c 1-4 ./test

第一個字符和第四個字符

cut -c 1,4 ./test

首字符到第八個字符

cut -c -8 ./test

第八個字符到末尾字符

cut -c 8- ./test

xargs

xargs 命令作用是將標準輸入數據轉換成命令行參數,能夠處理管道或者標準輸入并將其轉換成特定命令的命令參數

原本echo的輸出通過管道給touch是不能進行生成文件的操作的

所以我們需要用xargs來承接給touch(等那些不能直接接返回輸出進行操作的命令)命令

echo /mnt/vb{1..3} | xargs touch

多行輸入單行輸出

xargs < ./vb

?指定每行輸出個數

xargs -n 3  < ./vb

-n 3就是指定每行輸出個數為3個?

指定分隔符

echo "vb:vb:vb" | xargs -d :

指定的是:,輸出時將刪除分隔符再輸出?

echo "aaa:abc:cba:bba" | xargs -d a

同樣如果用了字符a來進行分割的話,可以看到下方效果顯示,將所有的字符a刪去空位符替代并輸出

用字符代替接收值

 ls /mnt/* | xargs -I word rm -fr  word

轉義

在shell中有很多本身有特殊功能的字符,比如空格井號等等
如果在給變量賦值或執行命令使用時我們只想使用這些符號本身那么就需要用到轉義或引用
在shell中反斜杠表示轉義,每個反斜杠只能轉義一個字符
在shell中單引號表示強引用,我們可以把它看作批量轉義,在單引號內的所有字符被視為字符本身
在shel中雙引號表示弱引用,其和單引號的區別在于不能引用(\!$)

單個轉義和多個轉義

單個轉義

可以用\

echo #helloworldecho \#helloworld

?

當我們需要轉義一串字符中含有空格斷開的一個井號時

我們需要用到多個轉義

"XXXXXXXXX"?

注:要想打出\,則需要用'\',而不是"\"

同樣的$,需要'$'才能轉義,而"$"會被注釋

變量

如果沒加local參數

環境級別變量只在當前運行的shell中生效,shell關閉變量被釋放

用戶級變量只有登錄系統的指定用戶,此變量才生效

系統級變量是系統中的永久設定,所有用戶都可以使用,系統變量通常被保存到/etc/profile中

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

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

相關文章

PHP與MYSQL結合中中的一些常用函數,HTTP協議定義,PHP進行文件編程,會話技術

MYSQL&#xff1a; 查詢函數: 執行查詢語句: 1.mysql_query("SQL語法"); 凡是執行操作希望拿到數據庫返回的數據進行展示的(結果返回: 數據結果); 2.執行結果的處理:成功為結果集&#xff0c;失敗為false; 成功返回結果:SQL指令沒有錯誤&#xff0c;但是查詢結果…

數學分析——一致性(均勻性)和收斂

目錄 1. 連續函數 1.1 連續函數的定義 1.2 連續函數的性質 1.2.1 性質一 1.2.2 性質二 1.2.3 性質三 1.2.4 性質四 2. 一致連續函數 2.1 一致連續函數的定義 2.2 一致連續性定理(小間距定理)(一致連續函數的另一種定義) 2.3 一致連續性判定法 2.4 連…

湖北理元理律師事務所:企業債務優化的科學路徑與人文關懷

湖北理元理律師事務所&#xff1a;企業債務優化的科學路徑與人文關懷 在中小企業經營壓力增大的背景下&#xff0c;如何平衡債務清償與員工生計成為關鍵課題。湖北理元理律師事務所聯合計劃集團公司&#xff0c;為服務企業設計了一套兼顧法律合規性與民生保障的債務解決方案&a…

樹莓派安裝openwrt搭建軟路由(ImmortalWrt固件方案)

&#x1f923;&#x1f449;我這里準備了兩個版本的openwrt安裝方案給大家參考使用&#xff0c;分別是原版的OpenWrt固件以及在原版基礎上進行改進的ImmortalWrt固件。推薦使用ImmortalWrt固件&#xff0c;當然如果想直接在原版上進行開發也可以&#xff0c;看個人選擇。 &…

一鍵凈化Excel數據:高性能Python腳本實現多核并行清理

摘要 本文分享兩個基于Python的Excel數據凈化腳本&#xff0c;通過多進程并行技術清除工作表內不可見字符、批注、單元格樣式等冗余內容&#xff0c;利用OpenPyXL實現底層操作&#xff0c;結合tqdm進度條和進程級任務分配&#xff0c;可快速處理百萬級單元格數據。適用于數據分…

【Netty】EventLoopGroup

在Netty的ServerBootstrap中設置兩個EventLoopGroup的作用是將網絡操作的兩個關鍵階段分離到不同的線程組中處理&#xff0c;從而優化性能并簡化并發控制。具體來說&#xff1a; 1. 兩個EventLoopGroup的角色 第一個EventLoopGroup&#xff08;通常稱為bossGroup&#xff09;&…

【前端】Vue中使用CKeditor作為富文本編輯器

官網https://ckeditor.com/ 此處記錄一下我在使用的時候具體初始化的代碼。 <template><div><textarea :id"id"></textarea></div> </template><script> export default {name: CkEditor,data: function () {return {id:…

前端面經 websocket

應用層協議&#xff0c;實現一個TCP連接上的全雙工通信&#xff0c;實時通訊 之前的實時WEB 實現輪詢 增加輪詢頻率 ws wss 明文版本 和 密文版本 特點 # 1 頭部小 2 更注重實時性

【筆記】suna部署之獲取 Supabase API key 和 project URL

#工作記錄 Supabase | The Open Source Firebase Alternative 一、注冊與登錄 方式一&#xff1a;GitHub 授權登錄 在登錄頁面選擇 “繼續使用 GitHub” &#xff0c;跳轉到 GitHub 授權頁面&#xff08;如圖 5 所示&#xff09;。確認 “Supabase 的想要訪問您的 [賬戶名] 帳…

爬蟲工具鏈的詳細分類解析

以下是針對爬蟲工具鏈的詳細分類解析&#xff0c;涵蓋靜態頁面、動態渲染和框架開發三大場景的技術選型與核心特性&#xff1a; &#x1f9e9; 一、靜態頁面抓取&#xff08;HTML結構固定&#xff09; 工具組合&#xff1a;Requests BeautifulSoup 適用場景&#xff1a;目標數…

STM32F407寄存器操作(ADC非連續掃描模式)

1.前言 書接上回&#xff0c;在看手冊的時候我突然發現手冊上還描述了另一種ADC掃描模式&#xff0c;即非連續掃描模式&#xff0c;想著連續掃描模式都已經探索過了&#xff0c;那就順手把非非連續模式研究一下吧。 2.理論 我們先看看手冊&#xff0c;這里我就以規則通道舉例…

spring切面

概念 兩個特點&#xff1a; IOC控制反轉AOP主要用來處理公共的代碼 例如一個案例就是添加用戶&#xff0c;重復的代碼包含了記錄日志、事務提交和事務回滾等&#xff0c;都是重復的&#xff0c;為了簡單&#xff0c;交給AOP來做。 即將復雜的需求分解出不同方面&#xff0c…

[Python] Python中的多重繼承

文章目錄 Lora中的例子 Lora中的例子 https://github.com/michaelnny/QLoRA-LLM/blob/main/qlora_llm/models/lora.py#L211C1-L243C10如果繼承兩個父類&#xff0c;并且父類的__init__參數不一樣&#xff0c;則可以顯式的調用父類init&#xff1b;如果用super().__init__()則需…

rsync服務的搭建

目錄 一、rsync介紹 rsync的安裝 二、rsync的語法 三、rsync命令使用 1. 本機同步 2. 遠程同步 四、rsync作為服務使用 1、嘗試啟動rsync程序 2、rsync的配置文件介紹 注意事項&#xff1a; 3. rsyncinotify實時同步 3.依賴服務托管xinetd&#xff08;CentOS 6中rs…

【C/C++】面試基礎題目收集

C 軟件開發面試中常見的刷題題目通常可分為以下幾大類&#xff1a;數據結構與算法、系統編程、面向對象設計、C 語言特性、并發編程等。 &#x1f9e0; 一、數據結構與算法&#xff08;力扣/牛客經典題&#xff09; 掌握 STL 和底層結構實現能力&#xff1a; &#x1f4cc; 數…

將手機網絡經USB數據線和本地局域網共享給華為AP6050DN無線接入點

引言 由于最近裝畢的新家所在的小區未能及時通寬帶,于是家中各類無線設備如何上網就成了首要要解決的問題。 鑒于家中要聯網的設備多、類型雜、支持頻段也不一,總是開手機熱點不是回事兒,于是就想著把手機網絡引至華為AP6050DN無線接入點中,讓家中所有的無線設備都能快速高…

【數據結構】圖論核心算法解析:深度優先搜索(DFS)的縱深遍歷與生成樹實戰指南?

深度優先搜索 導讀&#xff1a;從廣度到深度&#xff0c;探索圖的遍歷奧秘一、深度優先搜索二、算法思路三、算法邏輯四、算法評價五、深度優先生成樹六、有向圖與無向圖結語&#xff1a;深潛與回溯&#xff0c;揭開圖論世界的另一面 導讀&#xff1a;從廣度到深度&#xff0c;…

Flink CEP實踐總結:使用方法、常見報錯、優化與難點應對

Flink CEP實踐總結&#xff1a;使用方法、常見報錯、優化與難點應對 隨著實時數據分析需求的提升&#xff0c;Flink CEP&#xff08;Complex Event Processing&#xff0c;復雜事件處理&#xff09;成為事件流檢測中的利器。本文結合實際項目經驗&#xff0c;總結Flink CEP的基…

Python數據類型詳解:從字符串到布爾值,一網打盡

Python是現代編程語言中非常流行的一種&#xff0c;它的語法簡潔、易懂&#xff0c;非常適合初學者。而在Python編程中&#xff0c;“數據類型”是最基礎也是最重要的概念。理解這個概念&#xff0c;將為你之后的編程打下堅實的基礎。 1. 什么是數據類型&#xff1f; 在Pytho…

python打卡day42

Grad-CAM與Hook函數 知識點回顧 回調函數lambda函數hook函數的模塊鉤子和張量鉤子Grad-CAM的示例 在深度學習中&#xff0c;我們經常需要查看或修改模型中間層的輸出或梯度&#xff0c;但標準的前向傳播和反向傳播過程通常是一個黑盒&#xff0c;很難直接訪問中間層的信息。PyT…