日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

一篇文章学懂Shell脚本,最简明的教程在这里

發(fā)布時(shí)間:2024/9/19 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 一篇文章学懂Shell脚本,最简明的教程在这里 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Shell腳本,就是利用Shell的命令解釋的功能,對(duì)一個(gè)純文本的文件進(jìn)行解析,然后執(zhí)行這些功能,也可以說(shuō)Shell腳本就是一系列命令的集合。

Shell可以直接使用在win/Unix/Linux上面,并且可以調(diào)用大量系統(tǒng)內(nèi)部的功能來(lái)解釋執(zhí)行程序,如果熟練掌握Shell腳本,可以讓我們操作計(jì)算機(jī)變得更加輕松,也會(huì)節(jié)省很多時(shí)間。?

Shell應(yīng)用場(chǎng)景

Shell能做什么

  • 將一些復(fù)雜的命令簡(jiǎn)單化(平時(shí)我們提交一次github代碼可能需要很多步驟,但是可以用Shell簡(jiǎn)化成一步)

  • 可以寫(xiě)一些腳本自動(dòng)實(shí)現(xiàn)一個(gè)工程中自動(dòng)更換最新的sdk(庫(kù))

  • 自動(dòng)打包、編譯、發(fā)布等功能

  • 清理磁盤(pán)中空文件夾

  • 總之一切有規(guī)律的活腳本都可以嘗試一下

?

Shell不能做什么

  • 需要精密的運(yùn)算的時(shí)候

  • 需要語(yǔ)言效率很高的時(shí)候

  • 需要一些網(wǎng)絡(luò)操作的時(shí)候

  • 總之Shell就是可以快速開(kāi)發(fā)一個(gè)腳本簡(jiǎn)化開(kāi)發(fā)流程,并不可以用來(lái)替代高級(jí)語(yǔ)言

?

Shell的工作原理

Shell可以被稱(chēng)作是腳本語(yǔ)言,因?yàn)樗旧硎遣恍枰幾g的,而是通過(guò)解釋器解釋之后再編譯執(zhí)行,和傳統(tǒng)語(yǔ)言相比多了解釋的過(guò)程所以效率會(huì)略差于傳統(tǒng)的直接編譯的語(yǔ)言。

?

?

最簡(jiǎn)單的腳本:

?

#!/bin/bash echo?"Hello?World"

?

只需要打開(kāi)文本編輯工具,編輯成以上的樣子,然后保存成test.sh

?

運(yùn)行該腳本:

?

1.?cd?到該目錄下 2.?chmod?+x?./test.sh??#給腳本權(quán)限 3.?./test.sh??#執(zhí)行腳本

?

效果圖1

這樣我們便寫(xiě)出來(lái)了第一個(gè)最簡(jiǎn)單的腳本,下面我們可以嘗試著寫(xiě)一些復(fù)雜的腳本。

?

Shell中的變量

?

myText="hello?world" muNum=100

?

這里面需要注意的就是,“=”前后不能有空格,命名規(guī)則就和其它語(yǔ)言一樣了。

?

訪問(wèn)變量

?

myText="hello?world" muNum=100 echo?$myText echo?muNum

?

當(dāng)想要訪問(wèn)變量的時(shí)候,需要使用$,否則輸出的將是純文本內(nèi)容,如下圖所示。

效果圖2

?

Shell中的四則運(yùn)算

?

運(yùn)算符含義
+加法運(yùn)算
-減法運(yùn)算
*乘法運(yùn)算
/除法運(yùn)算

?

例子程序

?

#!/bin/bash echo?"Hello?World?!" a=3 b=5 val=`expr?$a?+?$b` echo?"Total?value?:?$val"val=`expr?$a?-?$b` echo?"Total?value?:?$val"val=`expr?$a?*?$b` echo?"Total?value?:?$val"val=`expr?$a?/?$b` echo?"Total?value?:?$val"

?

這里面需要注意的就是,定義變量的時(shí)候“=”前后是不能有空格的,但是進(jìn)行四則運(yùn)算的時(shí)候運(yùn)算符號(hào)前后一定要有空格,乘法的時(shí)候需要進(jìn)行轉(zhuǎn)義。

效果圖3.png

?

其它運(yùn)算符 =、==、!=、!、-o、-a

?

運(yùn)算符含義
%求余
==相等
=賦值
!=不相等
!
-o
-a

?

例子程序

?

a=3 b=5 val=`expr?$a?/?$b` echo?"Total?value?:?$val"val=`expr?$a?%?$b` echo?"Total?value?:?$val"if?[?$a?==?$b?] thenecho?"a?is?equal?to?b" fi if?[?$a?!=?$b?] thenecho?"a?is?not?equal?to?b" fi

?

效果圖4

?

關(guān)系運(yùn)算符

?

運(yùn)算符含義
-eq兩個(gè)數(shù)相等返回true
-ne兩個(gè)數(shù)不相等返回true
-gt左側(cè)數(shù)大于右側(cè)數(shù)返回true
-It左側(cè)數(shù)小于右側(cè)數(shù)返回true
-ge左側(cè)數(shù)大于等于右側(cè)數(shù)返回true
-le左側(cè)數(shù)小于等于右側(cè)數(shù)返回true

?

例子程序

?

#!/bin/sh a=10 b=20 if?[?$a?-eq?$b?] thenecho?"true" elseecho?"false" fiif?[?$a?-ne?$b?] thenecho?"true" elseecho?"false" fiif?[?$a?-gt?$b?] thenecho?"true" elseecho?"false" fiif?[?$a?-lt?$b?] thenecho?"true" elseecho?"false" fiif?[?$a?-ge?$b?] thenecho?"true" elseecho?"false" fiif?[?$a?-le?$b?] thenecho?"true" elseecho?"false" fi

?

效果圖5

?

?

字符串運(yùn)算符

?

運(yùn)算符含義
=兩個(gè)字符串相等返回true
!=兩個(gè)字符串不相等返回true
-z字符串長(zhǎng)度為0返回true
-n字符串長(zhǎng)度不為0返回true
運(yùn)算符含義
-d file檢測(cè)文件是否是目錄,如果是,則返回 true
-r file檢測(cè)文件是否可讀,如果是,則返回 true
-w file檢測(cè)文件是否可寫(xiě),如果是,則返回 true
-x file檢測(cè)文件是否可執(zhí)行,如果是,則返回 true
-s file檢測(cè)文件是否為空(文件大小是否大于0,不為空返回 true
-e file檢測(cè)文件(包括目錄)是否存在,如果是,則返回 true

?

字符串

?

#!/bin/sh mtext="hello"??#定義字符串 mtext2="world" mtext3=$mtext"?"$mtext2??#字符串的拼接 echo?$mtext3??#輸出字符串 echo?${#mtext3}??#輸出字符串長(zhǎng)度 echo?${mtext3:1:4}??#截取字符串

?

效果圖6

?

?

數(shù)組

?

#!/bin/sh array=(1?2?3?4?5)??#定義數(shù)組 array2=(aa?bb?cc?dd?ee)??#定義數(shù)組 value=${array[3]}??#找到某一個(gè)下標(biāo)的數(shù),然后賦值 echo?$value??#打印 value2=${array2[3]}??#找到某一個(gè)下標(biāo)的數(shù),然后賦值 echo?$value2??#打印 length=${#array[*]}??#獲取數(shù)組長(zhǎng)度 echo?$length

效果圖7

?

輸出程序

?

echo

?

#!/bin/sh echo?"hello?world"?? echo?hello?world??text="hello?world" echo?$text echo?-e?"hello?world"??#輸出并且換行 echo?"hello?world"?>?a.txt??#重定向到文件 echo?`date`??#輸出當(dāng)前系統(tǒng)時(shí)間

?

效果圖8

?

printf

?

同c語(yǔ)言,就不過(guò)多介紹了

?

判斷語(yǔ)句

?

  • if

  • if-else

  • if-elseIf

  • case

?

#!/bin/sh a=10 b=20 if?[?$a?==?$b?] thenecho?"true" fiif?[?$a?==?$b?] thenecho?"true" elseecho?"false" fiif?[?$a?==?$b?] thenecho?"a?is?equal?to?b" elif?[?$a?-gt?$b?] thenecho?"a?is?greater?than?b" elif?[?$a?-lt?$b?] thenecho?"a?is?less?than?b" elseecho?"None?of?the?condition?met" fi

?

效果圖9

?

test命令

?

test?$[num1]?-eq?$[num2]??#判斷兩個(gè)變量是否相等 test?num1=num2??#判斷兩個(gè)數(shù)字是否相等

?

參數(shù)含義
-e file文件存在則返回真
-r file文件存在并且可讀則返回真
-w file文件存在并且可寫(xiě)則返回真
-x file文件存在并且可執(zhí)行則返回真
-s file文件存在并且內(nèi)容不為空則返回真
-d file文件目錄存在則返回真

?

for循環(huán)

?

#!/bin/shfor?i?in?{1..5} doecho?$i donefor?i?in?5?6?7?8?9 doecho?$i donefor?FILE?in?$HOME/.bash* doecho?$FILE done

?

效果圖10

?

?

while循環(huán)

?

#!/bin/sh COUNTER=0 while?[?$COUNTER?-lt?5?] doCOUNTER=`expr?$COUNTER?+?1`echo?$COUNTER doneecho?'請(qǐng)輸入。。。' echo?'ctrl?+?d?即可停止該程序' while?read?FILM doecho?"Yeah!?great?film?the?$FILM" done

?

以上是while循環(huán)的兩種用法,第一種是比較常規(guī)的,執(zhí)行循環(huán),然后每次都把控制的數(shù)加1,就可以讓while循環(huán)有退出的條件了。第二種是用戶(hù)從鍵盤(pán)數(shù)據(jù),然后把用戶(hù)輸入的文字輸出出來(lái)。

?

跳出循環(huán)

?

break??#跳出所有循環(huán) break?n??#跳出第n層f循環(huán) continue??#跳出當(dāng)前循環(huán)

?

?

函數(shù)

?

#!/bin/shsysout(){echo?"hello?world" }sysout

?

定義一個(gè)沒(méi)有返回值的函數(shù),然后調(diào)用該函數(shù)

?

#!/bin/shtest(){aNum=3anotherNum=5return?$(($aNum+$anotherNum)) } test result=$? echo?$result

?

定義一個(gè)有返回值的函數(shù),調(diào)用該函數(shù),輸出結(jié)果

?

效果圖11

?

#!/bin/shtest(){echo?$1??#接收第一個(gè)參數(shù)echo?$2??#接收第二個(gè)參數(shù)echo?$3??#接收第三個(gè)參數(shù)echo?$#??#接收到參數(shù)的個(gè)數(shù)echo?$*??#接收到的所有參數(shù) }test?aa?bb?cc

?

定義了一個(gè)需要傳遞參數(shù)的函數(shù)

?

效果圖12

?

?

重定向

?

$echo?result?>?file??#將結(jié)果寫(xiě)入文件,結(jié)果不會(huì)在控制臺(tái)展示,而是在文件中,覆蓋寫(xiě) $echo?result?>>?file??#將結(jié)果寫(xiě)入文件,結(jié)果不會(huì)在控制臺(tái)展示,而是在文件中,追加寫(xiě) echo?input?<?file??#獲取輸入流

?

寫(xiě)一個(gè)自動(dòng)輸入命令的腳本

?

自動(dòng)提交github倉(cāng)庫(kù)的腳本

?

#!/bin/bash echo?"-------Begin-------" git?add?. git?commit?-m?$1 echo?$1 git?push?origin?master echo?"--------End--------"

效果圖13

總結(jié)

以上是生活随笔為你收集整理的一篇文章学懂Shell脚本,最简明的教程在这里的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。