1. 程式人生 > 其它 >os. listdir的括號內參數可以填什麼_shell程式設計進階01 引數擴充套件

os. listdir的括號內參數可以填什麼_shell程式設計進階01 引數擴充套件

技術標籤:os. listdir的括號內參數可以填什麼

開始寫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

好了,就演示到這裡,有疑問,可以留言e6c41bd44c4719a62a511760fa1bdc27.png

如果閱讀後有所收穫,麻煩幫忙分享轉發。謝謝!