1.判斷字符串是否為空
#!/bin/sh
STRING=
if [ -z "$STRING" ]; then
echo "STRING is empty"
fi
if [ -n "$STRING" ]; then
echo "STRING is not empty"
fi
root@james:~# ./zerostring.sh
STRING is empty
2.函數(shù)返回字符串
Shell的函數(shù)默認(rèn)只支持返回狀態(tài)碼(整數(shù)),不支持字符串转唉。如果想要返回字符串可傳入變量网严,在函數(shù)中修改變量為想要返回的值。
#!/bin/bash
set -x
function pass_back_a_string() {
eval "$1='foo bar rab oof'"
}
return_var=''
pass_back_a_string return_var
echo $return_var
3. if...elif...fi 語句
if [ expression 1 ]
then
Statement(s) to be executed if expression 1 is true
elif [ expression 2 ]
then
Statement(s) to be executed if expression 2 is true
elif [ expression 3 ]
then
Statement(s) to be executed if expression 3 is true
else
Statement(s) to be executed if no expression is true
fi
4.sed正則提取字符串
sed命令格式:
# sed 's/oldValue/newValue/g'
提取字符串:
# echo here365test | sed 's/.*ere\([0-9]*\).*/\1/g'
> 365
s表示替換艳汽,\1表示用第一個(gè)括號(hào)里面的內(nèi)容替換整個(gè)字符串猴贰,sed支持*,不支持?河狐、+米绕,不能用\d之類瑟捣,正則支持有限。
5.shell特殊變量
變量 含義
1.$0
當(dāng)前腳本的文件名
2.$n
傳遞給腳本或函數(shù)的參數(shù)栅干。n 是一個(gè)數(shù)字迈套,表示第幾個(gè)參數(shù)。例如碱鳞,第一個(gè)參數(shù)是2。
3.$#
傳遞給腳本或函數(shù)的參數(shù)個(gè)數(shù)劫笙。
4.$*
傳遞給腳本或函數(shù)的所有參數(shù)芙扎。
5.$@
傳遞給腳本或函數(shù)的所有參數(shù)。被雙引號(hào)(" ")包含時(shí)填大,與 $* 稍有不同戒洼。
6.$?
上個(gè)命令的退出狀態(tài),或函數(shù)的返回值允华。
7.$$
當(dāng)前Shell進(jìn)程ID圈浇。對(duì)于 Shell 腳本,就是這些腳本所在的進(jìn)程ID靴寂。
http://c.biancheng.net/cpp/view/2739.html
6.zip 壓縮磷蜀、解壓縮文件
# zip -r filename.zip filename // 壓縮單個(gè)目錄命令
# zip all.zip *.jpg // 這條命令是將所有 .jpg 的文件壓縮成一個(gè) zip 包
# unzip all.zip // 這條命令是將 all.zip 中的所有文件解壓出來
7.rar壓縮、解壓縮文件
安裝rar
# wget http://www.rarlab.com/rar/rarlinux-3.8.0.tar.gz
# tar zxvf rarlinux-3.8.0.tar.gz
# cd rar
# make
# make install
壓縮百炬、解壓縮
# rar a all.rar *.jpg
# unrar e all.rar
8.軟鏈接
# ln -s 源文件 目標(biāo)文件褐隆。
9.獲取文件后綴名
file=$1
if [ "${file##*.}"x = "css"x ]||[ "${file##*.}"x = "js"x ];then
do something
fi
注意:
1> 提取文件后綴名: ${file##*.}
##是貪婪操作符,從左至右匹配剖踊,匹配到最右邊的.號(hào)庶弃,移除包含.號(hào)的左邊內(nèi)容。
這里可以參考 http://www.1987.name/264.html
2> 是=德澈,而且其兩邊有空格歇攻,如果沒有空格,會(huì)報(bào)錯(cuò)
3> 多加了x梆造,是為了防止字符串為空時(shí)報(bào)錯(cuò)缴守。
這里可以參考http://qubaoquan.blog.51cto.com/1246748/292461
9.計(jì)算時(shí)間差
#!/bin/bash
START=$(date +%s)
END=$(date +%s)
DIFF=$(( $END - $START ))
10.檢查字符串是否以某些字符開頭
==比較
str="hello"
if [[ $str == h* ]];
then
echo 'yes'
fi
有兩個(gè)地方需要注意:
- h*不需要使用引號(hào)括起來,使用引號(hào)括起來是直接做相等比較
- 比較語句使用雙中括號(hào)括起來镇辉,而不是使用單中括號(hào)
=~正則比較
str="hello"
if [[ "$str" =~ ^he.* ]]; then
echo "yes"
fi
使用正則匹配字符串的開頭字符需要注意:
- he:不要使用he屡穗,這里的*號(hào)表示e字符0到多個(gè),即h忽肛,以及heeee都是測試通過的
- he.*:這里只允許包含he的字符串通過測試
- ^he.*:這個(gè)表示是以he開頭的字符串通過檢測