Kali-LinuxShell編程
【課程目的】
1.掌握shell的基本命令
2.掌握shell的基本概念和作用
3.掌握shell環(huán)境變量概念和使用方法
4.掌握shell程序的結(jié)構(gòu)和設(shè)計(jì)方法
【實(shí)現(xiàn)場(chǎng)景】
1. VMware Workstation虛擬機(jī)
2. Kali Linux操作系統(tǒng)
【課程原理】
1. shell的基本概念:
shell就是用戶與操作系統(tǒng)內(nèi)核之間的接口,起著協(xié)調(diào)用戶與系統(tǒng)的一致性和在用戶與系統(tǒng)之間進(jìn)行交互的作用。
shell在linux系統(tǒng)中具有極其重要的低位。
2. Shell腳本
Shell最強(qiáng)大的功能在于它是一個(gè)功能強(qiáng)大的編程語言。用戶可以在文件中存放一
系列的命令,這被稱為Shell腳本或Shell程序,將命令、變量和流程控制有機(jī)地
結(jié)合起來將會(huì)得到一個(gè)功能強(qiáng)大的編程工具。
3. Shell腳本結(jié)構(gòu)
Shell結(jié)構(gòu)中主要包括三部分:
#!指定執(zhí)行腳本的shell類型
#代碼注釋行
命令可控制結(jié)構(gòu)
#!/bin/bash
#Thisis my first shell script.
cd/root
ls-l
mkdirf1
cdf1
vif1
chmod+x f1
cd
/root
注:編寫的shell腳本默認(rèn)是不可執(zhí)行的,需要用chmod命令更改文件權(quán)限
4.執(zhí)行shell腳本的方法
a)輸入定向到shell腳本。腳本后不用帶參數(shù)
例如:root@kali:~# bash
b)以腳本名作為shell命令的參數(shù),一般形式:shell名腳本名[參數(shù)]
例如:root@kali:~# bashf1
c)使用‘.’命令。一般形式:. /腳本名
例如:root@kali:~# . /f1
5. Shell語法
a) Shell變量
變量用來存儲(chǔ)數(shù)據(jù),與其他編程語言相比,shell的變量要簡單的多,不需要
指定類型。格式:
變量名=變量值
注:等號(hào)兩側(cè)不能有空格,變量名是以字母、下劃線開頭的字母、下劃線和數(shù)
字的組合,區(qū)分大小寫。
引用變量值時(shí)在變量前加‘$’符號(hào),如:echo $ name
b)位置變量
shell解釋執(zhí)行用戶命令時(shí),將命令的第一部分作為命令名,其它部分作為參數(shù),由出現(xiàn)在命令行上的位置確定的參數(shù)稱為位置參數(shù)。
例如:ls–l file1 file2 file3
file4
$0代表此程序的文件名ls–l
$n代表此程序的第n個(gè)參數(shù)值,n=1-9,$1=file1
c) read命令
從鍵盤讀取數(shù)據(jù)賦值給變量
例如:#!/bin/bash
read one two three
echo“This is $one.”
echo“This is $two.”
echo“This is $three.”
d) expr命令
對(duì)整數(shù)型變量進(jìn)行算數(shù)運(yùn)算
例如:expr 3 + 5
expr $nu - 5
expr $nu1 / $nu2
e)變量測(cè)試語句
用于測(cè)試變量是否相等、是否為空和文件類型等
格式:test測(cè)試條件或[測(cè)試條件]
例如:test n1–eq n2或[ n1–eq n2 ]
字符串測(cè)試
測(cè)試條件含義
st1 = st2 st1與st2相等為真
st1!= st2 st1與st2不相等為真
s s不為空時(shí)為真
-n s s的長度大于0為真
-z s s的長度為0時(shí)為真
數(shù)值測(cè)試
n1–eqn2 n1是否等于n2 n1–gen2 n1是否不小于n2
n1–nen2 n1是否不等于n2 n1–ltn2 n1是否小于n2
n1–gtn2
n1是否大于n2 n1–len2 n1是否不大于n2
文件測(cè)試
-r file文件是否可讀
-w file文件是否可寫
-x file文件是否可執(zhí)行
-f file文件是否為普通文件
-d file文件是否為目錄
-s file文件的內(nèi)容是否大于0
f)分支結(jié)構(gòu)if
if分支結(jié)構(gòu)的語法形式
if [條件測(cè)試1]
then
執(zhí)行命令1
Elif[條件測(cè)試2]
then
執(zhí)行命令2
??
else
執(zhí)行命令n
fi
多個(gè)條件時(shí)可以用邏輯運(yùn)算符組成測(cè)試表達(dá)式
-a邏輯與
-o邏輯或
!邏輯非
g)分支結(jié)構(gòu)case
case經(jīng)常用于多重分支結(jié)構(gòu),其語法形式為;
case字符串in
匹配字符串1)
執(zhí)行命令1;;
匹配字符串2)
執(zhí)行命令2;;
??
匹配字符串n)
執(zhí)行命令n;;
esca
h)循環(huán)結(jié)構(gòu)while
while結(jié)構(gòu)語法形式
while條件測(cè)試
do
執(zhí)行命令
done
執(zhí)行流程為:只要條件測(cè)試的結(jié)果為真,就執(zhí)行do和done之間的循環(huán)體,
再進(jìn)行條件測(cè)試,然后執(zhí)行循環(huán)體,直到條件測(cè)試的結(jié)果為假為止。
i)循環(huán)結(jié)構(gòu)until
until結(jié)構(gòu)的語法形式
until條件測(cè)試
do
執(zhí)行命令
done
其執(zhí)行流程為:只要條件測(cè)試的結(jié)果為假,就執(zhí)行do和done之間的循環(huán)
體,直到條件測(cè)試的結(jié)果為真為止。
j)循環(huán)結(jié)構(gòu)for
for循環(huán)結(jié)構(gòu)的語法形式為
for變量in值表
do
執(zhí)行命令
done
其執(zhí)行流程為:第一次循環(huán)時(shí)將值表中的第一個(gè)值賦給變量,執(zhí)行循環(huán)體,
第二次循環(huán)時(shí)將值表中的第二個(gè)值賦給變量,執(zhí)行循環(huán)體,以此類推直到值表
值全賦值給變量循環(huán)結(jié)束。
在執(zhí)行循環(huán)時(shí)命令break和continue可以跳出循環(huán)
break跳出整個(gè)循環(huán)
continue跳出本次循環(huán),繼續(xù)下次循環(huán)
k)函數(shù)應(yīng)用
在shell腳本中可以定義并使用函數(shù),函數(shù)要先定義后使用,定義函數(shù)的
語法形式為:
函數(shù)名()
{
執(zhí)行命令序列
}
注:函數(shù)中變量均為全局變量無局部變量