[9-13]Shell系列1——基本概念

本文旨在複習Shell基本概念、編程模型、變量類型、腳本規範、語言結構、腳本執行方式
shell

Linux層次結構和Shell基本概念
express


Linux層次結構大體分爲這麼幾層編程

請注意:基本上各層次都屏蔽了底層差別性,既能管理調用底層,同時又爲上一層[或多層]服務安全

Hardware Platform:硬件層有各類各樣不一樣廠家的各類硬件接口,對上層提供服務bash

OS Kernel:內核層,屏蔽底層硬件差別,提供核心功能,調度資源運行指令程序,上層能夠進行System Call編程語言

LIB 庫文件:Kernel中的服務訪問點,爲了安全性、便利性等封裝成庫文件,上層能夠進行庫調用ide

麼是Shell:是用戶和Linux溝通的橋樑,分爲CLI Shell[bash、zsh、tsh]等,GUI Shell[Gnome、KDE等]函數


    • Shell是命令語言:能交互式地解釋和執行用戶輸入的命令,提請給內核來執行spa

    • Shell是程序設計語言:能定義各類變量參數,並提供控制結構如循環、分支、判斷等.net

    • 本系列旨在討論Shell編程的一些基礎知識和概念

      wKiom1X_fi6xHntAAAnjXO5qzWc188.bmp

Shell編程模型


高級語言編程模型主要有面向過程、面向對象,通俗來講

面向過程:分析解決問題的步驟,把代碼封裝成函數一一實現這些步驟,使用的時候一一調用

面向對象:把構成問題的事物分解成各個對象,創建對象的目的不是爲了完成一個個步驟,而是爲了描述事物在解決整個問題的過程當中所發生的行爲。

例子一個下棋的過程,說明面向過程和麪向對象。

wKiom1X_j2DCv518AAwPUJYcRuQ561.bmp

請注意:整體來講,Shell編程是面向過程的,分解實現,調用後完成自動化。但新概念提出了Shell面向對象編程


Shell變量類型


Shell中變量大體有5類

  環境變量:做用範圍當前shell進程及其子shell進程

  本地變量:做用範圍僅當前shell進程

  局部變量:當前shell進程中某個局部代碼片斷,一般是函數上下文

  位置變量:參考grep後向引用,引用腳本參數,$1 $2 $3

  特殊變量:shell程序設置的特殊變量。一部分是環境變量,有一部分是局部變量,保證了shell的正常運行。

wKioL1X_q0_jYJ7zAA0WwLioUtI144.bmp


Shell腳本規範


任何一門編程語言,都會遵循必定的編程規範,好比C語言的include等,shell也有本身的編程規範

例子:以一個shell腳本例子來講明規範

1
2
3
4
5
6
7
8
9
10


#!/bin/bash

#Author:By Lance,2015-09-21 13:37:03
#Functions:Shell Script specification

cat "/etc/system-release"      --->填充命令
if [ expression ];then                    --->填充判斷條件

   statement1

fi

....

source

注意點:

     <1>開頭必須指定shebang[魔術],即代表該文件的格式,一般保存爲*.sh

     <2>註釋信息:一般做者、時間、做用、描述等,但不侷限於此,不建議中文註釋

     <3>內容部分:可填充各類命令、語言結構、條件判斷、分支等等,實現邏輯增強

     <4>代碼縮進,易讀,尤爲是成對出現的經過縮進相同長度,更加直觀可讀

     <5>成對符號、流程控制建議一次寫完,避免遺漏,先總體後細節


Shell語言結構


同大多數高級語言,有3種語言結構,可組合使用

     ● 順序結構 --> 默認法則,逐條執行語句

     ● 選擇結構 --> 分支,進行條件判斷,符合條件的分支予以執行;不符合的略過

     ● 循環結構 --> 將同一段代碼反覆執行有限次,直到知足跳出條件,不然是死循環

wKioL1X_nzbgEErUAAu0eEp29xE866.bmp

Shell腳本執行方式


一般腳本執行方式有3種

 ● ./test.sh執行,前提條件進程發起者對該文件有x權限,本質是經過調用一個新shell進程來運行,注意變量改變

    wKioL1X_oiCyMGnAAARu-OWW4Q4138.bmp

 ● bash test.sh執行,本質上是調用bash命令,將test.sh做爲該命令的參數來執行,該shell腳本能夠無需x權限

    wKiom1X_n9OCveS-AAMIMAkbGJA135.bmp

  ● source test.sh. test.sh[.後有空格] 將shell腳本導入當前shell進程來執行,注意變量也會導入當前shell進程

    wKioL1X_of7zxq7jAAQV-Iz_wOY763.bmp

相關文章
相關標籤/搜索