马哥linux2020博客,马哥linux学习(bash shell学习)
Shell原理
在操作系統(tǒng)中,最底層是硬件,而硬件上面是內(nèi)核(kemel),內(nèi)核上面是庫,庫上面是應(yīng)用程序,在眾多的應(yīng)用程序當(dāng)中,有一個(gè)shell的應(yīng)用程序,俗稱外殼,用戶是無法直接和內(nèi)核交互的,那么就必須借助shell來實(shí)現(xiàn)系統(tǒng)的調(diào)用。圖:
shell是工作在操作系統(tǒng)的最外層,而內(nèi)核(kernel)則是工作在操作系統(tǒng)的最里層,由于內(nèi)核聽不懂人類語言,而我們也記不住內(nèi)核語言,而兩者的溝通就需要shell的支持了。
2、Bash:編程
程序控制結(jié)構(gòu),調(diào)用機(jī)器上命令程序文件進(jìn)行程序編寫;
外部命令:各應(yīng)用程序提供;
程序:指令+數(shù)據(jù)
算法+數(shù)據(jù)結(jié)構(gòu)
過程式編程:以指令為中心,設(shè)計(jì)算法,數(shù)據(jù)服務(wù)于算法;
對(duì)象式編程:以數(shù)據(jù)為中心,設(shè)計(jì)數(shù)據(jù)結(jié)構(gòu)(類),程序服務(wù)于數(shù)據(jù)結(jié)構(gòu);
bash過程式編程:
順序執(zhí)行:逐個(gè)執(zhí)行
選擇執(zhí)行:只執(zhí)行其中一個(gè)分支
循環(huán)執(zhí)行:一段代碼要執(zhí)行0,1或多遍
編程元素:變量、流程、函數(shù)
變量:可變化的量,命名內(nèi)存空間
bash環(huán)境:
本地變量:當(dāng)前shell進(jìn)程;
環(huán)境變量:當(dāng)前shell進(jìn)程及其子進(jìn)程;
局部變量:某個(gè)函數(shù)執(zhí)行過程;
位置參數(shù)變量:在腳本中引用傳遞給腳本的參數(shù);在函數(shù)中引用傳遞給函數(shù)的參數(shù);
特殊變量:$?, $*, $@, $#, $$
變量類型:
數(shù)值,字符;
數(shù)值:
整數(shù)
浮點(diǎn)數(shù)
字符:
ASCII
120:
字符:1, 2, 0
數(shù)值:120 -->
變量類型的作用:
存儲(chǔ)空間
運(yùn)算
存儲(chǔ)格式
語言對(duì)變量類型的支持力度:
強(qiáng)類型:
弱類型:變量類型不嚴(yán)格區(qū)分;
默認(rèn)存儲(chǔ)機(jī)制:bash為字符
bash的變量使用特點(diǎn):弱類型、無須事先聲明;
本地變量:
name=value
name: 變量名
=:賦值符號(hào)
value:值
變量名:只能包含數(shù)字、字母和下劃線;且不能以數(shù)字開頭;
引用變量:${name}, $name
引用:
弱引用: "", 其內(nèi)部的變量引用會(huì)被替換為變量值;
強(qiáng)引用:'',其變量的變量引用會(huì)保持原有字符;
命令引用:`COMMAND`, $(COMMAND),引用命令的執(zhí)行結(jié)果;
聲明為整型:
declare -i name[=value]
let name=value
查看所有變量:set
生命周期:
創(chuàng)建
銷毀:
自動(dòng)銷毀:shell進(jìn)程終止;
手動(dòng)銷毀:unset name
環(huán)境變量:
被"導(dǎo)出"的本地變量
export name[=value]
declare -x name[=value]
查看所有環(huán)境變量:env, printenv, export
銷毀:
unset name
腳本:文本文件
運(yùn)行腳本:事實(shí)上是運(yùn)行一個(gè)bash進(jìn)程,此進(jìn)程負(fù)責(zé)從腳本文件中讀取一個(gè)執(zhí)行邏輯,而后由bash進(jìn)程負(fù)責(zé)解析并運(yùn)行此邏輯;
啟動(dòng)腳本:
(1) # bash /PATH/TO/SCRIPT_FILE
(2) 一個(gè)執(zhí)行權(quán)限,
# ./PATH/TO/SCRIPT_FILE
shebang:
#!/bin/bash
第一行:頂格給出shebang
注釋行:#
bash的常用選項(xiàng):
-n: 檢查腳本中的語法錯(cuò)誤;
-x:調(diào)試執(zhí)行腳本;
命令狀態(tài)結(jié)果:
bash進(jìn)程用于追蹤執(zhí)行的命令成功與否的狀態(tài):
0: 成功
1-255:失敗
特殊變量:
$?:上一條命令的執(zhí)行狀態(tài)結(jié)果;
布爾型:
"真":成功
"假":失敗
自定義腳本的狀態(tài)結(jié)果:
exit [n]
注意:腳本中任何位置執(zhí)行了exit命令即會(huì)終止當(dāng)前shell進(jìn)程;
條件測試:
界定程序執(zhí)行環(huán)境;
(1) 根據(jù)運(yùn)行的命令的狀態(tài)結(jié)果;
(2) 測試表達(dá)式
test EXPRESSION
[ EXPRESSION ]
[[ EXPRESSION ]]
整數(shù)測試:隱含著做數(shù)值大小比較,所以不要給變量引用加引用;
$A -gt $B:是否大于;是則為"真",否則為"假";
$A -ge $B: 是否大于等于;
$A -lt $B:是否小于;
$A -le $B: 是否小于等于;
$A -eq $B: 是否等于;
$A -ne $B:是否不等于;
字符串測試:ASCII數(shù)值越大,字符比較時(shí)其值越大;
"$A" > "$B":是否大于;
"$A" < "$B":是否小于;
"$A" == "$B":是否等于;
"$A" != "$B":是否不等于;
-z "$A":是否為空;空則為"真",否則為"假"
-n "$A":是否不空;不空則"真",空則為"假"
注意:應(yīng)該使用[[ EXPRESSION ]]
文件測試:測試文件的存在性以及屬性;
-e $file: 是否存在;存在則為"真",否則為"假";
-a $file: 同上;
-f $file:文件是否存在且為普通文件;
-d $file:文件是否存在且為目錄;
-h $file:是否存在且為符號(hào)鏈接文件;
-L $file: 同上
-b $file:是否存在且為塊設(shè)備文件;
-c $file:是否存在且為字符設(shè)備文件;
-S $file:是否存在且為套接字文件;
-p $file: 是否存在且為管道文件;
-r $file: 當(dāng)前用戶對(duì)文件是否擁有讀權(quán)限;
-w $file:當(dāng)前用戶對(duì)文件是否擁有寫權(quán)限;
-x $file:當(dāng)前用戶對(duì)文件是否擁有執(zhí)行權(quán)限;
-u $file:文件是否擁有SUID權(quán)限;
-g $file:文件是否擁有SGID權(quán)限;
-k $file
總結(jié)
以上是生活随笔為你收集整理的马哥linux2020博客,马哥linux学习(bash shell学习)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: suse linux标准c安装,suse
- 下一篇: linux 其他常用命令