shell腳本

一悍汛、什么是shell腳本

Shell腳本與Windows/Dos下的批處理相似丑瞧,也就是用各類命令預先放入到一個文件中蔓纠,方便一次性執(zhí)行的一個程序文件溃槐,主要是方便管理員進行設置或者管理用的。但是它比Windows下的批處理更強大偎肃,比用其他編程程序編輯的程序效率更高煞烫,它使用了Linux/Unix下的命令。

二软棺、命令

  • touch hello.sh (在某個目錄下創(chuàng)建hello.sh文件)
  • vi hello.sh (進入hello.sh文件并編輯)
  • 輸入以下內容:
#!/bin/bash

echo "hello world!"

  • 退出編輯并保存

按esc红竭,輸入: 然后輸入wq回車即可保存

  • 運行shell腳本,有兩種方式:

方式一:sh hello.sh
方式二:./hello.sh
如果報以下錯誤喘落,修改hello.sh為可讀權限:chmod 777 hello.txt

三茵宪、shell腳本規(guī)則

1.腳本命名格式:

.sh結尾

2.腳本的起始行格式

第一行必須寫 #!/bin/bash

#! 是一個約定的標記,它告訴系統(tǒng)這個腳本需要什么解釋器來執(zhí)行瘦棋,即使用哪一種 Shell稀火。Shell 編程跟 JavaScript、php 編程一樣赌朋,只要有一個能編寫代碼的文本編輯器和一個能解釋執(zhí)行的腳本解釋器就可以了凰狞。

Linux的shell種類眾多篇裁,常見的有:

  • Bourne Shell(/usr/bin/sh或/bin/sh)
  • Bourne Again Shell(/bin/bash)
  • C Shell(/usr/bin/csh)
  • K Shell(/usr/bin/ksh)
  • Shell for Root(/sbin/sh)
    我們關注的是 Bash,也就是 Bourne Again Shell赡若,由于易用和免費达布,Bash 在日常工作中被廣泛使用。同時逾冬,Bash 也是大多數(shù)Linux 系統(tǒng)默認的 Shell黍聂。在一般情況下,人們并不區(qū)分 Bourne Shell 和 Bourne Again Shell身腻,所以产还,像 #!/bin/sh,它同樣也可以改為 #!/bin/bash嘀趟。
    #! 告訴系統(tǒng)其后路徑所指定的程序即是解釋此腳本文件的 Shell 程序脐区。
  1. 變量的規(guī)則

定義變量規(guī)則:

變量名=值

shell定義變量的規(guī)則:

1: 等號兩邊不能有空格 
2:定義特殊的變量需要用單引號或者雙引號結合 
3:定義linux命令需要用反單引號

區(qū)分單引號和雙引號的不同和相同點

雙引號中有$變量名,輸出的是變量名對應的變量值 
單引號中有$變量名她按,輸出的是$變量名

變量名的命名須遵循如下規(guī)則:

  • 命名只能使用英文字母牛隅,數(shù)字和下劃線,首個字符不能以數(shù)字開頭酌泰。
  • 中間不能有空格倔叼,可以使用下劃線(_)。
  • 不能使用標點符號宫莱。
  • 不能使用bash里的關鍵字(可用help命令查看保留關鍵字)。
  1. 腳本輸入輸出格式
1:輸入語句用:read -p "描述"  
2:Shell輸出值:echo $變量名
#!/bin/bash
#輸出hello world哩罪!---這行是注釋
echo "hello world!" 
#由用戶輸入內容并存入變量con中 ---- 這行是注釋
read -p "input content:" con 
echo $con //輸出用戶輸入的內容con

注意點:read可以傳遞多個數(shù)據 read –p”name and passwoed”name password

超過的部分都填充在最后一個變量上授霸,輸入的時候兩個數(shù)據使用空格隔開

read -p "input content and name:" con name
echo $con
echo $name
img02.jpg
  1. 腳本的調用
方式1:./腳本名.sh(權限的問題)
方式2: sh 腳本名.sh
  1. 參數(shù)傳遞

參數(shù)傳遞 :向.sh文件中傳遞數(shù)據

格式: sh 腳本名.sh 參數(shù)

#!/bin/bash
echo "var01:$0";
echo "var02:$1";
echo "count:$#"
img04.jpg
  1. 比較運算符和邏輯運算符******

1)比較運算符(數(shù)字)

-eq 比較是否相等 
-ne 比較不相等
-gt 比較大于
-ge 比較大于等于 >=
-lt 比較小于   <
-le 比較小于等于  <=
#!/bin/bash
if [ 2 -eq 2 ];
then
echo "true"
else
echo "false"
fi

2)比較運算符(字符串)

== 比較是否相等 
!= 比較不相等
加一操作:((i++)) ((i+=1)) 
加n操作:s=$(($s+$i)) s=$[$s+$i] ((s=$s+$i))

3)邏輯運算符

-a 邏輯與 -o邏輯或 !邏輯非
  1. if語句

    格式:

if [ 條件 ] 
then 
語句
else 
語句
fi

注意點:

1: if后面有空格, 
2:條件兩邊有空格, 
3:if條件里面存在變量,需要$, 
4: fi是結束標識

**練習:判斷用戶輸入的用戶名****(name)****和密碼****(password)****是否為********admin 和 123456,如果是則提示登錄

成功(success)际插,否則提示失數舛(fail)**

多條件語句格式;

if [ 條件 ] 
then 
語句
elif [ 條件 ]
then
語句
...... 
else 
語句
fi

練習:輸入學生的成績,80<score<=100提示very good,60<score<=80提示good,其他則提示不及格

  1. case規(guī)則

    格式:

case $變量名 in 
"值") 
語句;; 
"值") 
語句;; 
..... 
esac

case ... esac 為多選擇語句框弛,與其他語言中的 switch ... case 語句類似辛辨,是一種多分枝選擇結構,每個 case 分支用右圓括號開始瑟枫,用兩個分號 ;; 表示 break斗搞,即執(zhí)行結束,跳出整個 case ... esac 語句慷妙,esac(就是 case 反過來)作為結束標記僻焚。

可以用 case 語句匹配一個值與一個模式,如果匹配成功膝擂,執(zhí)行相匹配的命令虑啤。

注意:

1:case這第一行以in結尾 
2:值可以是字符串也可以是數(shù)字隙弛, 如果數(shù)字范圍[0-9]
3:結束語句;; 
4:esac結束標志

練習:輸入一個序號,判斷該用戶選擇哪款產品狞山,A:筆記本 B:手機 C:小臺燈

練習:請輸入對客服的滿意度全闷,【0-3】不滿意,【4-6】滿意萍启,【7-9】非常滿意

  1. For循環(huán)

    格式:

for 變量 in 列表 
do
語句
done

注意1: 結束標志done

擴充:試想列表中的元素過多的時候总珠,需要怎么做?

seq mix step max

注意:mix 開始數(shù)據 step:間隔 max 結束數(shù)據伊约,如果step為1姚淆,可以省略,需要用反單引號

#!/bin/bash
for i in 1 2 3 4 5
do
echo "This value is:$i"
done
  1. While循環(huán)
while [ 條 件 ]
do
語句
done

注意:

1: while后面有空格, 
2:條件兩邊有空格, 
3:while條件里面存在變量屡律,需要$,
4:done是結束標識
#!/bin/bash
int=1
while [ $int -le 5 ]
do
    echo $int
    let "int++"
done

以上實例使用了 Bash let 命令腌逢,它用于執(zhí)行一個或多個表達式,變量計算中不需要加上 $ 來表示變量

練習:求1-100之間的和

4.3 Shell腳本的函數(shù)

4.3.1 定義格式

函數(shù)名(){代碼 } 
調用格式 
函數(shù)名

注意點:必須先定義一個函數(shù)超埋,然后再調用它

#!/bin/bash
hehe(){
 echo "$1"+"$2"
}
hehe 1 4

輸出求和:

echo $(($1+$2))

4.3.2 函數(shù)中的參數(shù)

使用$n來接收數(shù)據

練習:輸入1搏讶,100兩個整數(shù)進行求和運算并打印結果

練習:輸入任意兩個整數(shù)進行求和運算霍殴,并打印結果

4.3.3 函數(shù)中的返回值

Shell中函數(shù)中默認存在返回值

查看函數(shù)的返回值$媒惕?

注意點:

如果沒有代碼錯誤默認返回值為0 
有代碼錯誤返回1 
查看返回值內容:$?
#!/bin/bash
function demoFun1(){
    echo "這是我的第一個 shell 函數(shù)!"
    return `expr 1 + 1`
}

demoFun1
echo $?

function demoFun2(){
 echo "這是我的第二個 shell 函數(shù)!"
 expr 1 + 1
}

demoFun2
echo $?
demoFun1
echo 在這里插入命令!
echo $?

輸出結果:

這是我的第一個 shell 函數(shù)!
2
這是我的第二個 shell 函數(shù)!
2
0
這是我的第一個 shell 函數(shù)!
在這里插入命令来庭!
0

調用 demoFun2 后妒蔚,函數(shù)最后一條命令 expr 1 + 1 得到的返回值($?值)為 0,意思是這個命令沒有出錯月弛。所有的命令的返回值僅表示其是否出錯肴盏,而不會有其他有含義的結果。

第二次調用 demoFun1 后帽衙,沒有立即查看 ? 的值菜皂,而是先插入了一條別的 echo 命令,最后再查看? 的值得到的是 0厉萝,也就是上一條 echo 命令的結果恍飘,而 demoFun1 的返回值被覆蓋了。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末谴垫,一起剝皮案震驚了整個濱河市章母,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌翩剪,老刑警劉巖胳施,帶你破解...
    沈念sama閱讀 219,589評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異肢专,居然都是意外死亡舞肆,警方通過查閱死者的電腦和手機焦辅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,615評論 3 396
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來椿胯,“玉大人筷登,你說我怎么就攤上這事×ぃ” “怎么了前方?”我有些...
    開封第一講書人閱讀 165,933評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長廉油。 經常有香客問我惠险,道長,這世上最難降的妖魔是什么抒线? 我笑而不...
    開封第一講書人閱讀 58,976評論 1 295
  • 正文 為了忘掉前任班巩,我火速辦了婚禮,結果婚禮上嘶炭,老公的妹妹穿的比我還像新娘抱慌。我一直安慰自己,他們只是感情好眨猎,可當我...
    茶點故事閱讀 67,999評論 6 393
  • 文/花漫 我一把揭開白布抑进。 她就那樣靜靜地躺著,像睡著了一般睡陪。 火紅的嫁衣襯著肌膚如雪寺渗。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,775評論 1 307
  • 那天兰迫,我揣著相機與錄音户秤,去河邊找鬼。 笑死逮矛,一個胖子當著我的面吹牛,可吹牛的內容都是我干的转砖。 我是一名探鬼主播须鼎,決...
    沈念sama閱讀 40,474評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼府蔗!你這毒婦竟也來了晋控?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,359評論 0 276
  • 序言:老撾萬榮一對情侶失蹤姓赤,失蹤者是張志新(化名)和其女友劉穎赡译,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體不铆,經...
    沈念sama閱讀 45,854評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡蝌焚,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,007評論 3 338
  • 正文 我和宋清朗相戀三年裹唆,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片只洒。...
    茶點故事閱讀 40,146評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡许帐,死狀恐怖,靈堂內的尸體忽然破棺而出毕谴,到底是詐尸還是另有隱情成畦,我是刑警寧澤,帶...
    沈念sama閱讀 35,826評論 5 346
  • 正文 年R本政府宣布涝开,位于F島的核電站循帐,受9級特大地震影響,放射性物質發(fā)生泄漏舀武。R本人自食惡果不足惜拄养,卻給世界環(huán)境...
    茶點故事閱讀 41,484評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望奕剃。 院中可真熱鬧衷旅,春花似錦、人聲如沸纵朋。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,029評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽操软。三九已至嘁锯,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間聂薪,已是汗流浹背家乘。 一陣腳步聲響...
    開封第一講書人閱讀 33,153評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留藏澳,地道東北人仁锯。 一個月前我還...
    沈念sama閱讀 48,420評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像翔悠,于是被迫代替她去往敵國和親业崖。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,107評論 2 356

推薦閱讀更多精彩內容