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í)行說明:
腳本文件本身沒有可執(zhí)行權(quán)限或者腳本首行沒有命令解釋器時使用的方法,我們推薦用bash執(zhí)行。
使用頻率:☆☆☆☆☆
腳本文件具有可執(zhí)行權(quán)限時使用。
使用頻率:☆☆☆☆
使用source或者.點號,加載shell腳本文件內(nèi)容,使shell腳本內(nèi)容環(huán)境和當(dāng)前用戶環(huán)境一致。
使用頻率:☆☆☆ 使用場景:環(huán)境一致性
2.1.2 腳本開發(fā)規(guī)范
腳本命名要有意義,文件后綴是.sh
腳本文件首行是而且必須是腳本解釋器
#!/bin/bash腳本文件解釋器后面要有腳本的基本信息等內(nèi)容
腳本文件中盡量不用中文注釋;
盡量用英文注釋,防止本機(jī)或切換系統(tǒng)環(huán)境后中文亂碼的困擾
常見的注釋信息:腳本名稱、腳本功能描述、腳本版本、腳本作者、聯(lián)系方式等
腳本文件常見執(zhí)行方式:bash 腳本名
腳本內(nèi)容執(zhí)行:從上到下,依次執(zhí)行
代碼書寫優(yōu)秀習(xí)慣;
成對內(nèi)容的一次性寫出來,防止遺漏。
如:()、{}、[]、''、``、""
[]中括號兩端要有空格,書寫時即可留出空格[ ],然后再退格書寫內(nèi)容
流程控制語句一次性書寫完,再添加內(nèi)容
- 通過縮進(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 變量查看和取消
查看變量:
方式一:$變量名 場景:私下里,在命令行/腳本中使用 圖省事
方式二:"$變量名" 場景:私下里,在命令行/腳本中使用 圖省事
方式三:
{變量名} 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} 歲"