Shell腳本雜記

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ù)是1桑李,第二個(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è)地方需要注意:

  1. h*不需要使用引號(hào)括起來,使用引號(hào)括起來是直接做相等比較
  2. 比較語句使用雙中括號(hào)括起來镇辉,而不是使用單中括號(hào)

=~正則比較

str="hello"
if [[ "$str" =~ ^he.* ]]; then
    echo "yes"
fi

使用正則匹配字符串的開頭字符需要注意:

  1. he:不要使用he屡穗,這里的*號(hào)表示e字符0到多個(gè),即h忽肛,以及heeee都是測試通過的
  2. he.*:這里只允許包含he的字符串通過測試
  3. ^he.*:這個(gè)表示是以he開頭的字符串通過檢測
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末鸡捐,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子麻裁,更是在濱河造成了極大的恐慌箍镜,老刑警劉巖源祈,帶你破解...
    沈念sama閱讀 212,816評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異色迂,居然都是意外死亡香缺,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門歇僧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來图张,“玉大人,你說我怎么就攤上這事诈悍』雎郑” “怎么了?”我有些...
    開封第一講書人閱讀 158,300評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵侥钳,是天一觀的道長适袜。 經(jīng)常有香客問我,道長舷夺,這世上最難降的妖魔是什么苦酱? 我笑而不...
    開封第一講書人閱讀 56,780評(píng)論 1 285
  • 正文 為了忘掉前任,我火速辦了婚禮给猾,結(jié)果婚禮上疫萤,老公的妹妹穿的比我還像新娘。我一直安慰自己敢伸,他們只是感情好扯饶,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,890評(píng)論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著池颈,像睡著了一般尾序。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上饶辙,一...
    開封第一講書人閱讀 50,084評(píng)論 1 291
  • 那天蹲诀,我揣著相機(jī)與錄音斑粱,去河邊找鬼弃揽。 笑死,一個(gè)胖子當(dāng)著我的面吹牛则北,可吹牛的內(nèi)容都是我干的矿微。 我是一名探鬼主播,決...
    沈念sama閱讀 39,151評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼尚揣,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼涌矢!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起快骗,我...
    開封第一講書人閱讀 37,912評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤娜庇,失蹤者是張志新(化名)和其女友劉穎塔次,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體名秀,經(jīng)...
    沈念sama閱讀 44,355評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡励负,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,666評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了匕得。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片继榆。...
    茶點(diǎn)故事閱讀 38,809評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖汁掠,靈堂內(nèi)的尸體忽然破棺而出略吨,到底是詐尸還是另有隱情,我是刑警寧澤考阱,帶...
    沈念sama閱讀 34,504評(píng)論 4 334
  • 正文 年R本政府宣布翠忠,位于F島的核電站,受9級(jí)特大地震影響羔砾,放射性物質(zhì)發(fā)生泄漏负间。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,150評(píng)論 3 317
  • 文/蒙蒙 一姜凄、第九天 我趴在偏房一處隱蔽的房頂上張望政溃。 院中可真熱鬧,春花似錦态秧、人聲如沸董虱。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽愤诱。三九已至,卻和暖如春捐友,著一層夾襖步出監(jiān)牢的瞬間淫半,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,121評(píng)論 1 267
  • 我被黑心中介騙來泰國打工匣砖, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留科吭,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,628評(píng)論 2 362
  • 正文 我出身青樓猴鲫,卻偏偏與公主長得像对人,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子拂共,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,724評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容

  • 第 2 章 SHELL 基礎(chǔ)知識(shí)2.1 shell腳本我們?cè)谏厦婧唵谓榻B了一下什么是shell腳本牺弄,現(xiàn)在我們來進(jìn)一...
    LiWei_9e4b閱讀 1,562評(píng)論 0 0
  • 官網(wǎng) 中文版本 好的網(wǎng)站 Content-type: text/htmlBASH Section: User ...
    不排版閱讀 4,378評(píng)論 0 5
  • 基礎(chǔ)命令 主要的命令和快捷鍵 Linux系統(tǒng)命令由三部分組成:cmd + [options]+[operation...
    485b1aca799e閱讀 1,088評(píng)論 0 0
  • 一、Python簡介和環(huán)境搭建以及pip的安裝 4課時(shí)實(shí)驗(yàn)課主要內(nèi)容 【Python簡介】: Python 是一個(gè)...
    _小老虎_閱讀 5,734評(píng)論 0 10
  • 建立一個(gè)腳本 Linux中有好多中不同的shell宜狐,但是通常我們使用bash (bourne again shel...
    某人在閱讀 2,003評(píng)論 0 0