Shell學習筆記之基礎部分

Shell基礎:

查看操作系統支持的shell:

[root@rhel9 ansible]# cat /etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash

Shell的基本元素:

  1. 聲明:聲明用哪個命令解釋器來解釋并執行當前腳本文件中的語句,一般寫的解釋器為**#!/bin/bash**

  2. 命令:可執行語言,實現程序的功能

  3. 注釋:說明某些代碼的功能,通過添加注釋提高代碼的可讀性

    1. 單行注釋:

      #echo "hello world"
      
    2. 多行注釋:

      :<<BLOCK
      ....
      BLOCK
      
  4. 賦予rx權限

Shell編程的規范:

  1. 腳本的文件名應見名知意

  2. 文件開頭指定腳本解釋器(#!/bin/bash)

  3. 開頭加版本特權等信息

    #Date :創建日期
    #Author :作者
    #Mail:聯系方式
    #Function :功能
    #version :版本
    
  4. 盡量不使用中文注釋

  5. 多使用內部命令,常用命令如下:

    1. echo
    2. eval
    3. exec
    4. export
    5. read
    6. shift
    7. exit
  6. 代碼縮進(使代碼結構更加清晰)

內部命令:

echo:

echo是用于終端打印的基本命令,默認情況下,echo 在每次調用后會添加一個換行符

[root@kittod ~]# echo hehe
hehe
[root@kittod ~]# echo haha
haha
[root@kittod ~]# echo "Welcome to bash"
Welcome to bash
[root@kittod ~]# echo 'Welcome to bash'
Welcome to bash

上面的方法看起來效果一樣,但是在某些場合會得到不一樣的結果

[root@kittod ~]# echo "the current directory is `pwd`"
the current directory is /root
[root@kittod ~]# echo 'the current directory is `pwd`'
the current directory is `pwd`
[root@kittod ~]# echo "hehe;hehe"
hehe;hehe
[root@kittod ~]# echo hehe;hehe
hehe
-bash: hehe: command not found

image-20230319104632450

設置字體顏色:
echo -e "\e[1;31m this is test \e[0m"設置為紅色        把顏色還原

重置0,黑色30,紅色31,綠色32,黃色33,藍色34,洋紅35,青色36,白色37

image-20230319102704392

eval:

**功能:**當shell程序執行到eval語句時,shell讀入參數args,組合為一個新的命令。

exec:

exec命令能夠在不創建新的子進程的前提下,轉去執行指定的命令,當指定的命令執行完畢后,該進程就終止了。

export:

設置或導出環境變量

[root@kittod ~]# mingzi=hehe
[root@kittod ~]# echo $mingzi
hehe
[root@kittod ~]# bash
[root@kittod ~]# echo $mingzi
[root@kittod ~]# exit
exit
[root@kittod ~]# export mingzi
[root@kittod ~]# bash
[root@kittod ~]# echo $mingzi
hehe

read:

類似于C語言Scanf

read 命令可從標準輸入讀取字符串等信息,傳給shell程序內部定義的變量。
read 是一個重要的 bash 命令,用于從鍵盤或標準輸入讀取文本,我們可以使用 read 命
令以交互形式讀取來自用戶的輸入,不過 read 能做的遠不止這些。

通常我們按下回車鍵表示命令輸入完成,但是很特殊情況下,我們需要基于字符數或者
特定字符來表示命令輸入完成。

-p prompt:設置提示信息
-t timeout:設置輸入等待時間,單位默認為秒

#未等待
read -t 5 -p "Please enter your name:" name
Please enter your name:wgq
[root@rhel9 01]# echo $name
wgq
#等待
Please enter your name:[root@rhel9 01]# echo $name[root@rhel9 01]#

-n 表示限定輸入的字符數。

-s 輸入不回顯

[root@rhel9 01]# read -s var
[root@rhel9 01]# echo $var
wgq

-d 定界符輸入,以什么符號結束輸入

[root@rhel9 01]# read -d "." var
wgqzqj.[root@rhel9 01]#
[root@rhel9 01]# echo $var
wgqzqj
[root@rhel9 01]#

shift:

shift,在程序中每使用一次shift語句,都會使所有的位置參數依次向左移動一個位置,并使位置參數$#減1,直到減到0為止。

exit:

exit,退出shell程序。在exit之后可以有選擇地指定一個數作為返回狀態

執行shell腳本的方式:

交互式執行:

[root@localhost ~]# for filename in `ls /etc`
do
if echo "$filename" | grep "passwd"
then
echo "$filename"
fi
done

作為程序文件執行:

對于一組需要經常重復執行的Shell語句來說,將它們保存在一個文件中來執行。我們通常稱這種包含多個Shell語句的文件為Shell腳本,或者Shell腳本文件。腳本文件是普通的文本文件,可使用任何的文本編輯器查看或修改Shell腳本。

[root@localhost ~]# mkdir /test
[root@localhost ~]# cd /test
[root@localhost test]# vim test1.sh
#!/bin/bash
for filename in `ls /etc`
do
if echo "$filename" | grep "passwd"
then
echo "$filename"
fi
done

執行腳本的方法:

bash ./filename.sh

(產生子進程,再運行,使用當前指定的bash shell去運行)

./filename.sh

(產生子進程,再運行,使用腳本里面指定的shell去運行。使用該種方式執行需要x權限)

source ./filename.sh

(source命令是一個shell內部命令,其功能是讀取指定的shell程
序文件,并且依次執行其中的所有的語句,并沒有創建新的子shell進程,所以腳本里面所有創
建的變量都會保存到當前的shell里面)

.filename.sh

(和source一樣,也是使用當前進程執行)

注意

執行shell腳本時,如果使用1和2這種方式執行會在當前的進程下產生一個新的bash子進程,
所以子進程切換到了/tmp目錄,當腳本結束,子進程也就結束了,所以當前進程的目錄不會發生變化;3和4方式執行時,不會產生新的進程,所以腳本執行結束后當前的目錄會變成 /tmp。

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

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

相關文章

大語言模型與語義搜索;釘釘個人版啟動內測,提供多項AI服務

&#x1f989; AI新聞 &#x1f680; 釘釘個人版啟動內測&#xff0c;提供多項AI服務 摘要&#xff1a;釘釘個人版正式開始內測&#xff0c;面向小團隊、個人用戶、高校大學生等人群。該版本具有AI為核心的功能&#xff0c;包括文生文AI、文生圖AI和角色化對話等。用戶可通過…

【IEEE會議】第二屆IEEE云計算、大數據應用與軟件工程國際學術會議 (CBASE2023)

第二屆IEEE云計算、大數據應用與軟件工程國際學術會議 (CBASE2023&#xff09; 隨著大數據時代的到來&#xff0c;對數據獲取的隨時性和對計算的需求也在逐漸增長。為推動大數據時代的云計算與軟件工程的發展&#xff0c;促進該領域學術交流&#xff0c;在CBASE 2022成功舉辦的…

設計模式——經典單例

0、核心要素 // 構造、析構函數私有化&#xff08;一個進程只允許一個對象存在&#xff09; // 對象私有化、靜態化&#xff08;因為接口靜態函數&#xff09; // 對象調用接口靜態化&#xff08;因為靜態函數脫離了類對象&#xff0c;可以直接調用&#xff09; 一、懶漢 唯…

如何更好的維護自己的電腦?

我的筆記本電腦 我使用的華碩天選3是一款游戲本&#xff0c;搭載了英特爾酷睿i7-12700H處理器&#xff0c;16GB內存&#xff0c;512GB固態硬盤和NVIDIA GeForce RTX 3050顯卡。屏幕尺寸為15.6英寸&#xff0c;分辨率為2560x1440。對于日常使用和工作學習娛樂都能滿足要求。 日常…

基于docker搭建pytest自動化測試環境(docker+pytest+jenkins+allure)

pytest搭建自動化測試環境&#xff08;dockerpytestjenkinsallure&#xff09; 這里我以ubuntu18為例 如果有docker環境&#xff0c;可以直接拉取我打包好的鏡像docker pull ziyigun/jenkins:v1.0 1 搭建Docker 1.1 安裝docker # 配置docker安裝環境 sudo apt-get install ap…

潤和軟件HopeStage操作系統正式上架阿里云、華為云、騰訊云商店

近日&#xff0c;潤和軟件HopeStage操作系統正式上架阿里云、華為云、騰訊云商店。 隨著科技的發展&#xff0c;云服務成為現代社會信息和資訊的交換、共享、存儲、檢索、應用等重要方式。阿里云、華為云、騰訊云作為我國云服務市場三巨頭&#xff0c;其云商店產品全面覆蓋云、…

Nvidia Jetson 編解碼開發(1)介紹

前言 由于項目需要,需要開發Jetson平臺的硬件編解碼; 優化CPU帶寬,后續主要以介紹硬件編解碼為主 1.Jetson各平臺編解碼性能說明 如下是拿了Jetson nano/tx2/Xavier等幾個平臺做對比; 這里說明的編解碼性能主要是對硬件來說的 2. 編解碼實現說明 2.1 軟件編解碼 優點:…

Idea中隱藏指定文件或指定類型文件

Setting ->Editor ->Code Style->File Types → Ignored Files and Folders輸入要隱藏的文件名&#xff0c;支持*號通配符回車確認添加

Windows權限維持—自啟動映像劫持粘滯鍵輔助屏保后門WinLogon

Windows權限維持—自啟動&映像劫持&粘滯鍵&輔助屏保后門&WinLogon 1. 前置2. 自啟動2.1. 路徑加載2.1.1. 放置文件2.1.2. 重啟主機 2.2. 服務加載2.2.1. 創建服務2.2.2. 查看服務2.2.3. 重啟主機 2.3. 注冊表加載2.3.1. 添加啟動項2.3.2. 查看注冊表2.3.3. 重啟…

YOLOv5基礎知識入門(7)— NMS(非極大值抑制)原理解析

前言&#xff1a;Hello大家好&#xff0c;我是小哥談。NMS是指非極大值抑制&#xff08;non maximum suppression&#xff09;&#xff0c;它是一種常用于物體檢測任務的算法。在物體檢測中&#xff0c;通常會有多個預測框&#xff08;bounding box&#xff09;被提議出來&…

機器學習深度學習——transformer(機器翻譯的再實現)

&#x1f468;?&#x1f393;作者簡介&#xff1a;一位即將上大四&#xff0c;正專攻機器學習的保研er &#x1f30c;上期文章&#xff1a;機器學習&&深度學習——自注意力和位置編碼&#xff08;數學推導代碼實現&#xff09; &#x1f4da;訂閱專欄&#xff1a;機器…

【論文閱讀】 Model Sparsity Can Simplify Machine Unlearning

Model Sparsity Can Simplify Machine Unlearning 背景主要內容Contribution Ⅰ&#xff1a;對Machine Unlearning的一個全面的理解Contribution Ⅱ&#xff1a;說明model sparsity對Machine Unlearning的好處Pruning方法的選擇sparse-aware的unlearning framework Experiments…

JetBrains IDE遠程開發功能可供GitHub用戶使用

JetBrains與GitHub去年已達成合作&#xff0c;提供GitHub Codespaces 與 JetBrains Gateway 之間的集成。 GitHub Codespaces允許用戶創建安全、可配置、專屬的云端開發環境&#xff0c;此集成意味著您可以通過JetBrains Gateway使用在 GitHub Codespaces 中運行喜歡的IDE進行…

VScode搭建Opencv(C++開發環境)

VScode配置Opencv 一、 軟件版本二 、下載軟件2.1 MinGw下載2.2 Cmake下載2.3 Opencv下載 三、編譯3.1 cmake-gui3.2 make3.3 install 四、 VScode配置4.1 launch.json4.2 c_cpp_properties.json4.3 tasks.json 五、測試 一、 軟件版本 cmake :cmake-3.27.2-windows-x86_64 Mi…

JAVA基礎知識(一)——Java語言描述、變量和運算符

TOC(Java語言描述、變量和運算符) 一、JAVA語言描述 1.1 java語言描述 JDK、JRE、jVM三者之間的關系&#xff0c;以及JDK、JRE包含的主要結構有哪些&#xff1f; JDKJre java的開發工具&#xff08;javac.exe java.exe javadoc.exe&#xff09; jre jvmjava的核心類庫 為什…

C++策略模式

1 簡介&#xff1a; 策略模式是一種行為型設計模式&#xff0c;用于在運行時根據不同的情況選擇不同的算法或行為。它將算法封裝成一個個具體的策略類&#xff0c;并使這些策略類可以相互替換&#xff0c;以達到動態改變對象的行為的目的。 2 實現步驟&#xff1a; 以下是使用…

【JavaEE基礎學習打卡03】Java EE 平臺有哪些內容?

目錄 前言一、Java EE平臺說明二、Java EE平臺容器及組件1.平臺容器2.平臺組件 三、JavaEE平臺API服務1.API服務概覽2.平臺API 總結 前言 &#x1f4dc; 本系列教程適用于Java Web初學者、愛好者&#xff0c;小白白。我們的天賦并不高&#xff0c;可貴在努力&#xff0c;堅持不…

使用CLI添加磁盤到VM

登錄 https://portal.azure.com/#home&#xff0c;點擊右上角的控制臺圖標 &#xff0c;打開CLI 在控制臺中輸入如下指令&#xff0c;在NetworkWatcherRG創建一個名字為TEST的虛擬機&#xff0c;使用的鏡像是Win2019datacenter&#xff0c;username是aaa,password是1234567890A…

mysql的快速復習 和一些思考記錄

數據庫設計 第一范式&#xff1a;有主鍵&#xff0c;具有原子性&#xff0c;字段不可分割 數據庫表中不能出現重復記錄&#xff0c;每個字段是原子性的不能再分 關于第一范式&#xff0c;每一行必須唯一&#xff0c;也就是每個表必須有主鍵。 每一列不可再分&#xff01;&#…

Sui主網升級至V1.7.1版本

Sui主網現已升級至V1.7.1版本&#xff0c;此升級包含了多項修復和優化。升級要點如下所示&#xff1a; #12915 協議版本提升至20版本。 在Sui框架中新增Kiosk Extensions API和一個新的sui::kiosk_extension模塊。 您可以使用該API構建自定義的Kiosk應用程序&#xff0c;以…