Linux 編寫 shell 腳本

個(gè)人自定義

為了能在 Linux 全局運(yùn)行腳本继薛,所以我先創(chuàng)建了一個(gè)屬于自己的文件夾
路徑如下

root@iZwz90b9sw5qoothlv316kZ:/draper/bash#

并在 /etc/profile 中設(shè)置 PATH 環(huán)境變量

export PATH=$JAVA_HOME/bin:$MAVEN_HOME/bin:$PATH:/draper/bash

PATH 設(shè)置了很多環(huán)境變量,例如 Java 還有 Maven,Linux 依靠 :來分隔環(huán)境變量杖玲,
所以在后面添加 :/draper/bash 來聲明環(huán)境變量

在這個(gè)路徑下,有我的第一個(gè) shell 腳本 dra1.sh

#!/bin/bash
date
who

Linux 對(duì)于 # 開頭的行當(dāng)做注釋战秋,但唯獨(dú)第一行不會(huì)
這里表明了 Linux 要用哪個(gè) shell 來執(zhí)行 shell百侧, 當(dāng)前的這個(gè)是 bash

date 和 who 分別代表了兩個(gè)命令

  • date 顯示當(dāng)前時(shí)間
  • who 顯示當(dāng)前用戶是誰在何時(shí)登錄 Linux

我們運(yùn)行這個(gè)腳本

root@iZwz90b9sw5qoothlv316kZ:~# dra1.sh
Wed Oct 17 14:47:27 CST 2018
root     pts/0        2018-10-17 09:11 (123.115.118.7)

可能會(huì)出現(xiàn)權(quán)限不足的問題,給文件授權(quán)就好了

chmod 775 dra1.sh

echo

有些 shell 可以顯示在屏幕上顯示一些信息給用戶一個(gè)提示

echo -n "This time is: "
date

這會(huì)顯示

This time is: Wed Oct 17 15:05:55 CST 2018

-n 代表在后面輸出后不換行谴供,并且要求后面的引號(hào)前保留一個(gè)空格块茁,這樣兩個(gè)命令就只輸出一行

使用變量

變量聲明分為環(huán)境變量和用戶變量
這里只說一下用戶變量

days=10
guest="kite"
echo "$guest checked in $days ago"

前兩行代表賦值,注意左右等號(hào)左右不要有空格
使用美元符號(hào) $guest 代表引用這個(gè)變量

輸出

kite checked in 10 ago

反引號(hào)

testing=`date`
echo "The date and time are: $testing"

注意反引號(hào)和單引號(hào)的區(qū)別桂肌,反引號(hào)在美式鍵盤(QWER) 通常和 ~ 在一起
反引號(hào)表示可以將 shell 命令輸出的值給變量

輸出

The date and time are: Wed Oct 17 15:27:41 CST 2018

退出腳本

Linux 提供了 $? 來保存上個(gè)執(zhí)行命令的退出碼

root@iZwz90b9sw5qoothlv316kZ:/draper/bash# echo $?
0

按照慣例数焊,一個(gè)成功結(jié)束的命令的退出狀態(tài)碼是 0,如果有錯(cuò)誤崎场,那狀態(tài)碼將會(huì)是一個(gè)正數(shù)
雖然退出狀態(tài)碼沒有什么慣例佩耳,但我們?nèi)稳豢梢越o出一些參考
退出狀態(tài)碼

exit 命令

exit 2

使表示退出且退出狀態(tài)碼為 2(不合適的 shell 命令)

使用結(jié)構(gòu)化命令

if-then

if command
then
  commands
fi

Linux 的 if 語句可能跟其他語言的 if 不太一樣,我們可以舉個(gè)例子

if date
then
    echo "it worked"
fi

exit 0

輸出結(jié)果是

it worked

這是因?yàn)?date命令的退出狀態(tài)碼是 0 所以會(huì)進(jìn)入到 then 中

if-then-else

其結(jié)構(gòu)為

if command
then
  commands
else
  commands
fi

跟 if-then 屬于同一結(jié)構(gòu)不贅述了

case 命令

與主流語言的 switch 語句相似
其結(jié)構(gòu)為

case variable in
pattern1 | pattern2) commands1;;
pattern3) commands2;;
*) default commands;;
esac

我們寫一個(gè)腳本來運(yùn)行一下

read -p "請(qǐng)輸入一個(gè)數(shù)字: 1    2    3:" key

case $key in
    1|2)
        echo "key = 1 or 2";;
    3)
        echo "key = 2";;
esac

運(yùn)行結(jié)果如下

root@iZwz90b9sw5qoothlv316kZ:/draper/bash# dra1.sh
請(qǐng)輸入一個(gè)數(shù)字: 1    2    3:1
key = 1 or 2
root@iZwz90b9sw5qoothlv316kZ:/draper/bash# dra1.sh
請(qǐng)輸入一個(gè)數(shù)字: 1    2    3:2
key = 1 or 2
root@iZwz90b9sw5qoothlv316kZ:/draper/bash# dra1.sh
請(qǐng)輸入一個(gè)數(shù)字: 1    2    3:3
key = 2
root@iZwz90b9sw5qoothlv316kZ:/draper/bash#

獲取用戶輸入

如果你是從上到下依次看的
你會(huì)注意到我前面沒講的 read 指令

read -p "請(qǐng)輸入一個(gè)數(shù)字: 1    2    3:" key

-p 意味著我們可以給予用戶提示符谭跨,指的是引號(hào)中的字符串干厚。

如果不加 =p 腳本語句就是

read key

會(huì)顯得很僵硬

創(chuàng)建函數(shù)

基本的腳本函數(shù)

創(chuàng)建函數(shù)

結(jié)構(gòu)為

function name (){
  commands
}

或者是

name() {
  commands
}

調(diào)用函數(shù)

name

這是沒有返回值得函數(shù),所以只用調(diào)用名字就可以了

OK螃宙,shell 暫時(shí)說這些蛮瞄,不定期更新。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末污呼,一起剝皮案震驚了整個(gè)濱河市裕坊,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌燕酷,老刑警劉巖籍凝,帶你破解...
    沈念sama閱讀 211,348評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異苗缩,居然都是意外死亡饵蒂,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,122評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門酱讶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來退盯,“玉大人,你說我怎么就攤上這事≡ㄇǎ” “怎么了慰照?”我有些...
    開封第一講書人閱讀 156,936評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長琉朽。 經(jīng)常有香客問我毒租,道長,這世上最難降的妖魔是什么箱叁? 我笑而不...
    開封第一講書人閱讀 56,427評(píng)論 1 283
  • 正文 為了忘掉前任墅垮,我火速辦了婚禮,結(jié)果婚禮上耕漱,老公的妹妹穿的比我還像新娘算色。我一直安慰自己,他們只是感情好螟够,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,467評(píng)論 6 385
  • 文/花漫 我一把揭開白布灾梦。 她就那樣靜靜地躺著,像睡著了一般齐鲤。 火紅的嫁衣襯著肌膚如雪斥废。 梳的紋絲不亂的頭發(fā)上椒楣,一...
    開封第一講書人閱讀 49,785評(píng)論 1 290
  • 那天给郊,我揣著相機(jī)與錄音,去河邊找鬼捧灰。 笑死淆九,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的毛俏。 我是一名探鬼主播炭庙,決...
    沈念sama閱讀 38,931評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼煌寇!你這毒婦竟也來了焕蹄?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,696評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤阀溶,失蹤者是張志新(化名)和其女友劉穎腻脏,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體银锻,經(jīng)...
    沈念sama閱讀 44,141評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡永品,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,483評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了击纬。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鼎姐。...
    茶點(diǎn)故事閱讀 38,625評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出炕桨,到底是詐尸還是另有隱情饭尝,我是刑警寧澤,帶...
    沈念sama閱讀 34,291評(píng)論 4 329
  • 正文 年R本政府宣布献宫,位于F島的核電站芋肠,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏遵蚜。R本人自食惡果不足惜帖池,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,892評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望吭净。 院中可真熱鬧睡汹,春花似錦、人聲如沸寂殉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽友扰。三九已至彤叉,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間村怪,已是汗流浹背秽浇。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留甚负,地道東北人柬焕。 一個(gè)月前我還...
    沈念sama閱讀 46,324評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像梭域,于是被迫代替她去往敵國和親斑举。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,492評(píng)論 2 348

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

  • 官網(wǎng) 中文版本 好的網(wǎng)站 Content-type: text/htmlBASH Section: User ...
    不排版閱讀 4,370評(píng)論 0 5
  • 一病涨、Python簡介和環(huán)境搭建以及pip的安裝 4課時(shí)實(shí)驗(yàn)課主要內(nèi)容 【Python簡介】: Python 是一個(gè)...
    _小老虎_閱讀 5,723評(píng)論 0 10
  • 什么是運(yùn)維 術(shù)語名詞 IDC--(Internet Data Center)互聯(lián)網(wǎng)數(shù)據(jù)中心既穆,主要服務(wù)包括整機(jī)租用赎懦、...
    lyh165閱讀 2,684評(píng)論 0 19
  • .bat腳本基本命令語法 目錄 批處理的常見命令(未列舉的命令還比較多,請(qǐng)查閱幫助信息) 1循衰、REM 和 :: 2...
    慶慶慶慶慶閱讀 8,067評(píng)論 1 19
  • 今天玩一把荒野求生会钝,吃到雞了伐蒋! 玩游戲工三,是因?yàn)槲页霾睿瑫r(shí)間較多先鱼。工作學(xué)習(xí)后俭正,玩一兩把,也算是心身調(diào)節(jié)吧焙畔。 玩了幾次...
    一分閱讀閱讀 305評(píng)論 0 2