shell腳本編程三種分類方式:
1、編譯語言的分類:
目前常見的編程有兩種一種是編譯運行,將源代碼通過編譯器編譯成系統可讀的語言。由于此種方式,出現錯誤不便于修復處理,后來便出現了第二種帶有項目管理程序的解釋運行方式,他能夠將一個完整的程序的所有代碼放置在多個可執行文件中,方便了以后的修復和編譯。
- 編輯運行:?源代碼需要用編譯器轉換成系統可執行的二進制程序文件,運行程序時可直接運行無需編譯器。(例如C語言是通過調用函數庫中或類庫中的函數進行編譯,運行時無需調用外部程序)
- 解釋運行:?源代碼運行時啟動一個(解釋器程序)由解釋器檢查通篇檢查完代碼以后,邊解釋邊運行。(例如腳本編程是完全借助于外部程序進行編程的。)
區別:
- [x] 編譯運行:運行時效率更高,尤其是早起電腦性能底下式。
- [x] 解釋運行:有項目管理程序,能夠將完整的程序代碼放置在多個文件中,方便程序的出錯時進行編譯。
2、編程過程中功能分類:
- shell腳本編程:?利用系統的命令及編程組件進行編程。
- 完整編程:?并不需要系統中事先存在的某種編譯語言。而是根據自己庫中的編程組件進行編譯。
區別:
- [x] shell腳本編程:需要調用外部的系統中的命令及編程組件進行編程。
- [x] 完整編程:無需調用系統中的某種編譯語言。二審根據自己褲子的
3、編程模型分類:
過程編譯語言。面向對象的編譯語言。 程序=指令+數據
- 過程式:?以指令為中心來組織代碼,數據是服務于代碼
- 順序執行:按命令行至上而下逐行運行。
- 選著執行:只執行一個程序中某一段代碼其中的一部分。
- 循環執行:把循環體中的代碼,反復執行多遍。
- 對象式:?以數據為中心來組織代碼,圍繞數據來組織指令。
區別:
- [x] 過程式:代表C,bash是面向過程的。
- [x] 對象式:要事先生成數個對象,每一個對象就相當于是一種特性的數據類型。(或特定的數據模式)編程前要實現編程許多的class(類:被可實例化的對象組成) 代表有 java,C++,pythom。
shell腳本編程:過程式編程,解釋運行是依賴于外部程序文件來運行。
如何編寫shell腳本:
腳本的第一行,需要頂格寫出shebang(解釋器的路徑),用于指明需要調用的解釋執行當前腳本的解釋器程序文件。
常見的解釋器:
- bash:—路徑位置 #!/bin/bash
- python:路徑位置 #!/usr/bin/python
- perl:— 路徑位置 #!/usr/bin/perl
linux按編譯界面可分為兩類:
- 行編譯器:sed
- 全屏幕編譯器:nano、vi、vim
編譯器注意:
- [x] 命令行運行時如果出錯可以直觀查看。
- [x] 在腳本中,一旦出現一個命令錯誤便會終止異常退出?,F實中很多命令都不是冪等性的,以免運行中不冪等性程序終止。這里就需要選著執行、循環執行、順序執行。
- [x] 并不是每個shell腳本執行出錯都會退出除非exit命令或者寫入的某種判斷機制退出。(語法錯誤也會退出的)
不冪等性:就是命令不可重復執行,如果重復執行便會報錯。例如useradd、mkdir、
冪等性:命令可以重復執行,例如echo、ls、mktemp、date、
編寫shell命令:nano
如果編寫對象存在會直接打開,如果存在便創建然后打開。
寫腳本示例:
1、創建一個/tmp/fstab
2、編輯內容?創建用戶centos?顯示系統時間 按ctrl+o(保存) ,ctrl+x(退出)
3、執行2遍查看返回值
useradd是非冪等性–多次執行報錯
date則是冪等性–可執行多次
shell腳本是什么?
:是由多個執行單一操作的命令組合堆積在一起。由于很多命令不具有冪等性,需要用程序邏輯來判斷運行條件是否滿足,以免其運行中發生錯誤。
運行腳本:
(1) 賦權執行權限,并直接運行此程序文件。?*?chmod +x /PATH/TO/SCRIPT_FILE
- /PATH/TO/SCRIP_FILE
(2) 直接運行解釋器,將腳本命令參數傳遞給解釋器。?*?bash /PATH/TO/SCRIPT_FILE
區別:
- [x] 賦權執行需要在腳本中首行頂頭位幾個字節來判斷文本類型。由標準格式#!后面指定的解釋器執行每行代碼。需要事前給與文本指定執行用戶的權限。
- [x] 直接運行解釋器無需在腳本中首行輸入指定的解釋器,是將編寫的腳本當作bash的參數來運行。也無需運行文本權限。
注意:
- [x] shell腳本中的一行的空格會被忽略,如果想要加入空格可在空格的上一行鍵入echo即可。
- [x] #號開頭的文字都會被認定為注視行被忽略。
- [x] shell腳本的運行是通過一個bash的子shell進程來實現的。
示例 :直接運行解釋
打開一個腳本文件 Notes. sh
編輯界面注意首行沒有指定外部的解釋器。每句下面一行都留有空格行還有最后一句的#號
驗證了# 、于空白行都被忽略了
示例 : 賦權執行權限
創建文件Ga. sh
編輯命令首行輸入標準格式
授權給文件執行權限并退出系統
重新登陸查看效果
bash的配置文件:
由于bash的特性避免bash的聲明周期結束時,配置文件也同時隨之結束。可以通過將bash寫入配置文件中來突破生命周期。bash的配置文件分為量兩類:
- profile類:為交互式登錄的shell的進程提供配置。
- bashrc 類:非交互式登錄的shell的進程提供配置。
登錄類型:
- 交互式登錄的shell進程:
- 直接登錄console、pst、tty、ttys、任意一種終端輸入賬號和密碼后登錄打開的shell進程,
- 使用su命令:su USERNAME 或 su – USERNAME(登錄式)執行切換。
- 非交互式登錄shell進程:
- su SUERNAME執行的用戶登錄切換。
- 圖形界面下打開的終端
- 運行腳本。
profile類文件:
Cento 系統把很多的配置文件切割成主配置文件和配置文件放置在.d 或者.sh文件中,
全局配置:?對所有用戶有效。?/etc/profile?/etc/profile.d/*.sh
用戶個人:?僅對當前用戶有效 *?~/.bans_profile
~:表示家目錄
功用:
- 1、用來定義環境變量,【將配置文件定義到profile下,每次運行時都打開】
- 2、運行命令或腳本,【也是通過profile】
bashrc類型:
用于定義本地變量和命令別名
全局:?*?/etc/bansrc
用戶個人:?*?~/.bashrc
~:表示家目錄
功用:
- 1、定義本地變量。在bansrc內,
- 2、定義別名。
shell進程加載配置流程圖:
注意:
- 僅有管理員有權限修改全局配置文件。
- 當前用戶編寫的腳本不會立即生效需,只有在下次用戶登陸進程才有效。
- 為了方便日后對腳本的管理,可以在文件特定的文件內新建一個以sh結尾的配置文件。
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/90078