編寫Shell腳本---接受、判斷用戶參數(shù)

[TOC]

編寫Shell腳本

Shell腳本命令的工作方式分為兩種:交互式和批處理

  • 交互式(Interactive):用戶每輸入一條命令就立即執(zhí)行
  • 批處理(Batch):由用戶事先編寫好一個完整的Shell腳本潭苞,Shell會一次性執(zhí)行腳本中的諸多的命令

1忽冻、編寫簡單的腳本

如果想查看當(dāng)前所在工作路徑并列出當(dāng)前目錄下所有的文件及屬性信息,實現(xiàn)這個功能的腳本如下:

[root@centos7-01 doc]# vim example.sh
#!/bin/bash 
#For Example BY linuxprobe.com 
pwd 
ls -al

Shell腳本文件的名稱可以任意此疹,但為了避免被誤以為是普通文件僧诚,建議將.sh后綴加上,以表示是一個腳本文件
在上面的example.sh腳本中出現(xiàn)了三種不同的元素:

  • 第一行 #! :腳本聲明 #!用來告訴系統(tǒng)用哪種 Shell 解釋器來執(zhí)行腳本
  • 第二行 # :注釋信息 # 是對腳本功能和某些命令的介紹信息
  • 第三蝗碎、第四行 :為可執(zhí)行語句

執(zhí)行腳本有兩種方式:

  • 第一種 :執(zhí)行命令 bash example.sh ,即可執(zhí)行腳本
  • 第二種 :通過輸入腳本完整路徑的方式執(zhí)行湖笨,但默認(rèn)會因為權(quán)限不足而提示報錯,此時為腳本文件增加執(zhí)行權(quán)限即可
# 示例---路徑執(zhí)行腳本
[root@centos7-01 doc]#  ./example.sh
-bash: ./example.sh: 權(quán)限不夠
[root@centos7-01 doc]# chmod u+x example.sh 
[root@centos7-01 doc]# ./example.sh 
/doc
總用量 8
drwxr-xr-x.  2 root root  44 12月 11 16:37 .
dr-xr-xr-x. 18 root root 235 12月 11 10:17 ..
-rwxr--r--.  1 root root  49 12月 11 16:37 example.sh
-rw-r--r--.  1 root root  56 12月 11 10:22 practice.txt

2蹦骑、接受用戶的參數(shù)

Linux 內(nèi)設(shè)了用于接受參數(shù)的變量慈省,變量之間可以使用空格間隔。

各變量的作用:

  • $0:對應(yīng)當(dāng)前Shell腳本程序的名稱
  • $#:對應(yīng)總共有幾個參數(shù)
  • $*:對應(yīng)所有位置參數(shù)
  • $?:對應(yīng)顯示上一次命令的執(zhí)行返回值
  • $1眠菇、$2边败、$3...:分別對應(yīng)著第 N 個位置的參數(shù)值
# 示例---變量參數(shù)
[root@centos7-01 doc]# vim example.sh 
#!/bin/bash
# For Example BY chenchen
echo "當(dāng)前腳本名稱為$0"
echo "總共有$#個參數(shù)袱衷,分別是$*"
echo "第一個參數(shù)為$1,第二個參數(shù)為$2笑窜,...致燥,第5個參數(shù)為$5"

[root@centos7-01 doc]# sh example.sh one two three four five six
當(dāng)前腳本名稱為example.sh
總共有6個參數(shù),分別是one two three four five six
第一個參數(shù)為one怖侦,第二個參數(shù)為two,...谜叹,第5個參數(shù)為five

3匾寝、判斷用戶的參數(shù)

Shell腳本中條件測試語法可以判斷表達(dá)式是否成立,若條件成立則返回數(shù)字0荷腊,否則便返回其他隨機(jī)數(shù)值艳悔,條件測試語法的執(zhí)行格式如下:
測試語句格式: [ 條件表達(dá)式 ]
切記,表達(dá)式兩邊均應(yīng)有一個空格

3.1 條件測試語句劃分---按測試對象分4種

  • 文件測試語句
  • 邏輯測試語句
  • 整數(shù)值比較語句
  • 字符串比較語句

3.2 文件測試所用的參數(shù)

  • -d:測試文件是否為目錄類型
  • -e:測試文件是否存在
  • -f:判斷是否為一般文件
  • -r:測試當(dāng)前用戶是否有權(quán)限讀取
  • -w:測試檔當(dāng)前用戶是否有權(quán)限寫入
  • -x:測試當(dāng)前用戶是否有權(quán)限執(zhí)行
3.2.1 測試 $?

用測試語句測試一個文件是否為目錄,然后通過 Shell 解釋器內(nèi)設(shè) $? 變量顯示上一條命令的返回值

[root@study doc]# [ -d /doc ]
[root@study doc]# echo $?
0
[root@study doc]# [ -d /doc/example.sh ]
[root@study doc]# echo $?
1
3.2.2 測試一個文件是否為一般文件
[root@study doc]# [ -f /doc/example.sh ]
[root@study doc]# echo $?0
1

3.3 邏輯語句

3.3.1 邏輯“與”&&

在Shell終端中邏輯“與”的運算符號是&&女仰,它表示當(dāng)前面的命令執(zhí)行成功后才執(zhí)行后面的命令

[root@study ~]# [ -e /doc/example.sh ] && echo "存在"
存在
3.3.2 邏輯“或”||

等號兩邊必須要有空格猜年,才能進(jìn)行邏輯等于

[root@study ~]# echo $USER
root
[root@study ~]# [ $USER=root ] || echo "user"
[root@study ~]# su - chen
Last login: Wed Dec 12 09:06:43 CST 2018 on pts/0
[chen@study ~]$ [ $USER=root ] || echo "user"
[chen@study ~]$ echo $USER
chen
[chen@study ~]$ [ $USER = root ] || echo "user"
user
3.3.3 邏輯“非”!

它表示把條件測試中的判斷結(jié)果取相反值

[chen@study ~]$ exit
logout
[root@study ~]# [ $USER != root ] || echo "administrator"
administrator
3.3.4 與、或疾忍、非 綜合示例
[root@study ~]# [ $USER != root ] && echo "user" || echo "root"
root

3.4 整數(shù)比較運算符

整數(shù)比較運算符僅對數(shù)字操作乔外,且不能使用等號、大于號一罩、小于號來判斷杨幼。因為等號與賦值命令符沖突,大于號和小于號分別與輸出重定向和輸入重定向命令符沖突聂渊。因此一定要使用規(guī)范的整數(shù)比較運算符進(jìn)行操作差购。

  • -eq:是否等于
  • -ne:是否不等于
  • -gt:是否大于
  • -lt:是否小于
  • -le:是否等于或小于
  • -ge:是否大于或等于
[root@study ~]# [ 10 -gt 10 ]
[root@study ~]# echo $?
1
[root@study ~]# [ 10 -eq 10 ]
[root@study ~]# echo $?
0

示例:使用 free -m 命令查看內(nèi)存使用量情況(單位MB),然后通過 grep Mem: 命令過濾出剩余內(nèi)存量的行汉嗽,使用 awk'{print $4}' 命令只保留第四列欲逃,最后用 FreeMem=`語句` 的方式把語句內(nèi)執(zhí)行結(jié)果復(fù)制給變量

[root@study ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:            488          47          23           0         417         417
Swap:             0           0           0
[root@study ~]# free -m | grep Mem
Mem:            488          47          23           0         417         417
[root@study ~]# free -m | grep Mem: | awk '{print $4}'
23
[root@study ~]# FreeMem=`free -m | grep Mem: | awk '{print $4}'`
[root@study ~]# echo $FreeMem 
22
[root@study ~]# [ $FreeMem -lt 1024 ] && echo "Insufficient Memory(內(nèi)存不足)"
Insufficient Memory(內(nèi)存不足)

3.5 常見的字符串比較運算符

  • =:比較字符串內(nèi)容是否相同
  • !=:比較字符串內(nèi)容是否不同
  • -z:判斷字符串內(nèi)容是否為空

示例1:判斷String變量是否為空,進(jìn)而判斷是否定義了這個變量

[root@study ~]# [ -z $String ]
[root@study ~]# echo $?
0

示例2:引入邏輯運算符饼暑,判斷語系LANG

[root@study ~]# echo $LANG
en_US.UTF-8
[root@study ~]# [ $LANG != "zh_CN.UTF-8" ] && echo "Not zh_CN(LANG不是漢語)"
Not zh_CN(LANG不是漢語)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末稳析,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子弓叛,更是在濱河造成了極大的恐慌迈着,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,865評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件邪码,死亡現(xiàn)場離奇詭異嗽上,居然都是意外死亡俯在,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,296評論 3 399
  • 文/潘曉璐 我一進(jìn)店門辈赋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人锥忿,你說我怎么就攤上這事。” “怎么了掘剪?”我有些...
    開封第一講書人閱讀 169,631評論 0 364
  • 文/不壞的土叔 我叫張陵,是天一觀的道長奈虾。 經(jīng)常有香客問我夺谁,道長,這世上最難降的妖魔是什么肉微? 我笑而不...
    開封第一講書人閱讀 60,199評論 1 300
  • 正文 為了忘掉前任匾鸥,我火速辦了婚禮,結(jié)果婚禮上碉纳,老公的妹妹穿的比我還像新娘勿负。我一直安慰自己,他們只是感情好劳曹,可當(dāng)我...
    茶點故事閱讀 69,196評論 6 398
  • 文/花漫 我一把揭開白布奴愉。 她就那樣靜靜地躺著,像睡著了一般铁孵。 火紅的嫁衣襯著肌膚如雪锭硼。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,793評論 1 314
  • 那天蜕劝,我揣著相機(jī)與錄音账忘,去河邊找鬼。 笑死熙宇,一個胖子當(dāng)著我的面吹牛鳖擒,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播烫止,決...
    沈念sama閱讀 41,221評論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼蒋荚,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了馆蠕?” 一聲冷哼從身側(cè)響起期升,我...
    開封第一講書人閱讀 40,174評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎互躬,沒想到半個月后播赁,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,699評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡吼渡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,770評論 3 343
  • 正文 我和宋清朗相戀三年容为,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,918評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡坎背,死狀恐怖替劈,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情得滤,我是刑警寧澤陨献,帶...
    沈念sama閱讀 36,573評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站懂更,受9級特大地震影響眨业,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜沮协,卻給世界環(huán)境...
    茶點故事閱讀 42,255評論 3 336
  • 文/蒙蒙 一龄捡、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧皂股,春花似錦墅茉、人聲如沸命黔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,749評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽悍募。三九已至蘑辑,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間坠宴,已是汗流浹背洋魂。 一陣腳步聲響...
    開封第一講書人閱讀 33,862評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留喜鼓,地道東北人副砍。 一個月前我還...
    沈念sama閱讀 49,364評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像庄岖,于是被迫代替她去往敵國和親豁翎。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,926評論 2 361

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

  • 官網(wǎng) 中文版本 好的網(wǎng)站 Content-type: text/htmlBASH Section: User ...
    不排版閱讀 4,408評論 0 5
  • .bat腳本基本命令語法 目錄 批處理的常見命令(未列舉的命令還比較多隅忿,請查閱幫助信息) 1心剥、REM 和 :: 2...
    慶慶慶慶慶閱讀 8,114評論 1 19
  • 什么是運維 術(shù)語名詞 IDC--(Internet Data Center)互聯(lián)網(wǎng)數(shù)據(jù)中心优烧,主要服務(wù)包括整機(jī)租用、...
    lyh165閱讀 2,719評論 0 19
  • 一链峭、Python簡介和環(huán)境搭建以及pip的安裝 4課時實驗課主要內(nèi)容 【Python簡介】: Python 是一個...
    _小老虎_閱讀 5,754評論 0 10
  • 第 2 章 SHELL 基礎(chǔ)知識2.1 shell腳本我們在上面簡單介紹了一下什么是shell腳本畦娄,現(xiàn)在我們來進(jìn)一...
    LiWei_9e4b閱讀 1,579評論 0 0