標籤:cti 大於 原理 image 自動認可 大於等於 original 語言 gem
Shell指令碼,就是利用Shell的命令解釋的功能,對一個純文字的檔案進行解析,然後執行這些功能,也可以說Shell指令碼就是一系列命令的集合。
Shell可以直接使用在win/Unix/Linux上面,並且可以調用大量系統內部的功能來解釋執行程式,如果熟練掌握Shell指令碼,可以讓我們操作電腦變得更加輕鬆,也會節省很多時間。
Shell應用情境Shell能做什麼
- 將一些複雜的命令簡單化(平時我們提交一次github代碼可能需要很多步驟,但是可以用Shell簡化成一步)
- 可以寫一些指令碼自動實現一個工程中自動更換最新的sdk(庫)
- 自動打包、編譯、發布等功能
- 清理磁碟中空檔案夾
- 總之一切有規律的活指令碼都可以嘗試一下
Shell不能做什麼
- 需要精密的運算的時候
- 需要語言效率很高的時候
- 需要一些網路操作的時候
- 總之Shell就是可以快速開發一個指令碼簡化開發流程,並不可以用來替代進階語言
Shell的工作原理
Shell可以被稱作是指令碼語言,因為它本身是不需要編譯的,而是通過解譯器解釋之後再編譯執行,和傳統語言相比多瞭解釋的過程所以效率會略差於傳統的直接編譯的語言。
最簡單的指令碼:
#!/bin/bashecho "Hello World"
只需要開啟文本編輯工具,編輯成以上的樣子,然後儲存成test.sh
運行該指令碼:
1. cd 到該目錄下2. chmod +x ./test.sh #給指令碼許可權3. ./test.sh #執行指令碼
1
這樣我們便寫出來了第一個最簡單的指令碼,下面我們可以嘗試著寫一些複雜的指令碼。
Shell中的變數
myText="hello world"muNum=100
這裡面需要注意的就是,“=”前後不能有空格,命名規則就和其它語言一樣了。
訪問變數
myText="hello world"muNum=100echo $myTextecho muNum
當想要訪問變數的時候,需要使用$,否則輸出的將是純文字內容,如所示。
2Shell中的四則運算
運算子 |
含義 |
+ |
加法運算 |
- |
減法運算 |
* |
乘法運算 |
/ |
除法運算 |
例子程式
#!/bin/bashecho "Hello World !"a=3b=5val=`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"
這裡面需要注意的就是,定義變數的時候“=”前後是不能有空格的,但是進行四則運算的時候運算子號前後一定要有空格,乘法的時候需要進行轉義。
3.png其它運算子 =、==、!=、!、-o、-a
運算子 |
含義 |
% |
求餘 |
== |
相等 |
= |
賦值 |
!= |
不相等 |
! |
與 |
-o |
或 |
-a |
非 |
例子程式
a=3b=5val=`expr $a / $b`echo "Total value : $val"val=`expr $a % $b`echo "Total value : $val"if [ $a == $b ]then echo "a is equal to b"fiif [ $a != $b ]then echo "a is not equal to b"fi
4關係運算子
運算子 |
含義 |
-eq |
兩個數相等返回true |
-ne |
兩個數不相等返回true |
-gt |
左側數大於右側數返回true |
-It |
左側數小於右側數返回true |
-ge |
左側數大於等於右側數返回true |
-le |
左側數小於等於右側數返回true |
例子程式
#!/bin/sha=10b=20if [ $a -eq $b ]then echo "true"else echo "false"fiif [ $a -ne $b ]then echo "true"else echo "false"fiif [ $a -gt $b ]then echo "true"else echo "false"fiif [ $a -lt $b ]then echo "true"else echo "false"fiif [ $a -ge $b ]then echo "true"else echo "false"fiif [ $a -le $b ]then echo "true"else echo "false"fi
5字串運算子
運算子 |
含義 |
= |
兩個字串相等返回true |
!= |
兩個字串不相等返回true |
-z |
字串長度為0返回true |
-n |
字串長度不為0返回true |
運算子 |
含義 |
-d file |
檢測檔案是否是目錄,如果是,則返回 true |
-r file |
檢測檔案是否可讀,如果是,則返回 true |
-w file |
檢測檔案是否可寫,如果是,則返回 true |
-x file |
檢測檔案是否可執行,如果是,則返回 true |
-s file |
檢測檔案是否為空白(檔案大小是否大於0,不為空白返回 true |
-e file |
檢測檔案(包括目錄)是否存在,如果是,則返回 true |
字串
#!/bin/shmtext="hello" #定義字串mtext2="world"mtext3=$mtext" "$mtext2 #字串的拼接echo $mtext3 #輸出字串echo ${#mtext3} #輸出字串長度echo ${mtext3:1:4} #截取字串
6數組
#!/bin/sharray=(1 2 3 4 5) #定義數組array2=(aa bb cc dd ee) #定義數組value=${array[3]} #找到某一個下標的數,然後賦值echo $value #列印value2=${array2[3]} #找到某一個下標的數,然後賦值echo $value2 #列印length=${#array[*]} #擷取數組長度echo $length
7輸出程式echo
#!/bin/shecho "hello world" echo hello world text="hello world"echo $textecho "hello \nworld" #輸出並且換行echo "hello world" > a.txt #重新導向到檔案echo `date` #輸出當前系統時間
8printf
同c語言,就不過多介紹了
判斷語句
- if
- if-else
- if-elseIf
- case
#!/bin/sha=10b=20if [ $a == $b ]then echo "true"fiif [ $a == $b ]then echo "true"else echo "false"fiif [ $a == $b ]then echo "a is equal to b"elif [ $a -gt $b ]then echo "a is greater than b"elif [ $a -lt $b ]then echo "a is less than b"else echo "None of the condition met"fi
9test命令
test $[num1] -eq $[num2] #判斷兩個變數是否相等test num1=num2 #判斷兩個數字是否相等
參數 |
含義 |
-e file |
檔案存在則返回真 |
-r file |
檔案存在並且可讀則返回真 |
-w file |
檔案存在並且可寫則返回真 |
-x file |
檔案存在並且可執行則返回真 |
-s file |
檔案存在並且內容不為空白則返回真 |
-d file |
檔案目錄存在則返回真 |
for迴圈
#!/bin/shfor i in {1..5}do echo $idonefor i in 5 6 7 8 9do echo $idonefor FILE in $HOME/.bash*do echo $FILEdone
效果10while迴圈
#!/bin/shCOUNTER=0while [ $COUNTER -lt 5 ]do COUNTER=`expr $COUNTER + 1` echo $COUNTERdoneecho ‘請輸入。。。‘echo ‘ctrl + d 即可停止該程式‘while read FILMdo echo "Yeah! great film the $FILM"done
以上是while迴圈的兩種用法,第一種是比較常規的,執行迴圈,然後每次都把控制的數加1,就可以讓while迴圈有退出的條件了。
第二種是使用者從鍵盤資料,然後把使用者輸入的文字輸出出來。
跳出迴圈
break #跳出所有迴圈break n #跳出第n層f迴圈continue #跳出當前迴圈
函數
#!/bin/shsysout(){ echo "hello world"}sysout
定義一個沒有傳回值的函數,然後調用該函數
#!/bin/shtest(){ aNum=3 anotherNum=5 return $(($aNum+$anotherNum))}testresult=$?echo $result
定義一個有傳回值的函數,調用該函數,輸出結果
11
#!/bin/shtest(){ echo $1 #接收第一個參數 echo $2 #接收第二個參數 echo $3 #接收第三個參數 echo $# #接收到參數的個數 echo $* #接收到的所有參數}test aa bb cc
定義了一個需要傳遞參數的函數
12重新導向
$result > file #將結果寫入檔案,結果不會在控制台展示,而是在檔案中,覆蓋寫$result >> file #將結果寫入檔案,結果不會在控制台展示,而是在檔案中,追加寫input < file #擷取輸入資料流
寫一個自動輸入命令的指令碼自動認可github倉庫的指令碼
#!/bin/bashecho "-------Begin-------"git add .git commit -m $1echo $1git push origin masterecho "--------End--------"
13
以上便是我對shell知識的總結,歡迎大家點心,評論,一起討論~~
一篇文章學懂Shell指令碼