「 SHELL 」基礎(chǔ)知識

SHELL 基礎(chǔ)知識

2.1 shell 腳本

我們在上面簡單介紹了一下什么是shell腳本,現(xiàn)在我們來進(jìn)一步的來介紹shell腳本的要求/格式/規(guī)范等內(nèi)容

2.1.1 創(chuàng)建腳本

腳本創(chuàng)建工具

創(chuàng)建腳本常見的編輯器是 vi/vim

腳本名稱

shell 腳本的命名簡單來說就是要有意義,方便我們通過腳本名,來知道這個文件是干什么用的

腳本內(nèi)容

各種可以執(zhí)行的命令

注釋內(nèi)容

單行注釋:

  • 除了首行的#不是注釋外,其他所有行內(nèi)容,只要首個字符是#,那么就表示該行是注釋
#!/bin/bash 
echo '1' 
# echo '2' # 這一行就表示注釋 
echo '3'

多行注釋:

  • 多行注釋有兩種方法::<<! ... ! 和 :<<字符 ... 字符
#!/bin/bash 
echo '1' 
:<<! echo '2' 
echo '3' 
echo '4' 
!
echo '5'

2.1.2 腳本執(zhí)行

shell 執(zhí)行的方法

Shell腳本的執(zhí)行通??梢圆捎靡韵聨追N方式

bash /path/to/script-name 或 /bin/bash /path/to/script-name (**強(qiáng)烈推薦使用**)

/path/to/script-name 或 ./script-name (當(dāng)前路徑下執(zhí)行腳本)

source script-name 或 . script-name (注意“.“點號)

執(zhí)行說明:

  1. 腳本文件本身沒有可執(zhí)行權(quán)限或者腳本首行沒有命令解釋器時使用的方法,我們推薦用bash執(zhí)行。

    使用頻率:☆☆☆☆☆

  2. 腳本文件具有可執(zhí)行權(quán)限時使用。

    使用頻率:☆☆☆☆

  3. 使用source或者.點號,加載shell腳本文件內(nèi)容,使shell腳本內(nèi)容環(huán)境和當(dāng)前用戶環(huán)境一致。

    使用頻率:☆☆☆ 使用場景:環(huán)境一致性

2.1.2 腳本開發(fā)規(guī)范

  1. 腳本命名要有意義,文件后綴是.sh

  2. 腳本文件首行是而且必須是腳本解釋器

    #!/bin/bash

  3. 腳本文件解釋器后面要有腳本的基本信息等內(nèi)容

    腳本文件中盡量不用中文注釋;

    盡量用英文注釋,防止本機(jī)或切換系統(tǒng)環(huán)境后中文亂碼的困擾

    常見的注釋信息:腳本名稱、腳本功能描述、腳本版本、腳本作者、聯(lián)系方式等

  4. 腳本文件常見執(zhí)行方式:bash 腳本名

  5. 腳本內(nèi)容執(zhí)行:從上到下,依次執(zhí)行

  6. 代碼書寫優(yōu)秀習(xí)慣;

  • 成對內(nèi)容的一次性寫出來,防止遺漏。

    如:()、{}、[]、''、``、""

  • []中括號兩端要有空格,書寫時即可留出空格[ ],然后再退格書寫內(nèi)容

  • 流程控制語句一次性書寫完,再添加內(nèi)容

  1. 通過縮進(jìn)讓代碼易讀;(即該有空格的地方就要有空格)

2.2 變量

變量的學(xué)習(xí)我們主要從四個方面來學(xué)習(xí):

  • 變量的定義和分類
  • 本地變量

  • 全局變量

  • shell內(nèi)置變量

2.2.1 什么是變量

變量是什么?

變量包括**兩部分:**

      變量名     不變的 

      變量值     變化的 

我們一般所說的變量指的是:變量名 

shell 中的變量分為三大類:

本地變量、全局變量、shell內(nèi)置變量

2.2.2 本地變量

本地變量是什么?

本地變量就是:在當(dāng)前系統(tǒng)的某個環(huán)境下才能生效的變量,作用范圍小。

本地變量包含兩種:普通變量和命令變量

普通變量

普通變量的定義方式有如下三種,接下來我們就分別說一下這三種方式:

方式一:變量名=變量值 

重點:變量值必須是一個整體,中間沒有特殊字符 

方式二:變量名='變量值' 

重點:我看到的內(nèi)容,我就輸出什么內(nèi)容 

方式三:變量名="變量值" 

重點:如果變量值范圍內(nèi),有可以解析的變量A,那么首先解析變量A,將A的結(jié)果和其他內(nèi)容組合成一個整體,重 新賦值給變量B 

習(xí)慣:

數(shù)字不加引號,其他默認(rèn)加雙引號 

命令變量(熟練)

命令變量有兩種定義方式,接下來我們就來介紹一下這兩種方式
定義方式一:

變量名=`命令`

注意:` 是反引號

定義方式二:
變量名=$(命令)

執(zhí)行流程:

1、執(zhí)行`或者$()范圍內(nèi)的命令

2、將命令執(zhí)行后的結(jié)果,賦值給新的變量名A

2.2.3 全局變量

全局變量是什么

全局變量就是:在當(dāng)前系統(tǒng)的所有環(huán)境下都能生效的變量。

查看全局變量命令

可以通過命令查看環(huán)境變量 env 只顯示全局變量

定義全局變量

方法一:變量=值 export 變量

方法二:(最常用) export 變量=值

2.2.4 變量查看和取消

查看變量:

方式一:$變量名 場景:私下里,在命令行/腳本中使用 圖省事

方式二:"$變量名" 場景:私下里,在命令行/腳本中使用 圖省事

方式三:{變量名} 場景:echo " dsa dsafsa dsafsa{變量名} f " 使用頻率較高

方式四:"${變量名}" 場景:標(biāo)準(zhǔn)使用方式

取消變量

unset 變量名

2.2.5 shell內(nèi)置變量

我們之前學(xué)習(xí)的本地變量,全局變量都是需要通過定義,然后才能實現(xiàn)相應(yīng)功能的,那么有沒有一些變量我們可以直 接拿過來使用實現(xiàn)某種具體的功能呢?有,這就是shell內(nèi)置變量

和腳本文件有關(guān)

符號 意義
$0 獲取當(dāng)前執(zhí)行的shell腳本文件名
$n 獲取當(dāng)前執(zhí)行的shell腳本的第n個參數(shù)值,n=1..9,當(dāng)n為0時表示腳本的文件名,如果n大于9就要用大 括號括起來${10}
$# 獲取當(dāng)前shell命令行中參數(shù)的總個數(shù)
$? 獲取執(zhí)行上一個指令的返回值(0為成功,非0為失敗)

重點內(nèi)置變量演示效果

$0 ---> 獲取腳本的名稱

#!/bin/bash 

# 獲取腳本的名稱 
echo "我腳本的名稱是: file.sh" 
echo "我腳本的名稱是:$0"

$# ---> 獲取當(dāng)前腳本傳入?yún)?shù)的數(shù)量

$n ---> 獲取當(dāng)前腳本傳入的第n個位置的參數(shù)

#!/bin/bash 

# 獲取當(dāng)前腳本傳入的參數(shù)數(shù)量 
echo "當(dāng)前腳本傳入的參數(shù)數(shù)量是: $#" 

# 獲取指定位置的參數(shù) 
echo "第一個位置的參數(shù)是: $1" 
echo "第二個位置的參數(shù)是: $2" 
echo "第三個位置的參數(shù)是: $3" 
echo "第四個位置的參數(shù)是: $4"

$? ---> 獲取文件執(zhí)行或者命令執(zhí)行的返回狀態(tài)值

# bash nihao 
bash: nihao: No such file or directory 
# echo $? 
127 
# ls 
file1.sh num.sh test.sh weizhi.sh 
# echo $? 
0

字符串精確截取

格式:${變量名:起始位置:截取長度}

示例:

${file:0:5} 從第1個字符開始,截取5個字符

${file::5} 從第1個字符開始,截取5個字符

${file:5:5} 從第6個字符開始,截取5個字符

${file:5} 從第6個字符開始,截取后面所有的字符

${file:0-5} 從倒數(shù)第5個字符開始,截取后面所有的字符

${file:0-6:3} 從倒數(shù)第6個字符開始,截取之后的3個字符
示例

#/bin/bash
# 字符串截取
a=$1
echo "${a:0:5}"
echo "${a::5}"
echo "${a:5:5}"
echo "${a:5}"
echo "${a:0-5}"
echo "${a:0-6:5}"

默認(rèn)值相關(guān)

場景一:
    變量a如果有內(nèi)容,那么就輸出a的變量值 
    變量a如果沒有內(nèi)容,那么就輸出默認(rèn)的內(nèi)容 

格式:
    ${變量名:-默認(rèn)值} 

套餐示例: 

    如果我輸入的參數(shù)為空,那么輸出內(nèi)容是 "您選擇的套餐是: 套餐 1" 

    如果我輸入的參數(shù)為n,那么輸出內(nèi)容是 "您選擇的套餐是: 套餐 n"
#!/bin/bash 
# 套餐選擇演示 
a="$1" 
echo "您選擇的套餐是: 套餐 ${a:-1}"
場景二:
    無論變量a是否有內(nèi)容,都輸出默認(rèn)值 

格式:
    ${變量名+默認(rèn)值} 

場景示例: 
    不管我說國家法定結(jié)婚年齡是 多少歲,都輸出 國家法定結(jié)婚年齡(男性)是 22 歲
#!/bin/bash 
# 默認(rèn)值演示示例二 
a="$1" 
echo "國家法定結(jié)婚年齡(男性)是 ${a+22} 歲"
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容