shell不僅是一種命令解釋器,還是一種編程語言,非常擅長處理文本類型的數據。由于linux系統中的所有配置文件都是純文本的,所以shell編程語言在Linux系統使用中發揮了巨大的作用。
使用shell編寫的程序類似于DOS下的批處理程序,簡單來說,shell編程就是對一系列Linux命令的邏輯化處理。例如,我們在進行自動化測試的時候,需要将代碼部署到服務器進行管理和集成,每次都要執行拉取最新的代碼、編譯打包、上傳服務器一系列的步驟,效率不高而且很繁瑣。
我們将這個過程寫成一個Shell腳本,每次隻需要運行一下這個腳本即可完成上述步驟,簡單方便,提高工作效率。
一、什麼是shell腳本?
我們可以在文件中存放一系列的Linux命令,并對其進行邏輯化處理,通常将shell編寫的程序稱為shell腳本或者shell程序。
Shell腳本以行為單位,包含注釋、命令、變量以及流程控制語句;其中:
1.注釋:注釋對于一個腳本的維護和可讀性來說,尤為重要,沒有任何注釋的腳本是不可取的。Shell腳本内,注釋以#開頭;
2.變量:shell變量支持字符串變量和整形變量;
3.命令:常用的Linux命令;
4.流程控制語句:流程控制語句用來編寫複雜的腳本,比如for循環,if判斷等;
二、shell編程規範
1.shell腳本以#!開頭,通知系統以何種解釋器來執行該腳本;在Linux系統中,有多種版本的shell,包括bash、tcsh、zsh等;我們最常用的解釋器是bash,因此,在編寫shell腳本時,我們會先聲明使用的shell類型,語句如下:
#!/bin/bash
2.以注釋的形式說明shell腳本的如下内容:腳本名稱、腳本功能、版權聲明,如果是較為複雜的腳本,應該對算法進行簡單說明;
三、shell腳本的創建
通過以下步驟,可以創建一個簡單的shell腳本:
1.新建文件:vi filename
如果該文件存在,則打開;如果不存在,則新建一個文件
2.腳本編寫:
#!/bin/bash
#輸出hello world字符串
echo hello world
3.腳本運行:
shell腳本運行有兩種方式:sh filename和./filename
sh filename:當被執行腳本沒有可執行權限時,隻能用這種方式來運行;
./filename:在使用./filename這種方式來運行腳本時,需要先将腳本文件的訪問權限修改為可執行,這樣腳本才能作為可執行文件被調用;因此,在使用./filename時,一般分為兩步:
chmod u x filename
./filename
四、變量
在實際的編程過程中,變量是必不可少的。Shell腳本中的變量包含字符串變量和整形變量;
1、變量賦值
賦值語句如下:
name="string";其中,
name是指變量名,使用小寫字母進行命名;
=是賦值符号,=兩邊不能有空格,否則會将其視為命令執行;
string是變量值,使用雙引号
2、變量引用
在引用變量時,隻需要在變量前加上$即可;注意,在變量賦值的時候,無需加$;
具體使用方式如下:
#!/bin/bash
#自定義變量output
output="hello world"
echo $output
五、整數運算
以上,我們了解到,shell變量包含整形變量和字符串變量;本節我們來簡單介紹一下整數運算。
一般來說,shell的整數運算和其他的編程語言并無區别,包括加減乘除、取餘等;變量的所有計算都是通過(())進行的,我們簡單介紹一下他的寫法,如下:
#!/bin/bash
#自定義變量a和b,并輸出二者的和
a="10"
b="20"
#計算a和b的和
echo $(($a $b))
#計算a和b的差
echo $(($a-$b))
#計算a和b的乘積
echo $(($a*$b))
#計算a/b
echo $(($a/$b))
#求餘
echo $(($a%$b))
六、字符串操作
我們可以對字符串進行如下操作:
#!/bin/bash
#對字符串進行操作
V2='Hello world.everyone.'
#計算字符串的長度,#号表示提取長度
echo ${#V2}
#從position開始截取字符串,例如position為2
echo ${V2:2}
#從位置position開始提取長度為length的子串,{string:position:length};例如position為2,長度為2
echo ${V2:2:2}
#從開頭删除最短匹配字符串:${string#substring},如下代碼,Hello被截取
echo ${V2#Hello}
#删除從xx到xx的所有字符,為最短匹配,裁減到第一個.;如下代碼,删除從H到.的所有字符
echo ${V2#H*.}
#删除從xx到結尾的所有字符;如下代碼,删除從H到結尾的所有字符
echo ${V2##H*}
#從結尾開始,删除xx到xx的字符串;如下代碼從結尾開始删除到.;輸出Hello world
echo ${V2#.%.}
#從結尾開始,删除所有字符串
echo ${V2#.%%}
七、條件判斷
1、test
test命令可以用于檢查某個條件是否成立,可以分為數值、字符串、文件三個方面,使用方法如下:
#!/bin/bash
#條件判斷
filename=test.sh
num1=10
num2=20
str1=linux
str2=Linux
#判斷數值是否相等
if test $num1 -eq $num2
then
echo num1等于num2
else
echo num2不等于num2
fi
#判斷文件是否存在
if test –f $filename
then
echo 文件存在
else
echo 文件不存在
fi
#判斷字符串是否相等
if test $str1 == $str2
then
echo 字符串相等
else
echo 字符串不相等
fi
2、[]判斷
通過test寫成的判斷語句是不是有點麻煩,我們可以使用[]來替代,以數值比較為例:
#!/bin/bash
#條件判斷
num1=10
num2=20
#判斷字符串是否相等
if [ $num1 -eq $num2 ]
then
echo num1和num2相等
else
echo num1和num2不相等
fi
使用[]進行文件和字符串的判斷與字符串大同小異,此處不再展開贅述。使用中括号來進行判斷要注意:在中括号中必須都要使用空格來分隔。
3、(())判斷
(())也是條件判斷的一種方式,可以參考[]判斷方法,進行替換即可;一般來說,雙層小括号(())支持标準的比較符運算,包括:== 、!= 、> 、>= 、< 、<=;中括号[]支持-eq、–ne、-gt 、–ge 、-lt 、-le
八、循環操作
常用的循環操作包括while、until和for,使用如下:
#!/bin/bash
#條件判斷
a=20
#while循環,條件成立時,執行循環體
while [ $a -eq 10 ];do
((i--));
done;
#until循環,條件表達式不成立的時候,執行循環體
until (($a<0));do
((i--))
done;
for((i=0;i<=10;i ));do
echo i
done;
九、方法封裝
在複雜的腳本中,我們避免不了要定義方法,方便多出調用;使用如下:
#!/bin/bash
#定義test方法,打印輸入值;當輸入值等于linux時,調用same方法
read name
function same(){
echo "Your input is $name"
}
if [ $name = linux ]
then
same
else
echo 輸入錯誤
fi
到此,我們就對shell編程有了一個初步的認識,是不是很簡單~,基本的使用方法都已經包含在上邊的介紹中了,後續就是通過日常的練習來加深對shell編程的認識和深入,以解放我們的雙手,提高工作效率,祝大家工作愉快!
請關注 私信回複:“測試”就可以免費拿到軟件測試學習資料還能拉你進軟件測試交流群。
,
更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!