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