初識shell腳本編程

shell的編程三種分類方式介紹,如何使用nano命令編寫一個腳本命令,及腳本命令運行的2種方式。bash的配置文件及系統啟動時加載配置文件的順序流程

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

image

2、編輯內容?創建用戶centos?顯示系統時間 按ctrl+o(保存) ,ctrl+x(退出)

image

3、執行2遍查看返回值

useradd是非冪等性–多次執行報錯
date則是冪等性–可執行多次

image

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

image

編輯界面注意首行沒有指定外部的解釋器。每句下面一行都留有空格行還有最后一句的#號

image

驗證了# 、于空白行都被忽略了

image

示例 : 賦權執行權限

創建文件Ga. sh

image

編輯命令首行輸入標準格式

image

授權給文件執行權限并退出系統

image

重新登陸查看效果

image


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進程加載配置流程圖:

image

image

注意:

  • 僅有管理員有權限修改全局配置文件。
  • 當前用戶編寫的腳本不會立即生效需,只有在下次用戶登陸進程才有效。
  • 為了方便日后對腳本的管理,可以在文件特定的文件內新建一個以sh結尾的配置文件。

本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/90078

(0)
N28_剛好遇到小熊貓N28_剛好遇到小熊貓
上一篇 2017-12-14 20:20
下一篇 2017-12-15 10:07

相關推薦

  • N25-Week9

    1. 寫一個腳本,判斷當前系統上所有用戶的shell是否為可登陸shell(即用戶的shell不是/sbin/nologin);分別統計這兩類用戶的個數,通過字符串比較來實現 #! /bin/bash#寫一個腳本,判斷當前系統上所有用戶的shell是否為可登陸shell(即用戶的shell不是/sbin/nologin);#分別統計這兩類用戶的個數#通過字符…

    Linux干貨 2017-03-10
  • lvs的基本概念及基礎配置

    一、知識整理 1、Session:在計算機中,尤其是在網絡應用中,稱為“會話控制、時域”。Session 對象存儲特定用戶會話所需的屬性及配置信息。這樣,當用戶在應用程序的 Web 頁之間跳轉時,存儲在 Session 對象中的變量將不會丟失,而是在整個用戶會話中一直存在下去。當用戶請求來自應用程序的 Web 頁時,如果該用戶還沒有會話,則 Web 服務器將…

    Linux干貨 2016-11-11
  • 文件管理

    echo“- – -”>/sys/class/scsi_host/host2/scan掃描新裝的硬盤,不需要重啟 磁盤管理三大步驟:分區,管理,掛載 設備文件創建mknob cdrom /mnt/cdrom 并行接口針多,但是傳的速度過快,會對數據造成干擾 vLinux的數據一般都存儲在分區空間里 學習linux的磁盤管理就必須:…

    Linux干貨 2016-11-27
  • mysqld_multi 多實例部署

    序言:多實例?Why?   隨著硬件層面的發展,linux系統多核已經是普通趨勢,而mysql是單進程多線程,所以先天上對多進程的利用不是很高,雖然5.6版本已經在這方面改進很多,但是也沒有達到100%,所以為了充分的利用系統資源,mysql有自己的補充,那就是可以部署多實例,一個實例一個端口。     1,準備好mysql環境…

    2017-11-16
  • Linux的終端類型

    一、了解終端   在早期的年代,主機不是很多,都是一系列的大型主機,簡單來說就是用戶很多,但主機很少,不可能做到人手一臺,但可以在主機上連接一個分屏器,在分屏器上可以連接鼠標鍵盤以及顯示器,這些東西是沒有計算能力的,僅僅擔任輸入和輸出的工作,運算和處理都是由主機來完成的。   簡單來說終端是用戶與主機交互,是必然用到的…

    Linux干貨 2016-10-14
  • case條件判斷語句

    條件判斷: case語句     在shell編程中,對于多分支判斷,用if 雖然也可以實現,但有些時候,寫起來很麻煩,也不容易代碼理解。這個時候,可以考慮case。 case 變量引用 in PAT1) 分支1 ;; PAT2) 分支2 ;; … *) 默認分支 ;; esac case語句結構特點如下:…

    Linux干貨 2016-08-16
欧美性久久久久