目錄
前言
?一、什么是shell
二、什么是腳本?
?三、為什么要學(xué)習(xí)和使用shell?
四、?常見的shell種類
?bash
?五、shell語法
?1.變量
?1.1變量的定義與使用
?1.2 只讀變量 readonly?
?1.3接收用戶輸入 read? -p
?1.4刪除變量uset
?2.條件判斷語句
兩個條件:
?多個條件:
?3.運算符
?3.1算數(shù)運算符(+、-、*、/、%、=、==、!=)
?3.2關(guān)系運算符(-eq、-ne、-gt、-lt、-ge、-le)
?3.3邏輯運算符(!非、-o或、-a與并且)
?3.4字符串運算符?(=、!=、-z、-n、str)
?3.5 *文件測試運算符(-b、-c、-d、-f、-g、-k、-p、-u、-r、-w、-x、-s、-e)
4.shell腳本附帶選項($0、$#、$1、$2、$@、$$、$*、$?、$!)
?5.for命令 for....in...
5.1以變量作為列表{初始值..結(jié)束值}:一個區(qū)間的數(shù)值
?5.2用命令生成列表?seq命令seq [初始值 步長] 終止值
?5.3將目錄作為列表
?6.until命令
?7.while命令
8.控制循環(huán)
8.1break命令
?8.2continue命令
9.while的特殊用法
9.1死循環(huán)
?9.2將文件內(nèi)容逐行讀入循環(huán)中
10.練習(xí)題:實現(xiàn)一個簡單的計算器
實現(xiàn)九九乘法表?
前言
小編我將用CSDN記錄軟件開發(fā)求學(xué)之路上親身所得與所學(xué)的心得與知識,有興趣的小伙伴可以關(guān)注一下!
也許一個人獨行,可以走的很快,但是一群人結(jié)伴而行,才能走的更遠!讓我們在成長的道路上互相學(xué)習(xí),讓我們共同進步,歡迎關(guān)注!
?一、什么是shell
Shell(外殼) 是一個用 C 語言編寫的程序,它是用戶使用 Linux 的橋梁。Shell 既是一種命令語言,又是一種程序設(shè)計語言。
Shell 是指一種應(yīng)用程序,這個應(yīng)用程序提供了一個界面,用戶通過這個界面訪問操作系統(tǒng)內(nèi)核的服務(wù)。
二、什么是腳本?
腳本簡單地說就是一條條的文字命令,這些文字命令是可以看到的(如可以用記事本打開查看、編輯)。
常見的腳本: JavaScript(JS,前端),VBScript, ASP,JSP,PHP(后端),SQL(數(shù)據(jù)庫操作語言),Perl,Shell,python,Ruby,JavaFX,Lua等。
?三、為什么要學(xué)習(xí)和使用shell?
?Shell屬于內(nèi)置的腳本
程序開發(fā)的效率非常高,依賴于功能強大的命令可以迅速地完成開發(fā)任務(wù)(批處理)
語法簡單,代碼寫起來比較輕松,簡單易學(xué)
四、?常見的shell種類
在linux中有很多類型的shell,不同的shell具備不同的功能,shell還決定了腳本中函數(shù)的語法,Linux中默認的shell是/bin/bash(重點),流行的shell有ash、bash、ksh、csh、zsh等,不同的shell都有自己的特點以及用途。
?bash
大多數(shù)Linux系統(tǒng)默認使用的shell,bash shell 是 Bourne shell 的一個免費版本,它是最早的 Unix shell,bash還有一個特點,可以通過help命令來查看幫助。包含的功能幾乎可以涵蓋shell所具有的功能,所以一般的shell腳本都會指定它為執(zhí)行路徑。
?五、shell語法
代碼規(guī)范:
#!/bin/bash [指定告知系統(tǒng)當(dāng)前這個腳本要使用的shell解釋器]
Shell相關(guān)指令
文件命名規(guī)范:
文件名.sh
.sh是linux下bash?shell?的默認后綴
使用流程:
①創(chuàng)建.sh文件 touch/vim
②編寫shell代碼
③執(zhí)行shell腳本 腳本必須得有執(zhí)行權(quán)限
?1.變量
?在一個腳本周期內(nèi),其值可以發(fā)生改變的量就是變量.
腳本周期:
一個腳本周期我們可以簡單的理解為當(dāng)前的shell文件
?1.1變量的定義與使用
#!/bin/bash
name='yoyo'
echo "my name is $name"
echo 'my name is $name'
結(jié)果:?
my name is yoyo
my name is $name
單雙引號注意:
雙引號能夠識別變量,雙引號能夠?qū)崿F(xiàn)轉(zhuǎn)義(類似于“\*”)
單引號是不能識別變量,只會原樣輸出,單引號是不能轉(zhuǎn)義的單引號強引用 怎么定義怎么輸出
雙引號是弱引用 ?可以引入變量
?變量名的規(guī)范
注意,變量名后面的等號左右不能有空格,這可能和你熟悉的所有編程語言都不一樣。同時,變量名的命名須遵循如下規(guī)則:
命名只能使用英文字母,數(shù)字和下劃線,首個字符不能以數(shù)字開頭。
中間不能有空格,可以使用下劃線“_”。
不能使用標點符號。
不能使用bash里的關(guān)鍵字(可用help命令查看保留關(guān)鍵字)。
?注意:反引號(esc鍵下方的那個鍵),當(dāng)在腳本中需要執(zhí)行一些指令并且將執(zhí)行的結(jié)果賦給變量的時候需要使用“反引號”。
#!/bin/bash
dt=`date +'%F %T'` # 注意這里要用反引號(``)包括
echo $dt
?
?1.2 只讀變量 readonly?
語法:readonly? 變量名
?
?1.3接收用戶輸入 read? -p
語法: read? ?-p? ?提示信息? 變量名
案例:編寫一個腳本test6.sh,要求執(zhí)行之后提示用戶輸入文件的名稱(路徑),然后自動為用戶創(chuàng)建該文件
注意:提示信息和變量名之間要空格?
echo '#!/bin/bash' > $filepath? ??將新創(chuàng)建的文件輸入#!/bin/bash
?
?1.4刪除變量uset
?語法: uset? 變量名
?
?2.條件判斷語句
兩個條件:
if condition
then
????command1
????command2
????...
else
????command
fi
?
??多個條件:
?if?condition1
then
????command1
elif?condition2 ??
then
????command2
else
????commandN
fi
?
?3.運算符
?3.1算數(shù)運算符(+、-、*、/、%、=、==、!=)
運算符 |
說明 |
舉例 |
+ |
加法 |
`expr $a + $b` 結(jié)果為?30。 |
- |
減法 |
`expr $a - $b` 結(jié)果為 -10。 |
* |
乘法 |
`expr $a \* $b` 結(jié)果為 ?200。 |
/ |
除法 |
`expr $b / $a` 結(jié)果為?2。 |
% |
取余 |
`expr $b % $a` 結(jié)果為?0。 |
= |
賦值 |
a=$b 將把變量 b 的值賦給 a。 |
== |
相等。用于比較兩個數(shù)字,相同則返回 true(真)。 |
[ $a == $b ] 返回?false(假)。 |
!= |
不相等。用于比較兩個數(shù)字,不相同則返回 true。 |
[ $a != $b ] 返回 true。 |
?注意:條件表達式要放在方括號之間,并且要有空格,例如:?[$a==$b]?是錯誤的,必須寫成?[??$a == $b ?]。
原生bash不支持簡單的數(shù)學(xué)運算,但是可以通過其他命令來實現(xiàn),例如 awk 和 expr,expr 最常用。
expr?是一款表達式計算工具,使用它能完成表達式的求值操作。
例如,兩個數(shù)相加(注意使用的是反引號 ` 而不是單引號 '):
#!/bin/bash
val=`expr 2 + 2`
echo "兩數(shù)之和為 : $val"
兩點注意:
表達式和運算符之間要有空格,例如 2+2 是不對的,必須寫成 2?+ 2,這與我們熟悉的大多數(shù)編程語言不一樣。
完整的表達式要被 ` ` 包含,注意這個字符不是常用的單引號,在 Esc 鍵下邊。
?
?
?3.2關(guān)系運算符(-eq、-ne、-gt、-lt、-ge、-le)
關(guān)系運算符只支持數(shù)字,不支持字符串,除非字符串的值是數(shù)字
運算符 |
說明 |
舉例 |
-eq |
檢測兩個數(shù)是否相等,相等返回 true。 |
[ $a -eq $b ] 返回?false。 |
-ne |
檢測兩個數(shù)是否相等,不相等返回 true。不等于 |
[ $a -ne $b ] 返回 true。 |
-gt |
檢測左邊的數(shù)是否大于右邊的,如果是,則返回 true。 |
[ $a -gt $b ] 返回 false。 |
-lt |
檢測左邊的數(shù)是否小于右邊的,如果是,則返回 true。 |
[ $a -lt $b ] 返回 true。 |
-ge |
檢測左邊的數(shù)是否大于等于右邊的,如果是,則返回 true。 |
[ $a -ge $b ] 返回 false。 |
-le |
檢測左邊的數(shù)是否小于等于右邊的,如果是,則返回 true。 |
[ $a -le $b ] 返回 true。 |
?
?
?eg:寫一個腳本,判斷當(dāng)前輸入的用戶是否存在。如果存在則提示“用戶存在”否則提示“用戶不存在”。
?
?3.3邏輯運算符(!非、-o或、-a與并且)
運算符 |
說明 |
舉例 |
! |
非運算,表達式為 true 則返回 false,否則返回 true。 |
[ ! false ] 返回 true。 |
-o |
或(或者)運算,有一個表達式為 true 則返回 true。 |
[ $a -lt 20 -o $b -gt 100 ] 返回?true。 |
-a |
與(并且)運算,兩個表達式都為 true?才返回 true。 |
[ $a -lt 20 -a $b -gt 100 ] 返回?false。 |
?3.4字符串運算符?(=、!=、-z、-n、str)
運算符 |
說明 |
舉例 |
= |
檢測兩個:等,相等返回 true。 |
[ $a = $b ] 返回 false。 |
!= |
檢測兩個字符串是否相等,不相等返回 true。 |
[ $a != $b ] 返回?true。 |
-z |
檢測字符串長度是否為0,為0返回 true。 |
[ -z $a ] 返回 false。 |
-n |
檢測字符串長度是否為0,不為0返回 true。 |
[ -n $a ] 返回 true。 |
str |
檢測字符串是否為空,不為空返回 true。 |
[ $a ] 返回?true。 |
?
?3.5 *文件測試運算符(-b、-c、-d、-f、-g、-k、-p、-u、-r、-w、-x、-s、-e)
操作符 |
說明 |
舉例 |
-b file |
檢測文件是否是塊設(shè)備文件,如果是,則返回 true。 |
[ -b $file ] 返回 false。 |
-c file |
檢測文件是否是字符設(shè)備文件,如果是,則返回 true。 |
[ -c $file ] 返回?false。 |
-d file |
檢測文件是否是目錄,如果是,則返回 true。 |
[ -d $file ] 返回 false。 |
-f file |
檢測文件是否是普通文件(既不是目錄,也不是設(shè)備文件),如果是,則返回 true。 |
[ -f $file ] 返回?true。 |
-g file |
檢測文件是否設(shè)置了 SGID 位,如果是,則返回 true。 |
[ -g $file ] 返回?false。 |
-k file |
檢測文件是否設(shè)置了粘著位(Sticky Bit),如果是,則返回 true。 |
[ -k $file ] 返回?false。 |
-p file |
檢測文件是否是有名管道,如果是,則返回 true。 |
[ -p $file ] 返回?false。 |
-u file |
檢測文件是否設(shè)置了 SUID 位,如果是,則返回 true。 |
[ -u $file ] 返回?false。 |
-r file |
檢測文件是否可讀,如果是,則返回 true。 |
[ -r $file ] 返回?true。 |
-w file |
檢測文件是否可寫,如果是,則返回 true。 |
[ -w $file ] 返回?true。 |
-x file |
檢測文件是否可執(zhí)行,如果是,則返回 true。 |
[ -x $file ] 返回?true。 |
-s file |
檢測文件是否為空(文件大小是否大于0),不為空返回 true。 |
[ -s $file ] 返回?true。 |
-e file |
檢測文件(包括目錄)是否存在,如果是,則返回 true。 |
[ -e $file ] 返回?true。 |
?
?
?
4.shell腳本附帶選項($0、$#、$1、$2、$@、$$、$*、$?、$!)
$0:就是該bash文件名,個位數(shù)的,可直接使用數(shù)字,但兩位數(shù)以上,則必須使用 {} 符號來括住,如${10}.(即:$0?是腳本本身的名字?)
$#:返回所有腳本參數(shù)的個數(shù)。
$1:是傳遞給該shell腳本的第一個參數(shù)?
$2:是傳遞給該shell腳本的第二個參數(shù)?
$@:?是傳給腳本的所有參數(shù)的列表
$$?:??Shell本身的PID(ProcessID),即當(dāng)前進程的PID。
$*:所有腳本參數(shù)的內(nèi)容:就是調(diào)用調(diào)用本bash shell的參數(shù)。?
$?:是上一指令的返回值,成功是0,不成功是1。一般來說,UNIX(linux) 系統(tǒng)的進程以執(zhí)行系統(tǒng)調(diào)用exit() 來結(jié)束的。這個回傳值就是status值?;貍鹘o父進程,用來檢查子進程的執(zhí)行狀態(tài)。一般指令程序倘若執(zhí)行成功,其回傳值為 0;失敗為 1。
$!?:Shell最后運行的后臺Process的PID?
#!/bin/bash
echo "number:$#"
echo "scname:$0"
echo "first :$1"
echo "second:$2"
echo "argume:$@"
#運行./variable的文件 傳入?yún)?shù)aa、bb
./variable aa bb
number:2
scname:./variable
first: aa
second:bb
argume:aa bb
?5.for命令 for....in...
格式:for? 變量名? in? 列表 ; do? ?循環(huán)體? ? done
5.1以變量作為列表{初始值..結(jié)束值}:一個區(qū)間的數(shù)值
?
?
?5.2用命令生成列表?seq命令seq [初始值 步長] 終止值
seq命令格式:seq [初始值 步長] 終止值
?5.3將目錄作為列表
?6.until命令
格式:until 條件; do
statement
...
done
until命令中的條件直到滿足時則會退出循環(huán)
?7.while命令
格式:while 條件; do
statement
...
done
while命令當(dāng)條件滿足時則進入循環(huán)。
?
8.控制循環(huán)
8.1break命令
作用:退出正在進行中的循環(huán)。
如果變量i為3則退出循環(huán)
?8.2continue命令
作用:提前進入下一輪循環(huán)
將1到20和31到50之間的數(shù)相加:
9.while的特殊用法
9.1死循環(huán)
格式:while :; do
語句
done
?9.2將文件內(nèi)容逐行讀入循環(huán)中
?格式:while read 變量名; do
循環(huán)體
done < 文件
?逐行讀入/etc/passwd文件的內(nèi)容
文章來源:http://www.zghlxwxcb.cn/news/detail-764644.html
10.練習(xí)題:實現(xiàn)一個簡單的計算器
#!/bin/bash
flag="1"
while [ $flag -eq "1" ];do
echo "---shell迷你計算器---"
echo '請選擇對應(yīng)的運算數(shù)字:'
echo "1:表示加法"
echo "2:表示減法"
echo "3:表示乘法"
echo "4:表示除法"
echo "5:退出計算器!"
read num
echo "值:$num"
if [ $num -eq 1 ]
then
echo "請輸入第一個數(shù):"
read num1
echo "請輸入第二個數(shù):"
read num2
echo '結(jié)果為:'`expr $num1 + $num2`
elif [ $num -eq 2 ]
then
echo "請輸入第一個數(shù):"
read num1
echo "請輸入第二個數(shù):"
read num2
echo '結(jié)果為:'`expr $num1 - $num2`
elif [ $num -eq 3 ]
then
echo "請輸入第一個數(shù):"
read num1
echo "請輸入第二個數(shù):"
read num2
echo '結(jié)果為:'`expr $num1 \* $num2`
elif [ $num -eq 4 ]
then
echo "請輸入第一個數(shù):"
read num1
echo "請輸入第二個數(shù):"
read num2
echo '結(jié)果為:'`expr $num1 / $num2`
elif [ $num -eq 5 ]
then
echo '正在退出計算器.........'
flag="2"
fi
done
?????---shell迷你計算器---
請選擇對應(yīng)的運算數(shù)字:
1:表示加法
2:表示減法
3:表示乘法
4:表示除法
5:退出計算器!
3
值:3
請輸入第一個數(shù):
2
請輸入第二個數(shù):
3
結(jié)果為:6
---shell迷你計算器---
請選擇對應(yīng)的運算數(shù)字:
1:表示加法
2:表示減法
3:表示乘法
4:表示除法
5:退出計算器!
5
值:5
正在退出計算器.........
實現(xiàn)九九乘法表?
#!/bin/bash
#九九乘法表
#echo-e "\n"
#-n:猶如java中的橫向打印
end=9
for i in `seq 1 1 $end`;do
for j in `seq 1 1 $end`;do
if [ $j -le $i ]
then
echo -n "$j * $i=`expr $i \* $j` "
fi
done
echo
done
文章來源地址http://www.zghlxwxcb.cn/news/detail-764644.html
到了這里,關(guān)于Linux[Shell腳本]入門詳細教程的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!