Linux-Shell腳本(1)

shell script介紹

1浴骂、shell script

1.1、定義

  • 其實(shí)就是純文本文件讨跟,以固定的語(yǔ)法組織起來(lái)菠剩。
  • 可以編輯這個(gè)文件, 讓這個(gè)文件幫我們 一次執(zhí)行多個(gè)命令易猫。
  • 可以通過(guò)一些運(yùn)算與邏輯判斷來(lái)幫我們達(dá)成某些較復(fù)雜的功能。

1.2具壮、運(yùn)行方式

shell.sh文件必須具備可讀與可執(zhí)行 (rx) 的權(quán)限

  • 直接執(zhí)行:
    • 絕對(duì)路徑:運(yùn)行文件所在的絕對(duì)路徑來(lái)執(zhí)行指令准颓,如/home/zkpk/apps/shell.sh
    • 相對(duì)路徑:cd到腳本所在目錄 ,使用 ./shell.sh 執(zhí)行
  • bash執(zhí)行:
    • bash shell.sh
    • sh shell.sh
  • source 執(zhí)行
    • source shell.sh

1.3、腳本基本格式

#!/bin/bash
# Shows "Hello World!" in your screen.
echo -e "Hello World! \a \n"
exit 0

第一行:基本格式棺妓,告知系統(tǒng)執(zhí)行方式攘已,當(dāng)采用非sh XXX.sh格式執(zhí)行時(shí),此行必須怜跑。

第二行:注釋样勃,#開頭,后面的文字內(nèi)容不參與程序執(zhí)行性芬。

第三行:基本的輸出語(yǔ)句彤灶。在屏幕打印"Hello World!"。

第四行:腳本執(zhí)行完畢的返回語(yǔ)句批旺。可以使用echo $?來(lái)獲取執(zhí)行后返回值诵姜。

1.4汽煮、數(shù)值運(yùn)算

格式:$((運(yùn)算主體))

實(shí)例(乘法運(yùn)算):

#!/bin/bash
echo -e "Input 2 numbers, I will cross them! \n"
read -p "first number: " firstnu               #鍵盤錄入數(shù)字,存到firstnu中
read -p "second number: " secnu                #鍵盤錄入數(shù)字2棚唆,存到secnu中
total=$(($firstnu*$secnu))                     #進(jìn)行運(yùn)算
echo -e "\nThe result of $firstnu x $secnu is ==> $total"        #輸出結(jié)果

第四行$(($firstnu$secnu)) 為雙重括號(hào)暇赤,若刪去一層則以字符串進(jìn)行運(yùn)算

1.5、test判斷命令

使用范例:test -e demo.txt

  • 判斷某個(gè)文件類型
    • -e 該文件是否存在
    • -f 該文件是否存在且為文件(file)
    • -d 該文件名是否存在且為目錄(directory)
    • -b 該文件是否存在且為一個(gè) block device 裝置
    • -c 該文件是否存在且為一個(gè) character device 裝置
    • -S 該文件是否存在且為一個(gè) Socket 文件
    • -p 該文件是否存在且為一個(gè) FIFO (pipe) 文件
    • -L 該文件是否存在且為一個(gè)連接文件
  • 判斷文件權(quán)限
    • -r 檢查該文件是否存在且具有可讀的權(quán)限
    • -w 檢查該文件是否存在且具有可寫的權(quán)限
    • -x 檢查該文件是否存在且具有可執(zhí)行的權(quán)限
    • -u 檢查該文件名是否存在且具有SUID的屬性
    • -g 檢查該文件名是否存在且具有SGID的屬性
    • -k 檢查該文件名是否存在且具有Sticky bit的屬性
    • -s 檢查該文件是否存在且為非空文件
  • 兩個(gè)文件之間比較
    • -nt 判斷file1 是否比 file2 新
    • -ot 判斷file1 是否比 file2 舊
    • -ef 判斷兩個(gè)文件是否為同一個(gè)文件
  • 整數(shù)之間的判斷
    • -eq 兩數(shù)值相等(equal)
    • -ne 兩數(shù)值不等(not equal)
    • -gt n1大于n2(greater than)
    • -lt n1小于n2(less than)
    • -ge n1大于等于n2(greater than or equal)
    • -le n1小于等于n2(less than or equal)
  • 判斷字符串
    • test -z string 判斷字符串是否為空?若 string 為空字符串,則為 true
    • test -n string 判斷字符串是否非空?若 string 為空字符串,則為 false
    • test str1 = str2 判斷str1是否等于str2,若相等,則返回 true
    • test str1 != str2 判斷str1是否不等于str2,若相等,則返回 false

實(shí)例(判斷文件類型宵凌,顯示其權(quán)限):

#!/bin/bash
# Program:
# User input a filename, program will check
# 1. 輸入文件名鞋囊,并判斷輸入存在
echo -e "Please input a filename, I will check the filename's type and \ permission. \n\n"
read -p "Input a filename : " filename
test -z $filename && echo "You MUST input a filename." && exit 0
# 2. 判斷文件是否存在?不存在結(jié)束腳本
test ! -e $filename && echo "The filename '$filename' DO NOT exist" && exit 0
# 3. 判斷文件類型及屬性
test -f $filename && filetype="regulare file"
test -d $filename && filetype="directory"
test -r $filename && perm="readable"
test -w $filename && perm="$perm writable"
test -x $filename && perm="$perm executable"
# 4. 顯示文件信息
echo "The filename: $filename is a $filetype"
echo "And the permissions are : $perm"

1.6、判斷符號(hào)[]

  • [ 判斷條件 ] 兩端留有空格

“-o”表示兩者條件滿足其一即可

“-a”表示兩者都得滿足瞎惫。

實(shí)例:

#!/bin/bash
#This program shows the user's choice
read -p "Please input (Y/N): " temp
[ "$temp" == "Y" -o "$temp" == "y" ] && echo "OK, continue" && exit 0

2溜腐、shell script參數(shù)

2.1、shell script 默認(rèn)參數(shù)

如:調(diào)用語(yǔ)句如下

./shell.sh con1 con2 con3 con4
$0為./shell.sh  $1為con1  $2為con2  $3為con3 $4位con4

實(shí)例:

#!/bin/bash
echo "The script name is ==> $0"
echo "Total parameter number is ==> $#"
[ "$#" -lt 2 ] && echo "The number of parameter is less than 2.Stop here." && exit 0
echo "Your whole parameter is ==> '$@'"
echo "The 1st parameter ==> $1"
echo "The 2nd parameter ==> $2"

運(yùn)行界面:

[zkpk@node05 test_linux]$ ./p4.sh 1 2
The script name is ==> ./p4.sh
Total parameter number is ==> 2
Your whole parameter is ==> '1 2'
The 1st parameter ==> 1
The 2nd parameter ==> 2

2.2瓜喇、參數(shù)偏移shift

實(shí)例解釋:

./p5.sh one two three four five six
#!/bin/bash
echo "Total parameter number is ==> $#"
echo "Your whole parameter is ==> '$@'"
#shift一個(gè)變量
shift
echo "Total parameter number is ==> $#"
echo "Your whole parameter is ==> '$@'"
shift 3 #shift三個(gè)變量
echo "Total parameter number is ==> $#"
echo "Your whole parameter is ==> '$@'"

運(yùn)行結(jié)果:

[zkpk@node05 test_linux]$ ./p5.sh one two three four five six
Total parameter number is ==> 6
Your whole parameter is ==> 'one two three four five six'
Total parameter number is ==> 5
Your whole parameter is ==> 'two three four five six'
Total parameter number is ==> 2
Your whole parameter is ==> 'five six'

使用shift后挺益,變量位置發(fā)生偏移,在第一次shift一個(gè)變量后乘寒,變量$1從one變成了two望众。以此類推。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市烂翰,隨后出現(xiàn)的幾起案子夯缺,更是在濱河造成了極大的恐慌,老刑警劉巖甘耿,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件踊兜,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡棵里,警方通過(guò)查閱死者的電腦和手機(jī)润文,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)殿怜,“玉大人典蝌,你說(shuō)我怎么就攤上這事⊥访眨” “怎么了骏掀?”我有些...
    開封第一講書人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)柱告。 經(jīng)常有香客問(wèn)我截驮,道長(zhǎng),這世上最難降的妖魔是什么际度? 我笑而不...
    開封第一講書人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任葵袭,我火速辦了婚禮,結(jié)果婚禮上乖菱,老公的妹妹穿的比我還像新娘坡锡。我一直安慰自己,他們只是感情好窒所,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開白布鹉勒。 她就那樣靜靜地躺著,像睡著了一般吵取。 火紅的嫁衣襯著肌膚如雪禽额。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,144評(píng)論 1 285
  • 那天皮官,我揣著相機(jī)與錄音脯倒,去河邊找鬼。 笑死捺氢,一個(gè)胖子當(dāng)著我的面吹牛盔憨,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播讯沈,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼郁岩,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼婿奔!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起问慎,我...
    開封第一講書人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤萍摊,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后如叼,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體冰木,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年笼恰,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了踊沸。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡社证,死狀恐怖逼龟,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情追葡,我是刑警寧澤腺律,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布,位于F島的核電站宜肉,受9級(jí)特大地震影響匀钧,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜谬返,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一之斯、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧遣铝,春花似錦佑刷、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)啰劲。三九已至梁沧,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蝇裤,已是汗流浹背廷支。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留栓辜,地道東北人恋拍。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像藕甩,于是被迫代替她去往敵國(guó)和親施敢。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345

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

  • 1.Linux下如何用命令查看實(shí)時(shí)日志(完整命令) tail -f 路徑.log查看前多少行 tai-200f 路...
    qianyewhy閱讀 2,251評(píng)論 0 11
  • Shell script學(xué)習(xí)總結(jié) shell script注意事項(xiàng) 命令的執(zhí)行順序 從上至下,從左至右 命令的執(zhí)行...
    DorisSunny閱讀 234評(píng)論 0 1
  • 1.建立和運(yùn)行shell程序 什么是shell程序呢? 簡(jiǎn)單的說(shuō)shell程序就是一個(gè)包含若干行shell或者li...
    運(yùn)維阿文閱讀 1,476評(píng)論 0 9
  • .bat腳本基本命令語(yǔ)法 目錄 批處理的常見命令(未列舉的命令還比較多僵娃,請(qǐng)查閱幫助信息) 1概作、REM 和 :: 2...
    慶慶慶慶慶閱讀 8,055評(píng)論 1 19
  • 如何判斷兩條線是否相交呢讯榕?demo下載 其實(shí)我也不懂這個(gè)判斷是什么意思,直接從網(wǎng)上拿過(guò)來(lái)用了匙睹,判斷方法是用C++寫...
    小沫360閱讀 3,186評(píng)論 0 3