01 shell程式設計規範與變數

彈指流沙間發表於2018-06-06

前言:

大家對shell指令碼應該都不算陌生了,如果突然問你什麼是shell指令碼?是幹什麼用的?由什麼組成以及怎麼使用?變數的概念是什麼?作用範圍是什麼?變數間的算術運算怎麼表示?你能很容易答出來嗎

本文整理自博主當年的學習筆記,若有疏漏歡迎指正!

Shell程式設計規範與變數

學習目標:

掌握shell指令碼程式設計規範

掌握管道,重定向,變數

目錄結構:

 

 

 

Shell指令碼的概念

  1. 將要執行的命令按順序儲存到一個文字檔案
  2. 給檔案可執行許可權,便可執行。
  3. 可以結合各種shell控制語句以便完成更復雜的操作
  4. 指令碼檔案一般以.sh結尾,執行指令碼的命令是sh

 

Shell指令碼應用場景

  1. 重複性操作
  2. 批量事物處理
  3. 自動化運維
  4. 服務執行狀態監控
  5. 定時任務執行
  6. ……

 

Shell指令碼的組成

1、 指令碼宣告 #!/bin/bash一般是這樣的

2、 註釋資訊 以#開頭註釋指令碼大概情況

3、 可執行語句 就是指正文,命令的疊加

 

編寫shell指令碼

[root@poll ~]# vi a.sh   //編輯指令碼檔案,指令碼檔案一般都是以.sh結尾的

#!/bin/bash   //宣告這是·一個指令碼

#This is my first shell-script   //註釋一般用來記錄指令碼的功能

#2018-03-16   //註釋 記錄指令碼時間

cd /boot   //切換到/boot目錄下

echo "當前目錄位於:"   //顯示雙引號內的內容

pwd   //顯示當前目錄

echo "其中以vml開頭的檔案包括:"   //顯示雙引號內的內容

ls -lh vml*   //執行命令

 

注意:有互動用read -p 沒有用echo

Shell指令碼的執行方式

1、 絕對路徑

2、 相對路徑

3、 sh指令碼

4、 source指令碼

shell指令碼變數揭祕

變數概念與分類

變數的概念:

1、 變數用來存放系統或使用者需要使用的特定引數或者值

2、 變數的的值可以根據使用者設定或者系統環境的變化面相應變化

3、 在shell指令碼中使用命令可以使指令碼更加靈活,適應性更強

 

變數的分類:

 自定義變數:由使用者自己定義,修改和使用

 環境變數:由系統維護,用於設定系統環境

 位置變數:通過命令列給指令碼程式傳遞引數

 預定義變數:bash中內建的一種變數,不能直接修改

 

變數的定義與輸出

定義一個新的變數

格式:變數名=變數值

變數名以字母或者下劃線開頭

區分大小寫

 

賦值可使用引號

雙引號:允許通過$符號引用其他變數值

單引號:禁止引用其他變數值,$視為普通字元

反撇號``或$():命令替換,提取命令的執行結果

 

輸入輸出

輸入格式:read [-p “提示資訊”] 變數名

輸出格式:echo $變數名

 

變數作用範圍

l  ’預設情況下,新定義的變數只在當前shell環境中有效,因此稱為區域性變數

l  當進入子程式或新的子shell環境時,區域性變數無法再使用

l  為了使使用者定義的變數在所有的子shell環境中能夠繼續使用,減少重複設定工作,可以通過內部命令export將制定的變數匯出為“全域性變數”

格式1:export 變數名…

格式2:export 變數名=變數值 …

兩種格式可以混合使用

 

變數的算術運算

l  變數的數值運算多用於指令碼程式的過程控制

l  只能進行簡單得整數運算,不支援小數運算

l  整數值得運算主要通過內部命令expr進行

l  格式

expr 變數1 運算子 變數2 [運算子 變數3]

l  +:加法運算

l  -:減法運算

l  \* :乘法運算,注意不能僅使用“*”符號,否則將被當成檔案萬用字元

l  /:除法運算

l  %:求模運算,又稱為取餘運算,用來計算數值相除後的餘數

 

例項:

[root@poll ~]# x=35

[root@poll ~]# y=16

[root@poll ~]# expr $x + $y

51

[root@poll ~]# expr $x - $y

19

[root@poll ~]# expr $x \* $y

560

[root@poll ~]# expr $x / $y

2

[root@poll ~]# expr $x % $y

 

預定義變數

l  預定義變數是由bash程式預先定義好的一類特殊變數,使用者只能使用預定義變數,而不能建立新的預定義變數,也不能直接為預定義變數賦值

l  預定義變數使用“$”符號和另一個符號組合表示

l  $*  $@

儲存了指令碼要處理的所有引數

l  $0

儲存了指令碼的名稱

l  $?

儲存著命令或者指令碼執行狀態碼,上一條命令執行成功結果顯示0

l  $#

儲存了指令碼要處理的引數個數

位置變數

l  為了在使用shell指令碼程式時,方便通過命令列為程式提供運算元,bash引入了位置變數的概念

l  位置變數有$0,$n,n為1~9之間的數字

l  $0:第一個欄位表示命令名或指令碼程式名

l  $1為指令碼要處理的第一個引數,$2為第二個引數,……

l  Shell指令碼最多可以直接處理9個引數

 

環境變數

l  環境變數指的是出於執行需要而由Linux系統提前建立的一類變數,主要用於設定使用者的工作環境

l  使用env命令可以查到當前工作環境下的環境變數

l  PATH環境變數用於設定可執行程式的預設搜尋路徑

l  環境變數的全域性配置檔案為/etc/profile,每個使用者還有自己的獨立的配置檔案~/.bash_prpfile

 

 

這是shell程式設計初步接觸,後續發各種shell程式設計語句。下面有一個簡單的指令碼樣例

------一個小計算器-----

 

#!/bin/bash

#this

 

read -p "請輸入第一個整數:" ONE

read -p "請輸入第二個整數:" TWO

read -p "請輸入運算子:" TH

echo "$ONE$TH$TWO=$(($ONE $TH $TWO))"

 

 

相關文章