Linux Bash Shell學習筆記

參數擴展:linux


1.被名稱引用的參數稱做變量
2.被數字引用的參數稱做位置參數
3.被特定符號引用的參數具備特殊的含義和用途,被稱做Bash的特殊內部變量引用。bash

基本參數擴展:
字符$會引導參數擴展。大括號是可選的,可是大括號能夠保護待擴展的變量,使得緊跟大括號後面的內容不會被擴展。
例:spa

1 $ PARAMETER 2 $ {PARAMETER} 3 #若是參數名後跟其餘字符,大括號是必須的。 4 
5 $ WORD=car 6 $ echo $WORDs
7 $ echo ${WORD}s 8 cars

 

 對於$9後面的參數也是要用大括號的。
注意:參數名是大小寫敏感的。code

間接參數擴展:blog

1 $ PARAMETER=TEMP 2 $ TEMP="It's indirect"
3 $ echo $PARAMETER 4  TEMP 5 $ echo ${!PARAMETER} 6 it's indirec

 

大小寫修改(Bash4.0):ci

 1 $ echo ${PARAMETER^}  2 #將參數的第一個字符改成大寫  3 $ echo ${PARAMETER^^}  4 #將參數的所有字符改成大寫  5 $ echo ${PARAMETER,}  6 #將參數的第一個字符改成小寫  7 $ echo ${PARAMETER,,}  8 #將參數的所有字符改成小寫  9 $ echo ${PARANETER~} 10 #將參數的第一個字符改成大寫 11 $ echo ${PARANETER~~} 12 #將參數的所有字符改成大寫

 

大小寫修改實例:rem

1 # for file in *.txt 2 >do
3 >mv "$file" "${file,,}"
4 >done

 

變量名擴展:字符串

1 ${!PREFIX*} 2 ${!PREFIX@} 3 #列出以字符串PREFI開頭的全部變量名

 

例:列出以BASH開頭的全部變量名string

1 $echo ${!BASH*} 2 BASH BASHOPTS BASHPID BASH_ALIASES BASH_ARGC BASH_ARGV BASH_CMDS BASH_COMMAND BASH_LINENO BASH_SOURCE BASH_SUBSHELL BASH_VERSINFO BASH_VERSION

字符串移除:it

1 ${PARAMETER#PATTERN} 2 ${PARAMETER##PATTERN} 3 #移除從參數值的開頭匹配指定模式的字符串 4 ${PARAMETER%PATTERN} 5 ${PARAMETER%%PATTERN} 6 #移除從參數值的結尾匹配指定模式的字符串 7 #」#「和」%「表示移除匹配指定模式的最短文本,」##「和」%%「表示移除匹配模式的最長文本。

 

字符串移除實例:

 1 $ MYSTRING="This is used for removing string"
 2 $ echo ${MYSTRING#* }  3 is used for removing string
 4 
 5 $echo ${MYSTRING##* }  6 string
 7 
 8 $echo ${MYSTRING% *}  9 This is used for removing 10 
11 $echo ${MYSTRING%% *} 12 This

 

參數用途,提取文件名的一部分:

 1 $ FILENAME=linux_bash.txt  2 
 3 $ echo ${FILENAME%.*} #移除文件名的後綴  4 linux_bash  5 
 6 $ echo ${FILENAME##*.} #移除文件名,保留後綴  7 txt  8 
 9 FILENAME=/home/book/linux_bash.txt 10 
11 $ echo ${FILENAME%/*} #移除文件名,保留目錄名 12 /home/book 13 
14 $ echo ${FILENAME##*/} #移除目錄名,保留文件名 15 linux_bash.txt

 

字符串的搜索與替換:

1 $ {PARAMETER/PATTERN/STRING}
2 $ {PARAMETER//PATTERN/STRING}
3 $ {PARAMETER/PATTERN}
4 $ {PARAMETER//PATTERN}
5 #操做符「/」和「//」分別表示只替換一個匹配的字符串和替換所有匹配的字符串,若是沒有指定替換的字符串STRING,那便是替換爲空,即刪除。

 

 例:

 1 $ MYSTRING="This is used for replacing string or removing string"
 2 $ echo ${MYSTRING/string/characters}
 3 This is used for replacing characters or removing string
 4 
 5 $ echo ${MYSTRING//string/characters}
 6 This is used for replacing characters or removing characters
 7 
 8 $ echo ${MYSTRING/string }
 9 This is used for replacing or removing string
10 
11 $ echo ${MYSTRING//string }
12 This is used for replacing or removing string
13 
14 $ echo ${MYSTRING//string/ }
15 This is used for replacing or removing

 

 求字符串的長度:

1 $ echo ${#PARAMETER}

 

 獲得參數值的長度:

1 $ MYSTRING="Hello World"
2 $ echo ${#MYSTRING}
3 11

 

 子字符串擴展:

1 $ {PARAMETER:OFFSET
2 $ {PARAMETER:OFFSET:LENGTH}

 

 從指定的位置開始截取指定長度的字符串;若是不指定截取的字符串長度,將會截取至末尾。

不指定長度:

1 $ MYSTRING="This is used for substring expansion."
2 
3 $ echo ${MYSTRING:8}
4 used for substring expansion.

 

 指定長度:

1 $ echo ${MYSTRING:8:10}
2 used for s

 

 使用默認值:

1 ${PARAMTER:-WORD}
2 ${PARAMTER-WORD}

 

 若是參數PARAMTER未定義或者爲NULL時,這種模式或擴展WORD,不然會擴展參數PARAMTER;若是在PARAMTER和WORD之間未使用」:「時,只有參數PARAMTER未定義時,纔會使用WORD。

 1 $ unset MYSTRING
 2 
 3 $ echo $MYSTRING
 4 
 5 $ echo ${MYSTRING:-Hello World}
 6 Hello World
 7 $ echo MYSTRING
 8 
 9 $ MYSTRING=HI
10 $ echo ${MYSTRING}:-Hello World
11 HI

 

 指定默認值:

1 ${PARAMETER:=WORD}
2 ${PARAMETER=WORD}

 

 此種模式和使用默認值的區別在於,不只擴展WORD,還將WORD的值賦值給參數PARAMTER,做爲PARAMTER的值。

例:

1 $ unset MYSTRING
2 $ echo $MYSTRING
3 
4 $ echo ${MYSTRING:=Hello World}
5 Hello World
6 
7 $ echo $MYSTRING
8 Hello World

 

使用替代值:

1 ${PARAMTER:+WORD}
2 ${PARAMTER+WORD}
#若是參數PARAMTER是未定義的,或者其值未空時,這種模式將不擴展任何參數。若是參數PARAMTER是定義的,且其值不爲空,這種模式會擴展WORD,而不是擴展PARAMTER的值。

 

1 $ MYSTRING=""
2 
3 $ echo ${MYSTRING:+MOTE:MYSTRING seems to be set.}
4 
5 $ MYSTRING="HI"
6 echo ${MYSTRING:+NOTE:MYSTRING seems to be set.}
7 NOTE:MYSTRING seems to be set
相關文章
相關標籤/搜索