shell基礎(chǔ)(二)

變量

定義變量

  • 定義變量時芥喇,變量名不加美元符號
  • 量名和等號之間不能有空格
  • 首個字符必須為字母(a-z,A-Z)
  • 中間不能有空格凰萨,可以使用下劃線(_)
  • 不能使用標(biāo)點符號
  • 不能使用 bash 里的關(guān)鍵字

使用變量

只要在變量名前面加美元符號($)
變量名可加上花括號继控,幫助解釋器識別變量邊界(推薦加上)

重新定義變量

直接為變量賦值即可

# 定義變量
[root@bogon ~]# username="張三"

# 使用變量
[root@bogon ~]# echo $username
張三
[root@bogon ~]# echo ${username}
張三

# 重新賦值
[root@bogon ~]# username="李四"

只讀變量

只讀變量不可以被修改,采用readonly 修飾

# 定義變量后修飾
[root@bogon ~]# username="李四"
[root@bogon ~]# readonly username
[root@bogon ~]# username="張三"
-bash: username: readonly variable

# 定義變量時修飾
[root@bogon ~]# readonly address="beijing"
[root@bogon ~]# address="shanghai"
-bash: address: readonly variable

刪除變量

直接采用unset 即可

[root@bogon ~]# myurl="www.baidu.com"
[root@bogon ~]# unset myurl

變量類型

1) 局部變量

局部變量在腳本或命令中定義沟蔑,僅在當(dāng)前 shell 實例中有效湿诊。

2) 環(huán)境變量

所有的程序,都能訪問環(huán)境變量瘦材。

3) shell 變量

shell 變量中有一部分是環(huán)境變量厅须,有一部分是局部變量。

Shell 特殊變量

特殊變量列表:

變量 含義
$0 當(dāng)前腳本的文件名
$n 傳遞給腳本或函數(shù)的參數(shù)食棕。n 是一個數(shù)字朗和,表示第幾個參數(shù)。
$# 傳遞給腳本或函數(shù)的參數(shù)個數(shù)簿晓。
$* 傳遞給腳本或函數(shù)的所有參數(shù)眶拉。
$@ 傳遞給腳本或函數(shù)的所有參數(shù)。被雙引號(" ")包含時憔儿,與 $* 稍有不同忆植。
$? 上個命令的退出狀態(tài),或函數(shù)的返回值。
$$ 當(dāng)前 Shell 進(jìn)程 ID朝刊。對于 Shell 腳本耀里,就是這些腳本所在的進(jìn)程 ID。

?和 @ 的區(qū)別:

?和@ 都表示傳遞給函數(shù)或腳本的所有參數(shù)拾氓,當(dāng)它們被雙引號(" ")包含時冯挎,"?"會將所有的參數(shù)作為一個整體,以"1 2…n"的形式輸出所有參數(shù)咙鞍;"@"會將各個參數(shù)分開房官,以"1" "2"…"n" 的形式輸出所有參數(shù)。

[root@bogon ~]# cat ./scripts/args.sh
#!/bin/bash

echo "*打印"
for var in "$*"
do
    echo "$var"
done

echo "@打印"
for var in "$@"
do
    echo "$var"
done
[root@bogon ~]# sh ./scripts/args.sh zhansan lisi wangwu zhaoliu tianqi 
*打印
zhansan lisi wangwu zhaoliu tianqi
@打印
zhansan
lisi
wangwu
zhaoliu
tianqi

退出狀態(tài)

$? 可以獲取上一個命令的退出狀態(tài)续滋。所謂退出狀態(tài)翰守,就是上一個命令執(zhí)行后的返回結(jié)果。

退出狀態(tài)是一個數(shù)字吃粒,一般情況下潦俺,大部分命令執(zhí)行成功會返回0,失敗返回1徐勃。

轉(zhuǎn)義字符

加上-e參數(shù)即可

[root@bogon ~]# cat ./scripts/test.sh
#!/bin/bash
lang="java"
echo "hello $lang \n"
echo -e "hello $lang \n"
[root@bogon ~]# sh ./scripts/test.sh
hello java \n
hello java 

命令替換

[root@bogon ~]# DATE=`date`
[root@bogon ~]# echo $DATE
2017年 06月 17日 星期六 13:18:44 CST
[root@bogon ~]# USERS=`who | wc -l`
[root@bogon ~]# echo $USERS
3

[root@bogon ~]# cat ./scripts/test.sh
#!/bin/bash

ISSUEINFO=`cat /etc/issue`
echo $ISSUEINFO


[root@bogon ~]# sh ./scripts/test.sh
CentOS release 6.5 (Final) Kernel \r on an \m

變量替換

變量替換可以根據(jù)變量的狀態(tài)(是否為空事示、是否定義等)來改變它的值

形式 說明
${var} 變量值
${var:-word} 變量 var 為空或已被刪除(unset),返回 word僻肖,不改變 var 的值肖爵。
${var:=word} 變量 var 為空或已被刪除(unset),返回 word臀脏,并將 var 的值設(shè)置為 word劝堪。
${var:?message} 變量 var 為空或已被刪除(unset),將消息 message 送到標(biāo)準(zhǔn)錯誤輸出揉稚。
${var:+word} 變量 var 被定義秒啦,返回 word,不改變 var 的值搀玖。

運算符

算數(shù)運算符

+   加法   
-   減法 
*   乘法   
/   除法   
%   取余   
=   賦值 
==  相等余境。 
!=  不相等。 

關(guān)系運算符

-eq 檢測兩個數(shù)是否相等灌诅,相等返回 true芳来。 
-ne 檢測兩個數(shù)是否相等,不相等返回 true猜拾。    
-gt 檢測左邊的數(shù)是否大于右邊的即舌,如果是,則返回 true挎袜。 
-lt 檢測左邊的數(shù)是否小于右邊的顽聂,如果是肥惭,則返回 true。  
-ge 檢測左邊的數(shù)是否大等于右邊的芜飘,如果是务豺,則返回 true。     
-le 檢測左邊的數(shù)是否小于等于右邊的嗦明,如果是,則返回 true蚪燕。

布爾運算符

!   非運算娶牌,表達(dá)式為 true 則返回 false,否則返回 true馆纳。   
-o  或運算诗良,有一個表達(dá)式為 true 則返回 true。   
-a  與運算鲁驶,兩個表達(dá)式都為 true 才返回 true鉴裹。

字符串運算符

=   檢測兩個字符串是否相等,相等返回 true钥弯。   
!=  檢測兩個字符串是否相等径荔,不相等返回 true。  
-z  檢測字符串長度是否為0脆霎,為0返回 true总处。   
-n  檢測字符串長度是否為0,不為0返回 true睛蛛。  
str 檢測字符串是否為空鹦马,不為空返回 true。   

文件測試運算符

文件測試運算符用于檢測 Unix 文件的各種屬性忆肾。

-b file 檢測文件是否是塊設(shè)備文件荸频,如果是,則返回 true客冈。 
-c file 檢測文件是否是字符設(shè)備文件旭从,如果是,則返回 true郊酒。  
-d file 檢測文件是否是目錄遇绞,如果是,則返回 true燎窘。  
-f file 檢測文件是否是普通文件(既不是目錄摹闽,也不是設(shè)備文件),如果是褐健,則返回 true付鹿。 
-g file 檢測文件是否設(shè)置了 SGID 位澜汤,如果是,則返回 true舵匾。   
-k file 檢測文件是否設(shè)置了粘著位(Sticky Bit)俊抵,如果是,則返回 true坐梯。   
-p file 檢測文件是否是具名管道徽诲,如果是,則返回 true吵血。    
-u file 檢測文件是否設(shè)置了 SUID 位谎替,如果是,則返回 true蹋辅。   
-r file 檢測文件是否可讀钱贯,如果是,則返回 true侦另。   
-w file 檢測文件是否可寫秩命,如果是,則返回 true褒傅。   
-x file 檢測文件是否可執(zhí)行弃锐,如果是,則返回 true樊卓。  
-s file 檢測文件是否為空(文件大小是否大于0)拿愧,不為空返回 true。  
-e file 檢測文件(包括目錄)是否存在碌尔,如果是浇辜,則返回 true。 

Shell注釋

注釋:以“#”開頭的行唾戚,會被解釋器忽略柳洋。

shell 塊注釋

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市叹坦,隨后出現(xiàn)的幾起案子熊镣,更是在濱河造成了極大的恐慌,老刑警劉巖募书,帶你破解...
    沈念sama閱讀 217,907評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件绪囱,死亡現(xiàn)場離奇詭異,居然都是意外死亡莹捡,警方通過查閱死者的電腦和手機鬼吵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來篮赢,“玉大人齿椅,你說我怎么就攤上這事琉挖。” “怎么了涣脚?”我有些...
    開封第一講書人閱讀 164,298評論 0 354
  • 文/不壞的土叔 我叫張陵示辈,是天一觀的道長。 經(jīng)常有香客問我遣蚀,道長矾麻,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,586評論 1 293
  • 正文 為了忘掉前任妙同,我火速辦了婚禮射富,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘粥帚。我一直安慰自己,他們只是感情好限次,可當(dāng)我...
    茶點故事閱讀 67,633評論 6 392
  • 文/花漫 我一把揭開白布芒涡。 她就那樣靜靜地躺著,像睡著了一般卖漫。 火紅的嫁衣襯著肌膚如雪费尽。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,488評論 1 302
  • 那天羊始,我揣著相機與錄音旱幼,去河邊找鬼。 笑死突委,一個胖子當(dāng)著我的面吹牛柏卤,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播匀油,決...
    沈念sama閱讀 40,275評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼缘缚,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了敌蚜?” 一聲冷哼從身側(cè)響起桥滨,我...
    開封第一講書人閱讀 39,176評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎弛车,沒想到半個月后齐媒,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,619評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡纷跛,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,819評論 3 336
  • 正文 我和宋清朗相戀三年喻括,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片忽舟。...
    茶點故事閱讀 39,932評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡双妨,死狀恐怖淮阐,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情刁品,我是刑警寧澤泣特,帶...
    沈念sama閱讀 35,655評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站挑随,受9級特大地震影響状您,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜兜挨,卻給世界環(huán)境...
    茶點故事閱讀 41,265評論 3 329
  • 文/蒙蒙 一膏孟、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧拌汇,春花似錦柒桑、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至与倡,卻和暖如春界逛,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背纺座。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評論 1 269
  • 我被黑心中介騙來泰國打工息拜, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人净响。 一個月前我還...
    沈念sama閱讀 48,095評論 3 370
  • 正文 我出身青樓少欺,卻偏偏與公主長得像,于是被迫代替她去往敵國和親别惦。 傳聞我的和親對象是個殘疾皇子狈茉,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,884評論 2 354

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

  • linux資料總章2.1 1.0寫的不好抱歉 但是2.0已經(jīng)改了很多 但是錯誤還是無法避免 以后資料會慢慢更新 大...
    數(shù)據(jù)革命閱讀 12,167評論 2 33
  • 概述 首先,咱們來了解一下掸掸,什么是Shell氯庆。操作系統(tǒng)內(nèi)核給我們提供了各種接口,同時也提供了各種用戶層的庫扰付,理論上...
    keysaim閱讀 1,374評論 0 0
  • 早:雞蛋*1 黃瓜四分之一 紅豆紅米粥一碗 午:土豆燒雞一份 冬瓜蝦米湯兩碗 米飯 香蕉 午點:蛋糕一塊 香蕉*1...
    紅棗兒姑娘閱讀 274評論 0 0
  • 今天從朋友口中得知師父要到外地發(fā)展了堤撵。內(nèi)心突然有點小小的失落和傷感。朋友說師父怕我難過羽莺,所以一直都沒有告訴我...
    特立獨行貓一只閱讀 178評論 0 2
  • 嘆 秋 楓紅菊黃秋色濃盐固,桂風(fēng)玉露詩意重荒给。 條石橫澗如臥虎丈挟,古松斜掛若蒼龍。 浮云漠漠微陽淺志电,煙靄沉沉山色濛曙咽。 日...
    張慶軍看世界閱讀 488評論 3 18