Shell腳本的第一行“#!”(Shebang)
腳本中的#!行(第一行)用於指示一個解釋程序。
#!行的語法格式類似如下所示:
#! INTERPRETER [option] ...
注意:INTERPRETER必須是一個程序的絕對路徑。
Shell中的註釋
“#”是註釋標識符。
Bash的HERE DOCUMENT特性,添加多行的註釋內容。
<<COMMENT
comment line 1
comment line 2
comment line n
COMMENT
如何設置腳本的權限和執行腳本
chmod u+x file
Shell變量進階
$PARAMETER
${PARAMETER}
位置參數 $9之後,${10}
注意:參數名是大小寫敏感
間接參數擴展:
${!PARAMETER} 用參數值做參數名。
大小寫修改(Bash 4.0的新特性)
${PARAMETER^} 第一個字母大寫
${PARAMETER^^} 全部大寫
${PARAMETER,} 第一個字母小寫
${PARAMETER,,} 全部小寫
${PARAMETER~} 首字母改變大小寫
${PARAMETER~~}全部變換大小寫
注意:大小寫修改的參數擴展是Bash4.0的新特性,之前的Bash版本中無此參數擴展功能。
變量名擴展:
${!PREFIX*}
${!PREFIX@}
這種參數擴展將列出以字符串PREFIX開頭的所有變量名。默認情況下,列出的這些變量名用空格分隔。
字符串移除:
${PARAMETER#PATTERN} 從開始移除,最短匹配
${PARAMETER##PATTERN} 從開始移除,最長匹配
${PARAMETER%PATTERN} 從結尾開始移除,最短匹配
${PARAMETER%%PATTERN} 從結尾開始移除,最長匹配
字符串搜索與替換:
${PARAMETER/PATTERN/STRING} 替換一個匹配
${PARAMETER//PATTERN/STRING} 替換所有匹配
${PARAMETER/PATTERN} 沒有指定替換,將刪除第一個匹配
${PARAMETER//PATTERN} 沒有指定替換,搜友匹配將被刪除
字符串長度:
${#PARAMETER}
子字符串擴展:
${PARAMETER:OFFSET}
${PARAMETER:OFFSET:LENGTH}
使用默認值:
${PARAMETER:-WORD}
${PARAMETER-WORD}
指定默認值:
${PARAMETER:=WORD}
${PARAMETER=WORD}
使用替代值:
${PARAMETER:+WORD}
${PARAMETER+WORD}
Bash 的內部變量
$BASH 變量-用於引用Bash實例的全路徑名。
$HOME 當前用戶的家目錄
$IFS 內部字段分隔符
$OSTYPE 操作系統的類型
$SECONDS 腳本已運行的秒數
$TMOUT 超時
$UID 當前賬戶id
Bash中的位置參數和特殊參數
位置參數N可以被引用爲${N}
Bash對一些參數的處理比較特殊。這些參數只能被引用,但不能修改它們的值。這些參數分別是
*、@、#、?、-、$、!、0和_。
*:擴展從1開始的所有位置參數。如果擴展發生在雙引號內,即"$*",則擴展爲包含每個參數值的單詞,每個參數值用特殊變量IFS的第一個字符分隔。
@:也將擴展從1開始的所有位置參數。但當它的擴展發生在雙引號內時,每個參數都擴展爲分隔的單詞。
#:將擴展爲位置參數的個數,用十進制表示
?:上一命令執行的狀態
$:將擴展爲當前shell的進程號
!:擴展爲最近一次執行的後臺命令的進程號
0:將擴展爲Shell或Shell腳本的名稱。
_:在shell啓動時,它被設爲開始運行的Shell或Shell腳本的路徑。隨後擴展爲前一個命令的最後一個參數。
使用declare指定變量的類型
declare命令是Bash的內部命令,用於聲明變量和修改變量的屬性。它與bash的另一個內部命令typeset的用法和用途完全相同。
直接使用declare命令,不指定變量名,將顯示所有變量的值。
-r:declare將變量定義爲只讀變量,不能被清除和再賦值
-i:定義爲整型變量
-x:declare命令將把指定的變量通過環境輸出到後續命令
-p:顯示變量的屬性和類型
如果不知道某程序執行多長時間,把命令放在後臺執行可以使用nohup
nohup COMMOND [ARG]... &
Bash中的數組變量
間接聲明數組
ARRAYNAME[INDEX]=value
顯示聲明一個數組變量是使用Bash的內部命令declare
declare -a ARRAYNAME
declare -a linux=('Debian' 'Redhat' 'Suse' 'Fedora')
ARRAYNAME=(value1 value2 ... valueN)
若要引用數組中某一項的內容,必須要使用花括號{},如果索引編號是“@”或"*",那麼數組的所有成員都將被引用.
echo ${linux[@]}
arr1=(one two three)
echo ${arr1[0]} ${arr1[1]} ${arr1[2]}
echo ${arr1[*]}
如果引用時,不指定索引編號,則引用的將是數組中的第一個元素。
使用unset可以消除一個數組或數組的成員變量。
Shell編程基礎(一)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.