1.字符截斷:
如果是一般路徑的字符截斷可以用basename和dirname這兩個工具:
basename可以從一個文件路徑中截一個文件名
例如:
代碼如下:
$ basename /home/file.tar
file.tar
dirname可以從一個文件路徑中截到一個目錄路徑
例如:
代碼如下:
$ dirname /home/file.tar
/home
不使用外部工具進(jìn)行字符截斷
bash有自帶的功能來對變量進(jìn)行字符截斷,一般使用"##", "#", "%%", "%", "*" 組合來實現(xiàn)。例如:
代碼如下:
$ string=hellowbashshell
$ echo ${string##*sh}
ell
$ echo ${string#*sh}
shell
$ echo ${string%%sh*}
hellowba
$ echo ${string%sh*}
hellowbash
"#"表示從字符開始部分除去,一旦匹配則立即除去
"##"表示從字符開始部分除去,會搜整個字符串最長的和的匹配來除去
"%"表示從字符結(jié)束的部分除去,一旦匹配成公則立即除去
"%%"表示從字符結(jié)束的部分開始除去,會搜尋整個字符穿中最長的匹配來除去
"*"統(tǒng)配符,一般與“##”或"#"聯(lián)用時放在搜索字符串的左邊,例如:${String#*sh}(在sh的左邊),與"%%"或"%"聯(lián)用時會放在匹配字符串的右邊,例如:${String%%sh*}
常用技巧:
在路徑中取文件名:${path##*/}(與basename相同功能)
在路徑中取目錄路徑:${path%/*}(與dirname相同功能)
取文件的擴(kuò)展名:${path##*.}
2.自變量的接收
接收來自命令行傳入的參數(shù),第一個參數(shù)用$1表示,第二個參數(shù)$2表示,。。。以此類推。注意:$0表示腳本文件名。另外一個在shell編程中經(jīng)常用到的是“$@”這個代表所有的參數(shù),。你可以用一個循環(huán)來遍歷這個參數(shù)。如果用java來類比的話,可以把$@看作是man函數(shù)中定義的那個數(shù)組
3.if語句:
格式:
代碼如下:
if [ condition ]
then
action
fi
注意:“if”和“[”之間需要空格,如果你不空格,shell會報告語法錯誤的。我就被這個浪費了好一陣時間
conditon測試類型對照表
運(yùn)算符 | 描述 | 示例 |
文件比較運(yùn)算符 | ||
-e filename | 如果 filename存在,則為真 | [ -e /var/log/syslog ] |
-d filename | 如果 filename為目錄,則為真 | [ -d /tmp/mydir ] |
-f filename | 如果 filename為常規(guī)文件,則為真 | [ -f /usr/bin/grep ] |
-L filename | 如果 filename為符號鏈接,則為真 |