Shell-03
Shell-03 編程原理
最開始的編程 機械碼(16進制)—CPU會識別
計算機只能識別二進制指令 程序 = 指令 + 數據
驅動:
硬件默認是不能使用的 驅動程序----不同的廠家硬件設備之間需要進行指令溝通,需要驅動程序來進行“翻譯”;更趨近于硬件的開發工程師,要學習“匯編語言”;而“匯編語言”被廠家所限制;
底層語言:C語言和C++ 匯編語言
操作系統:分配硬件資源來進行進程管理
現在的編程是基于高級語言,以及超高級語言,更好的是讓程序員能夠實現編程功能
CPU控制硬件
編程語言的分類:
??? 高級語言、以及超高級語言需要翻譯成計算機可讀的語言(二進制指令)
??? 解釋型:shell語言 python ?perl(logo是駱駝)
???????????? 逐行翻譯,逐行執行---解釋一行執行一行
???????????? Bash –x 逐行執行并顯示(默認也是逐行執行)
???????????? Bash –x filename.sh
編譯型:C語言 C++ C#
???????? 一次編譯,全部執行
Java即是編譯型也是解釋型
根據服務重心的不同分為面向過程編程和面向對象編程
面向過程? 側重于指令
面向對象? 側重于數據的編程語言 對象是數據
???????? 編程語言的執行方式:
????????????????? 【一行一行執行】
(1)????? 順序執行 依次執行,依次翻譯
(2)????? 循環執行 for(遍歷) while(循環條件) unitl(和while相反,false進入循環)
(3)????? 選擇執行—分支結構 if ?case
函數遞歸-----算階乘
(1)????? 邏輯關系
添加用戶test到test10
for I in $seq(1,10);do
??? user=test$i
??? pwd=`123456`
??? p=cat /etc/passwd | grep “$user” &> /dev/null
??? if [$? –eq 0 ];then
???????????? echo “存在”
??? else
???????????? useradd $user6
???????????? echo “123456” | passwd –stdin “$user” &> /dev/null
??? fi
done
?
?
如上一種判斷條件是有問題的,修改如下圖所示:
?
?
但是,在接收參數時,$i只代表了100,所以用$*代替,如下圖所示:
?
?
羅塞塔石碑-----------一種美國多媒體語言教學軟件
3.Shell語句介紹
(1)Shell語句是面向過程的,側重于指令集;
優點:調用os(操作系統)的命令行,來實現所有功能,執行效率高
缺點:沒有庫調用(區分python,python可以調用各種模塊接口)
(2)Shell語句的基本結構組成:
???????????? 命令----基礎
每天備份一次/etc目錄下的所有文件 ?腳本
date=`date +%F`
if [ -f /tmp/${date}etc.bak ];then
tar czf /tmp/${date}etc.bak /etc/
fi
???????????? 數據----變量----(全局變量、局部變量、本地變量、傳參)
/etc/profile----環境變量/全局變量
export
???????????? 邏輯關系
???????????????????? Shell腳本的第一句話!!!!!!!!!!(必須寫)
???????????????????? #!/bin/bash-------定義腳本解釋器
??????????????????????????????????????????? #!-----shebang符號
??????????????????????????????????????????? /init----讀取運行級別
??????????????????????????????????????????? 藍色鏈接文件(鏈接到執行文件上) ?綠色執行文件
??????????????????????????????????????????? Chkconfig----控制開機啟動 ?
????????????????? /etc/shells------查看當前系統支持的shell程序
????????????????? /sbin/nologin----虛擬用戶用來跑服務 ?
1-499是虛擬用戶 0 root 500以后是普通用戶
????????????????? echo $SHELL –--查看當前會話的shell程序
/etc/passwd ----制定了用戶默認支持的shell程序(/sbin/nologin)
Shell的執行:
???????? (1)Bash命令來執行腳本
????????????????? -n----查看shell腳本的邏輯錯誤(注意:單詞寫錯是不管的)
????????????????? -x----逐行顯示執行的腳本程序(方便排除錯誤)
???????? (2)授權 chmod u+x filename.sh
????????????????? 使用全路徑執行腳本即可
4.變量
???????? $HOME 環境變量
????????????????? ?? 局部變量 declare—定義變量類型 變量是命名的內存空間,用來存儲數據
????????????????? ?? 本地變量 local在函數中使用,只在函數之中有效
變量類型:
數值型:
整型:int在shell腳本中盡量不要進行較大的整型運算,否則會出現數值溢出
????????????????? 浮點型 float
????????????????? 布爾值 1/0(真/假)true/false
???????? ? 字符串:
普通字符及字符串
數組
????????? 基于字符串的類型的編程語言的分類:
????????????????????????? 強類型語言---數值必須被定義才可以可以進行處理或運算
????????????????????????? 弱類型語言---例如python,編程語言可以自動識別變量類型
????????????????? 【*多態*】一個數據具有多種屬性,最后使用的屬性取決于最后和它運算的數據
傳參
?????? $? ---- 上一條命令的執行狀態 0正確 1-255錯誤
?????? $1 $2 … ${10} ------ 命令后面傳入腳本的數據,以空格為分隔符
?????? $# -------- 統計傳參數量 ${$#} ---- 取該條命令的最后一個傳遞的參數
?????? $* -------- 表示所有傳參,所有的傳參以字符串的形式輸出
?????? $@ ------- 表示所有的傳參,所有的傳參以列表的形式輸出
?????? 【工作中要對所有的傳參進行操作的時候,就要考慮$*和$@】
???????? 定義變量格式:??? 一個等號叫賦值,兩個等號相當于-eq??????
????????????????? NAME=VALUE ? shell腳本中不要敲空格
????????????????? declare---定義變量類型 -i----定義變量為整數
???????????????????????????????????????????????????????????? ?-a-----數組
????????????????? ??????????????????????????????????????????? -l---大寫轉換小寫
???????????????????????????????????????????????????????????? -r---只讀
???????? 變量命名:
???????? ?????????????????????????
5.test文件測試、條件判斷
???????? 在腳本中,我們需要進行語句的分支;說白了就要進行判斷,判斷基于要使用test
???????? test使用格式:
常見的test選項:
-eq 等于
-ne 不等于
-gt 大于
-ge 大于等于
-lt ?小于
-le? 小于等于
????????????????? 2.判斷選項
????????????????????????? ?-f? 判斷是否為普通文件
????????????????????????? ?-d? 判斷是否為目錄文件
???????????? -L? 判斷是否為鏈接文件
???????????? -r -w -x --- 判斷文件是否具有讀寫執行權限
?
?
????????????????? 3.關聯選向
????????????????????????? -o 或
????????????????????????? -a 與
????????????????????????? !? 非
4.字符串判斷
?
= 判斷兩邊的字符串是否相等 -eq是判斷數值是否相等
!= 不等于
-z 判斷字符串長度是否為0,長度為0是假;換種說法,判斷字符串是否存在
-n 和-z相反 存在為假 不存在為真
5.邏輯運算
???????? 與 && 兩邊的命令都為真結果為真
???????? 或 ||? 兩邊的命令一邊為真就是真 同時為假就是假
???????? 非 !=
???????? 這個邏輯運算符,前后對接的都是單獨存在的命令;
???????? [ $? -eq 0 ] && exit 0 || exit 1
6.算術運算
???????? let 1+1 let i++
???????? expr 1*1
???????? $[$1 + 10]
???????? $(($1/$2))
???????? + - * / %
**(冪)
?
?
?
?
?
?
轉載于:https://www.cnblogs.com/KAJIA1/p/11348111.html
總結
- 上一篇: 抗日战争中牺牲的最“懦弱”的日本“军神”
- 下一篇: better-scroll 的介绍