目錄
前言
一、概述
(一)、shell腳本基礎概念
(二)、shell的類型
二、Shell變量
(一)、組成
1.變量名
2.變量值
(二)、類型
1.系統內置變量(環境變量)
2.自定義變量
3.預定義變量
?4.位置變量
5.作用域? ? ??
?6.shell中的字符串? ? ??
三、運算符
(一)、數學運算
(二)、比較運算? ? ?
1.邏輯運算符
2.條件測試
3.字符串比較
4.數值比較
5.文件比較
四、shell腳本
(一)、shell腳本編寫規范?? ??? ?
(二)、shell運行規則
(三)、shell腳本運行追蹤
總結
前言
shell是一個用 C 語言編寫的程序,它是用戶使用 Linux 的橋梁。Shell 既是一種命令語言,又是一種程序設計語言。
Shell 是指一種應用程序,這個應用程序提供了一個界面,用戶通過這個界面訪問操作系統內核的服務。
Shell屬于內置的腳本,程序開發的效率非常高,依賴于功能強大的命令可以迅速地完成開發任務(批處理)語法簡單,代碼寫起來比較輕松,簡單易學。
一、概述
(一)、shell腳本基礎概念
腳本就是將手動一次性執行的命令進行規范且自動化
(二)、shell的類型
shell ????????命令解釋環境
類型有
?? ?sh
?? ?ash
?? ?bsh
?? ?csh
?? ?bash
?? ?tcsh
?? ?dsh
?? ?zsh
在Linux系統中
文件名.sh ??? ????????.sh是linux下bash shell 的默認后綴
查看系統中支持的shell
?? ?cat /etc/shells
查看系統默認shell
?? ?echo $SHELL
二、Shell變量
(一)、組成
1.變量名
不會變化
聲明規范
?? ?不能是數字或數字開頭
?? ?以_或字母開頭
?? ?變量名中不能包含特殊字符
聲明方法
?? ?駝峰式????????????????userName
?? ??? ?
?? ?雙駝峰????????????????UserName
?? ??? ?
?? ?shell寫法
?? ??? ?user_name
?? ??? ?username
?? ??? ?USERNAME
2.變量值
????????不斷變化
????????數字、字符
(二)、類型
1.系統內置變量(環境變量)
這種變量中主要保存的是和系統操作環境相關的數據,一般對系統起作用的環境變量的變量名是系統預先設定好的。
env可在/etc/profile文件中修改
???
查看環境變量
echo $PATH
顯示當前環境變量的值
echo $LANG
?表示系統的默認語言環境為美式英語(English, United States)并使用UTF-8編碼
查看當前的區域設置
locale
查看遠程連接
echo ?$SSH_CONNECTION
2.自定義變量
這種變量是最常見的變量,由用戶自由定義變量名和變量的值。
varName=varValue
等號兩邊不能有空格
字符串
?? ?shell中可以不使用引號
?? ?當包含有空格時,需要使用引號
引號的用法
不會引用變量值 | 單引號????????' |
會應用變量值 | 雙引號????????" |
引用命令結果 | 反撇號????????` |
$(命令) | 應用場景較多 |
3.預定義變量
是Bash中已經定義好的變量,變量名不能自定義,變量作用也是固定的。
$0 | 腳本本身的名稱 |
$# | 腳本后參數的個數 |
$* | 腳本運行時參數的內容(整體輸出) |
$@ | 腳本運行時參數的內容(逐個輸出) |
$? | 腳本運行完畢后的返回值 |
默認情況大 | 0? ? ? ? ? 成功 |
非0? ? ? 失敗 |
??
?一般情況下失敗為1,特殊的失敗
?4.位置變量
這種變量主要是用來向腳本當中傳遞參數或數據的,變量名不能自定義,變量作用是固定的。
? ? 腳本后參數所在的位置
?? ?$1
?? ?...
?? ?$9? ? ? ?
?? ?
?
5.作用域? ? ??
輸出????????echo $varName
默認變量只在當前shell下生效
若要在當前及其子shell下生效,需要聲明為全局變量(export)

??
?? ??? ?
??
? 6.shell中的字符串? ? ??
string
?1)獲得字符串的長度?????????
語法:?? ?${#StringName}
2)字符串取子串?? ??? ?
語法:?? ?${#StringName:position:lenght}?? ???
注意:lenght沒有定義時,一直取到字符串的結尾! ?
3)字符串的截取? ? ? ? ??
a.從左至右截取最后一個匹配字符串string之后的所有字符串?? ??? ??? ??? ?
語法:?? ?${StringName##*string}?? ?
b.從左至右截取第一個匹配字符串string之后的所有字符串
語法:?? ?${StringName#*string}
c.從右至左截取最后一個匹配字符串string之后的所有字符串
語法:?? ?${StringName%%string*}?? ?
d.從右至左截取第一個匹配字符串string之后的所有字符串
語法: ${StringName%string*}
4)字符串的拼接
語法:?? ?StringName3=${StingName1}${StringName2}
5)字符串替換:
語法:?? ?${StringName/OldString/NewString}
三、運算符
(一)、數學運算
+ - * / %??? | * 作為乘號時需要加轉義符為\* |
運算方法 | |
?expr | expr $a + $b |
$((a+b)) | echo $((a+b)) |
$[a+b] | echo $[a+b]? |
注意 | shell不支持浮點數的顯示 |
\r | 回車符 |
\d | 垂直制表符 |
\v | 水平制表符 |
??
(二)、比較運算? ? ?
1.數值比較
-eq | 等于 |
-ne? ? | 不等于 |
-lt | 小于 |
-le | 小于等于 |
-gt | 大于 |
-ge | 大于等于 |
用test測試
2.文件比較
-e | 文件或目錄是否存在 |
-f | 是否為文件 |
-d | 是否為目錄 |
-r | 判斷文件是否可讀 |
-w | 判斷文件是否可寫 |
-x | 判斷文件是否可執行 |
?
3.字符串比較
= | 字符串一致 |
!= | 字符串不一致 |
-z | 字符串為空 |
! ? ? -z | 字符串不為空 |
4.邏輯運算符
&& | 并且,有假則假,全真為真 | |
|| | 或者,有真則真,全假為假 | |
! | 取反 | 有真則假,有假則真 |
??
5.條件測試
&& | [ $a -ne $b ] && ?echo OK | 條件 && 輸出結果 |
條件為真輸出 | ||
|| | [ $a -ne $b ] || ?echo OK | 條件 || 輸出結果 |
條件為假輸出 |
四、shell腳本
(一)、shell腳本編寫規范
?? ??? ?
第一行 | #!/bin/bash |
第二行 | #腳本的說明 |
第三行 | ?腳本正文 |
(二)、shell運行規則
沒有x權限 | bash ?腳本所在路徑/腳本文件 |
source 腳本所在路徑/腳本文件 | |
.(點)腳本所在路徑/腳本文件 | |
有x權限 | .(點)/腳本文件 |
腳本絕對路徑/腳本文件 |
不打斷會一直查看?
(三)、shell腳本運行追蹤
shell腳本運行追蹤bash -x 腳本所在路徑/腳本文件
?? ?
$[$RANDOM%100]返回100內隨機數
?? ?
seq 1 10返回1到10 的連續數字
?? ?
{1..10}返回1到10 的連續數字
?? ?
seq 1.1 10.1返回1.1 2.1 3.1.... 10.1
?? ?
read -p "提示語" 變量名讀取鍵盤輸入并賦值給變量名
?
總結
今天的任務量有些重,但知識點是看懂和編輯Shell腳本的基礎,需要花費時間進行反復背記,加油吧!