Shell_08_set用法

set -u

當(dāng)腳本中遇到未定義的變量時(shí)田藐,默認(rèn)是忽略宇植。

有時(shí)候這并不是開發(fā)者想要的怠苔。

假如有未定義的變量同廉,應(yīng)該報(bào)錯(cuò),并且終止腳本繼續(xù)運(yùn)行柑司。

set -u 就可以辦到

示例

#!/usr/bin/env bash
set -u

echo $a
echo shark

執(zhí)行報(bào)如下錯(cuò)誤

$ bash set.sh
set.sh: line 13: a: unbound variable

分析

image

注意

set -u

a=`ls |grep 'asfdasdf'`
echo "|$a|"

# -u  只針對(duì)未定義的變量有效
# 這種情況,變量的值會(huì)是一個(gè)空字符串
# 所以腳本會(huì)繼續(xù)執(zhí)行

set -e

set -e 的作用就是:
在腳本執(zhí)行中迫肖,有任何命令的返回值是非 0 的情況,則正在運(yùn)行的腳本則會(huì)退出攒驰。

設(shè)置 -e 之前

[root@kube-master set]# cat set-e-before.sh
#!/bin/sh

foo
echo "繼續(xù)執(zhí)行"

執(zhí)行結(jié)果

[root@kube-master set]# sh set-e-before.sh
set-e-before.sh: line 3: foo: command not found
繼續(xù)執(zhí)行

設(shè)置 -e 之后

解決辦法是在腳本中設(shè)置 set -e

[root@kube-master set]# cat set-e-after.sh
#!/bin/sh

set -e

foo
echo "繼續(xù)執(zhí)行"

執(zhí)行結(jié)果

[root@kube-master set]# sh set-e-after.sh
set-e-after.sh: line 5: foo: command not found

但是蟆湖,對(duì)于一組含有管道的命令無效,比如:

#!/usr/bin/env bash
set -e
foo | echo "shark"    # 注意這里有管道符
echo  "程序會(huì)繼續(xù)運(yùn)行"

執(zhí)行結(jié)果

[root@kube-master set]# sh set-e.sh
shark
set-e.sh: line 2: foo: command not found   # 這是報(bào)錯(cuò)信息
程序會(huì)繼續(xù)運(yùn)行

foo 不是 shell 中的命令玻粪,執(zhí)行會(huì)報(bào)錯(cuò)隅津,但是其后面有個(gè)管道诬垂,最終管道后的 echo 命令執(zhí)行成功了,這種情況下 腳本會(huì)繼續(xù)執(zhí)行。

解決辦法是使用下面的 set -o pipefail

set -o pipefail

需要和 set -e 配合使用饥瓷。
如果設(shè)置剥纷,如果管道中的所有命令都成功退出,整條命令的返回值才是 0呢铆。否則返回非 0晦鞋。
默認(rèn)情況下禁用此選項(xiàng)

示例腳本內(nèi)容

# 設(shè)置 set -o pipefail 后,此時(shí)腳本就會(huì)終止運(yùn)行
set -e
set -o pipefail
foo |echo ''
echo shark

執(zhí)行效果

[root@kube-master set]# sh set-e-pipefail.sh

set-e-pipefail.sh: line 4: foo: command not found
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末棺克,一起剝皮案震驚了整個(gè)濱河市悠垛,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌娜谊,老刑警劉巖确买,帶你破解...
    沈念sama閱讀 222,378評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異纱皆,居然都是意外死亡湾趾,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,970評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門派草,熙熙樓的掌柜王于貴愁眉苦臉地迎上來搀缠,“玉大人,你說我怎么就攤上這事近迁∫掌眨” “怎么了?”我有些...
    開封第一講書人閱讀 168,983評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵鉴竭,是天一觀的道長(zhǎng)歧譬。 經(jīng)常有香客問我,道長(zhǎng)搏存,這世上最難降的妖魔是什么瑰步? 我笑而不...
    開封第一講書人閱讀 59,938評(píng)論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮璧眠,結(jié)果婚禮上面氓,老公的妹妹穿的比我還像新娘。我一直安慰自己蛆橡,他們只是感情好舌界,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,955評(píng)論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著泰演,像睡著了一般呻拌。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上睦焕,一...
    開封第一講書人閱讀 52,549評(píng)論 1 312
  • 那天藐握,我揣著相機(jī)與錄音靴拱,去河邊找鬼。 笑死猾普,一個(gè)胖子當(dāng)著我的面吹牛袜炕,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播初家,決...
    沈念sama閱讀 41,063評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼偎窘,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了溜在?” 一聲冷哼從身側(cè)響起陌知,我...
    開封第一講書人閱讀 39,991評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎掖肋,沒想到半個(gè)月后仆葡,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,522評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡志笼,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,604評(píng)論 3 342
  • 正文 我和宋清朗相戀三年沿盅,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片纫溃。...
    茶點(diǎn)故事閱讀 40,742評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡腰涧,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出皇耗,到底是詐尸還是另有隱情南窗,我是刑警寧澤揍很,帶...
    沈念sama閱讀 36,413評(píng)論 5 351
  • 正文 年R本政府宣布郎楼,位于F島的核電站,受9級(jí)特大地震影響窒悔,放射性物質(zhì)發(fā)生泄漏呜袁。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,094評(píng)論 3 335
  • 文/蒙蒙 一简珠、第九天 我趴在偏房一處隱蔽的房頂上張望阶界。 院中可真熱鬧,春花似錦聋庵、人聲如沸膘融。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,572評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)氧映。三九已至,卻和暖如春脱货,著一層夾襖步出監(jiān)牢的瞬間岛都,已是汗流浹背律姨。 一陣腳步聲響...
    開封第一講書人閱讀 33,671評(píng)論 1 274
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留臼疫,地道東北人择份。 一個(gè)月前我還...
    沈念sama閱讀 49,159評(píng)論 3 378
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像烫堤,于是被迫代替她去往敵國(guó)和親荣赶。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,747評(píng)論 2 361

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

  • 官網(wǎng) 中文版本 好的網(wǎng)站 Content-type: text/htmlBASH Section: User ...
    不排版閱讀 4,407評(píng)論 0 5
  • 個(gè)人學(xué)習(xí)批處理的初衷來源于實(shí)際工作塔逃;在某個(gè)迭代版本有個(gè)BS(安卓手游模擬器)大需求讯壶,從而在測(cè)試過程中就重復(fù)涉及到...
    Luckykailiu閱讀 4,733評(píng)論 0 11
  • set -u 當(dāng)腳本中遇到未定義的變量時(shí),默認(rèn)是忽略湾盗。有時(shí)候這并不是開發(fā)者想要的伏蚊。假如有未定義的變量,應(yīng)該報(bào)錯(cuò)格粪,并...
    休止符的嘆息閱讀 162評(píng)論 0 0
  • 第 2 章 SHELL 基礎(chǔ)知識(shí)2.1 shell腳本我們?cè)谏厦婧?jiǎn)單介紹了一下什么是shell腳本躏吊,現(xiàn)在我們來進(jìn)一...
    LiWei_9e4b閱讀 1,578評(píng)論 0 0
  • 今天我聽到一句話:時(shí)間是最稀缺的資源,人人都需要管理時(shí)間帐萎。這是德魯克說的比伏,查了一下德魯克的資料,簡(jiǎn)單了解到他于19...
    鐘愛此生閱讀 156評(píng)論 0 0