shell腳本編程基礎

shell腳本編程基礎以及一些基本的邏輯運算知識和shell的配置用戶環境。

編程基礎

一個程序的基本格式是由“指令+數據”組成,有些程序編程側重于指令,數據服務于指令,我們稱之為過程式編程(JAVA、C語言等)。而我們所學習的shell編程是以數據為中心,以指令服務于數據的對象式。

shell腳本基礎

一個符合特定格式并包含包含命令和說明的文本文件。

首行格式:shebang機制

每個shell腳本的第一行必須遵循shebang機制,以bash腳本為例 ,首行開頭必須是“#!/bin/bash”,通過這個機制我們可以初步了解是何種類型的腳本。

在腳本中以“#”開頭的行都表示注釋,便于說明腳本的每一步操作。這些行在運行腳本是不會顯示。

我們可以通過vim編輯器創建腳本,腳本格式

其中第一行是shebang機制,第二行是對腳本的簡單說明,第三行是命令來顯示“it is a simple script”。保存后,一個基本的腳本就完成了。這時的腳本還不可用,還需給予執行權限后方可執行。執行效果如下:加權限

這就是腳本的最基本形式。

在編寫完腳本后,我們可以通過“bash -n”來檢測是否存在語法錯誤。

腳本的用途

自動化常用命令
?執行系統管理和故障排除
創建簡單的應用程序
處理文本或文件

編程的基礎知識

變量的基本概念

變量是一種使用方便的占位符,用于引用計算機內存地址,該地址可以存儲腳本運行時可更改的程序信息。變量通常用在腳本中的賦值運算,文本表示中。

在bash中使用的變量都是弱類型變量(不需事先指定類型,默認字符型,在進行計算時自動進行轉換,)且不支持浮點數。

變量的命名規則:

不可使用程序中的保留字,避免混淆

不可以數字開頭

通俗易懂,見名知意

駝峰命名法

幾種不同的變量

(1)局部變量:僅在當前shell范圍下生效。對子shell無效,通過“set”查看所有變量,通過“unset name”刪除指定的變量。

(2)環境變量:在當前shell及子shell范圍下生效。通過“export”和“declear -x”來定義環境變量,可通過“env”,“printenv”,“export”和“declare -x”來查看所有環境變量。

(3)本地變量:又稱為常量,不可修改或刪除。通過“readonly”和“declear -r”來定義本地變量,可通過“readonly -p”來查看所有本地變量。

(4)位置變量:在腳本中需要多個參數時,每一個變量所對應的參數。

$1表示第一個參數,$2表示第二個參數……;$#表示所有參數的個數;$0表示腳本的名稱($0表示完整路徑,‘basename $0表示基名’);$@和$*都表示所有參數,不同的是$@是將所有參數都作為獨立的參數而$*將所有參數看成一個整體。

shift[n]可使第n+1個參數替換第一個參數,第n+2個參數替換為第二個參數,以此類推。“set –”可清除所有位置變量。

算術運算

+ (加)? -(減)? *(乘)?? /(除)? **(乘方) %(取余)

算術運算

let var=算數表達式(可不加’$’)

var=$[算術表達式](加$)

var=$((算術表達式))(加$)

增強型賦值

i+=3?? 等同于?? i=i+3

i++ ? ? 等同于? i=i+1(先取值再+1)

++i?? 等同于???? i+1=i(先+1再取值)

邏輯運算

true=1,false=0

或(|)?????????????????????????????????????????? 與(&) ? ? ? ? ? ? ? ? ? ? ? ? ? 非(?。?/p>

0|0=0 ? ? ? ? ? ? ? ????????????????????????? 0&0=0??????????????????????????????????? !0=1

1|0=1?????????????????????????????????????????? 1&0=0??????????????????????????????????? !1=0

0|1=1?????????????????????????????????????????? 0&1=0

1|1=1?????????????????????????????????????????? 1&1=1

短路運算

短路或(||)

cmd1||cmd2? 當cmd1為1時將不執行cmd2,當cmd1為0時執行cmd2。

短路與(&&)

cmd1&&cmd2 當cmd1為0時將不執行cmd2,當cmd1為1時執行cmd2。

異或(^)

相同為0,不同為1。

條件測試

在腳本中根據默寫特定的需要來測試命令是否執行時,可使用條件測試來確定是否執行。

測試命令:

[??? ]

[[ ? ]]

中括號的兩邊需空格

可以進行數值測試

數值比較

也可以進行字符串測試字符串測試

其中“[[? ? =~? ? ]]”支持擴展正則表達式

擴展

還可以測試文件類型以及文件權限等。

使用read命令來接受輸入

從標準輸入中讀取數值,將每個數值分配給一個變量,所有剩余的單詞都被分配到最后一個變量。重定向輸入時,默認read只會讀取重定向的第一行。

bash命令行的優先級定義

把命令行分成單個命令詞
展開別名
?展開大括號的聲明({}
展開波浪符聲明(~
命令替換$()
再次把命令行分成命令詞
展開文件通配(*、 ?[abc]等等)
準備I/0重導向(<、 >
運行命令

bash的配置文件

用戶登錄時讀取的配置文件,針對所有用戶的配置文件存放在“/etc/profile、/etc/profile.d/*、/etc/bashrc中”,個人配置文件存放在“~/.bash_profile和~/.bashrc中”

 

 

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

(0)
yoyiccccyoyicccc
上一篇 2017-11-26
下一篇 2017-11-26

相關推薦

  • keepalived雙主模型的實現

    一、簡介  keepalived 簡介:是服務器高可用的一個重要軟件,它的核心組件有vrrp ,stack, checker ,ipvs, warpper, watch dog  它是vrrp協議的實現,原生設計目的為高可用ipvs服務;keepalived能夠通過配置文件中定義生成ipvs規則 并能夠對RS的健康狀態進行檢測;vrrp_…

    Linux干貨 2014-05-22
  • Linux 根文件系統層級結構

    一、Linux根文件系統層級結構圖 二、Linux根文件系統目錄說明

    Linux干貨 2016-09-26
  • vim編輯器

    vim編輯器:          文本:ASCII, Unicode(全球統一編碼格式)          文本編輯種類:       &n…

    Linux干貨 2016-08-10
  • 推薦-tree命令的安裝和使用

    一、前言     tree命令是可以把指定文件夾的所以文件用樹狀羅列出來,呈現目錄形式的一個命令。在Centos 6.5中默認不能直接使用: 輸入type tree命令(type COMMAND:區別是內建命令還是外部命令)提示不存在: 二、安裝       …

    系統運維 2016-03-27
  • 一鍵搭建mysql集群系列二

    mysql 5.7  主從復制 本節是在上一節的基礎之上做的操作,上節我們通過腳本實現了一鍵自動化安裝mysql5.7,這次我們要在三臺機器上部署msyql5.7,并實現主從復制,實現的宗旨是,能自動化,就盡量自動化,實在不能自動化,那就手工化 用的腳本和文件說明1.install_mysql.sh 自動化安裝mysql腳本2.ntpdate.sh 時間同步…

    2017-05-21
  • Linux基礎之正則表達式

    正則表示式語法及在grep命令中的引用

    2017-09-09
欧美性久久久久