目錄
- 1.本地變量
- 2.變量定義
- 3.取出變量值
- 4.特殊變量
- 5.特殊狀態變量
- 6.shell內置的變量命令
- 1.echo
- 2.eval
- 3.exec
- 7.截取字符串
- 8.特殊shell擴展變量處理
- 1.語法
- 2.應用場景
1.本地變量
- 定義Shell變量,變量名不需要加
$
- 本地變量只在?戶當前shell?存期中有效
2.變量定義
- 變量名要求:字?、數字、下劃線組成、可以是字?或是下劃線開頭
- 變量名嚴格區分??寫
3.取出變量值
- 單引號:所?即所得,強引?
- 雙引號:輸出引號?所有內容,識別特殊符號,弱引?
- ?引號:連續的符號可以不加引號,有空格則有歧義,最好使?雙引號
- 反引號:引?命令執?結果,等于
$()
?法
4.特殊變量
-
shell的特殊變量,?在如腳本,函數傳遞參數使?
-
有如下特殊的,位置參數變量
變量 作用 $0
獲取shell腳本文件名,以及腳本路徑 $n
獲取shell腳本的第n個參數,n在1~9之間,大于9則需要些 {}
,如{$10}
$#
獲取執行的shell腳本后面的參數總個數 $*
獲取shell腳本所有參數,不加引號等同于 $@
作用,加上引號"$*"作用是接收所有參數為單個字符串$@
不加引號,效果同上,加引號,是接收所有參數為獨立字符串
5.特殊狀態變量
-
查找方式:
man bash
,搜索Special Parameters
變量 作用 $?
上次命令執行狀態返回值,0正確,非0失敗 $$
當前shell腳本的進程號 $!
上一次后臺進程的PID $_
獲取上次命令的最后一個參數
6.shell內置的變量命令
1.echo
- 參數:
-n
:不換行輸出內容-e
:解釋轉義字符\n
:換行\r
:回車\t
:tab\b
:退格\v
:縱向制表符
2.eval
- 功能:執行多個命令
- 示例:
eval ls; cd ~
3.exec
- 功能:不創建子進程,執行后續命令,
exec
執行后,自動exit
7.截取字符串
-
語法:
語法 作用 #
從開頭刪除匹配最短 ##
從開頭刪除匹配最長 %
從結尾刪除匹配最短 %%
從結尾刪除匹配最長 #
指定字符內容截取 a*c
匹配開頭為a,中間任意個字符,結尾為c的字符串 ${變量}
返回變量值 ${#變量}
返回變量長度,字符長度 ${變量:start}
返回變量offset數值之后的字符 ${變量:start:length}
提取offset之后的length限制的字符 ${變量#word}
從變量開頭,刪除最短匹配的word子串 ${變量##word}
從變量開頭,刪除最長匹配的word ${變量%word}
從變量結尾,刪除最短匹配的word子串 ${變量%%word}
從變量結尾,刪除最長匹配的word子串 ${變量/pattern/string}
用string代替第一個匹配的pattern ${變量//pattern/string}
用string代替所有的pattern -
操作實例:刪除文件名
# 通過?串的替換?式 snowk@SnowKYP# f=stu_102999_1_finished.jpg# 變量的?串功能,去掉后綴 snowk@SnowKYP# echo ${f//_finished/} stu_102999_1.jpg# 利?變量的反引?替換?件名 snowk@SnowKYP# mv $f `echo ${f//_finished/}`# 剩下的?件,利?循環操作 # 找出剩下所有需要替換的jpg?件 snowk@SnowKYP# ls *fin*.jpg stu_102999_2_finished.jpg stu_102999_3_finished.jpg stu_102999_4_finished.jpg stu_102999_5_finished.jpg# 寫shell循環代碼,循環操作 # 去掉所有jpg?件的_finished后綴 snowk@SnowKYP# for file in `ls *fin*.jpg`;do mv $file `echo ${file//_finished/}`;donesnowk@SnowKYP# ls *.jpg stu_102999_1.jpg stu_102999_2.jpg stu_102999_3.jpg stu_102999_4.jpg stu_102999_5.jpg
8.特殊shell擴展變量處理
1.語法
- 功能:這四個擴展變量,都屬于對變量的值進行判斷、處理
- 語法:
parameter,參數,范圍
${parameter:-word}
:如果parameter
變量值為空,返回word
字符串${parameter:=word}
:如果parameter
變量值為空,則word
替代變量值,且返回其值${parameter:?word}
:如果parameter
變量值為空,word
當作stderr
輸出,否則輸出變量值- ?于設置變量為空導致錯誤時,返回的錯誤信息
${parameter:+word}
:如果parameter
變量值為空,什么都不做,否則word
返回
2.應用場景
- 數據備份,刪除過期數據的腳本
# 原腳本命令,有bug,有歧義 find ${file_path} -name '*.tar.gz' -type f -mtime +7 | xargs rm -f# 修正后的腳本命令 # 如果有bug起義,就在當前目錄搜索并執行刪除 find ${file_path:=/tmp} -name '*.tar.gz' -type f -mtime +7 | xargs rm -f