os. listdir的括號內參數可以填什麼_shell程式設計進階01 引數擴充套件
開始寫shell程式設計進階教程了,如果你還沒學過基礎篇,請點下面相應連結。
shell程式設計基礎01 Hello World
shell程式設計基礎02 變數
shell基礎教程03 運算
shell基礎教程04 陣列
shell基礎教程05 控制語句
shell基礎教程06 函式
引數擴充套件介紹
進入主題,shell的一個核心功能是引數管理,引數是儲存值的實體,由名稱、數字或特殊符號引用。
名稱引用的引數稱為變數
數字引用的引數稱為位置引數
特殊符號引用的引數是具有不同特殊含義和用途的引數
名稱引用引數
名稱引用就是我們經常說的變數,沒啥好說的,但是在寫指令碼時建議使用${}的語法,看一個例子:
[[email protected] ~]# filename=linuxtime[[email protected] ~]# echo "/home/$filename1"/home/[[email protected] ~]# echo "/home/${filename}1"/home/linuxtime1
為什麼第一個echo沒有打印出filename變數?因為shell把filename1當作成了一個變數,而filename1沒有被定義,所以echo出""(空),shell會將以"$"開頭的所有有效字元解釋為一個變數名稱。使用${}語法shell會強制解釋大括號內的名稱。
數字引用引數
數字引用引數就是基礎篇裡提到的位置引數啦,也沒啥好說的,如果還不理解請翻閱基礎篇^_^。
特殊符號引用引數
特殊符號引用引數有很多要說的,寫指令碼時使用上特殊符號引用引數,就可以甩其他童鞋一條街了(不是開玩笑哦)。既然是特殊符號,肯定不利於大腦記憶,那接下來就看例子,你一定要按照例子自己操作一遍,形成一個大概的印象,最後做到舉一反三。
--------我是一條帥氣的且內容重要的分割線--------
間接引用
[[email protected] ~]# echo ${filename}linuxtime[[email protected] ~]# linuxtime=time[ [email protected] ~]# echo ${!filename}time
大小寫轉換
我們先列印filename變數,看下filename的值是啥。
[[email protected] ~]# echo ${filename} linuxtime
轉換第一字元為大寫,最短匹配。
[[email protected] ~]# echo ${filename^} Linuxtime
轉換所有字元為大寫,最長匹配。
[[email protected] ~]# echo ${filename^^} LINUXTIME
接下來演示大小轉小寫,還是先看下filename變數值。
[[email protected] ~]# echo ${filename} LinuxTime
轉換第一次字元為小寫,最短匹配。
[[email protected] ~]# echo ${filename,} linuxTime
轉換所有字元為小寫,最長匹配。
[[email protected] ~]# echo ${filename,,}linuxtime
大小寫取反,看下filename變數值。
[[email protected] ~]# echo ${filename} LinuxTime
將第一個字元大小寫取反,最短匹配。
[[email protected] ~]# echo ${filename~}linuxTime
將所有字元大小寫取反,最長匹配。
[[email protected] ~]# echo ${filename~~} lINUXtIME
列印帶有某個字首的所有變數名稱
老套路,先看定義的變數。
[[email protected] ~]# var1=test1[[email protected] ~]# var2=test2[[email protected] ~]# var3=test3[[email protected] ~]# vvar1=test4[[email protected] ~]# vvar2=test5[[email protected] ~]# vvar3=test6
列印所有以var開頭的變數
[[email protected] ~]# echo ${!var*}var1 var2 var3[[email protected] ~]# echo ${[email protected]}var1 var2 var3
列印所有以vvar開頭的變數
[[email protected] ~]# echo ${!vvar*}vvar1 vvar2 vvar3[[email protected] ~]# echo ${[email protected]}vvar1 vvar2 vvar3
刪除前後綴
先定義一個演示用的變數,檢視下變數的值。
[[email protected] ~]# filename=flask.py.bak[[email protected] ~]# echo ${filename} flask.py.bak
刪除字首
[[email protected] ~]# echo ${filename#*.} py.bak
刪除最長字首
[[email protected] ~]# echo ${filename##*.} bak
刪除字尾
[[email protected] ~]# echo ${filename%.*} flask.py
刪除最長字尾
[[email protected] ~]# echo ${filename%%.*} flask
替換
先定義一個演示用的變數
[[email protected] ~]# name="what is linux, my name is linuxtime"
僅將第一個linux替換成book,最短匹配。
[[email protected] ~]# echo ${name/linux/book} what is book, my name is linuxtime
將所有linux替換成book,最長匹配。
[[email protected] ~]# echo ${name//linux/book} what is book, my name is booktime
將第一個linux替換成空字串,最短匹配。
[[email protected] ~]# echo ${name/linux} what is , my name is linuxtime
將所有linux替換成空字串,最長匹配。
[[email protected] ~]# echo ${name//linux} what is , my name is time
字串長度
定義一個演示變數。
[[email protected] ~]# os="centos, ubuntu, freebds, suse"
統計字元個數,包括空格。
[[email protected] ~]# echo ${#os} 29
字串擷取
定義一個演示變數
[[email protected] ~]# os="centos, ubuntu, freebds, suse"
從左邊數的第8個字元開始往後取6個字元
[[email protected] ~]# echo ${os:8:6} ubuntu
從右邊數的第4個字元開始往後取4個字元,注意到沒有,"-"與":"之間有個空格。
[[email protected] ~]# echo ${os: -4:4} suse
同上,如果不想加個空格就用小括號括起來。
[[email protected] ~]# echo ${os:(-4):4} suse
從右邊數的第8個字元開始一直到最後一個字元
[[email protected] ~]# echo ${os:8}ubuntu, freebds, suse
擷取從右邊的第8個字串到從左邊數2個字串之間的字串。
[[email protected] ~]# echo ${os:8:-2} ubuntu, freebds, su
預設值
定義演示變數
[[email protected] ~]# os1=centos[[email protected] ~]# os2=ubuntu
如果os1變數未定義或為空,那麼將列印suse
[[email protected] ~]# echo ${os1:-suse} centos
如果os3變數未定義或為空,那麼將列印suse
[[email protected] ~]# echo ${os3:-suse} suse
定義一個演示變數os4,值設定未空。
[[email protected] ~]# os4=""
僅在變數為定義時,那麼將列印suse,該行只打印了個空字串。
[[email protected] ~]# echo ${os4-suse}
如果os3變數未被定義或為空,那麼將列印windows,並將windows賦值給os2。
[[email protected] ~]# echo ${os3:=windows} windows
如果os2變數未被定義或為空,將列印windows,並將windows賦值給os2。
[[email protected] ~]# echo ${os2:=windows} ubuntu
去掉冒號後僅當變數未被定義時將列印windows,並將windows賦值給os3。
[[email protected] ~]# echo ${os3=windows} windows
os4變數為空字串,所以該行未列印windows
[[email protected] ~]# echo ${os4=windows}
檢測變數
先列印下演示變數的值,確認下變數是否被上面的示例汙染。
[[email protected] ~]# echo ${os1}, ${os4}centos,
一般用來檢查變數是否已定義,起到一個提示的作用。如果變數未被定義,則輸出為空。
[[email protected] ~]# echo ${os1:+ os1變數已被定義}os1變數已被定義
列印為空,說明os4變數未被定義。
[[email protected] ~]# echo ${os4:+ os4變數已被定義}
如果變數為null或未被定義,則顯示錯誤提示。
[[email protected] ~]# echo ${os4:? windows}-bash: os4: windows
好了,就演示到這裡,有疑問,可以留言。
如果閱讀後有所收穫,麻煩幫忙分享轉發。謝謝!