1. 程式人生 > >shell編程基礎

shell編程基礎

處理 操作系統 set 生成 變量名 困難 過程 聲明變量 elf

shell編寫步驟:

  1.編寫腳本  vim first.sh

  2.編寫完成  測試腳本 bash -n first.sh

  3.賦予權限  chmod +x first.sh

  4.執行腳本 ./first.sh

ps  shell腳本學習首先需要對linux的認識,系統命令及大體結構熟悉,能夠熟練操作系統與搭建常見服務提供服務,才能夠更好地去學習Shell編程。。。

    變量:

        內存空間,在引用一個數據或者數組的時候通過變量名來調用,該空間可以回收並在此分配到不同的數據存儲,稱為變量。

        內存是編址的存儲單元,在物理內存中每一個字節都有一個唯一的地址,通過某個唯一的地址則能找到對應的某個字節,程序在執行起來稱為進程,進程的所有數據和指令都是位於內存中,在某個程序執行的過程中臨時存儲一些數據時,則需要用到變量,而這些數據中間可能會被改變的數據值,當某個數據被執行結束以後,該數據則被清除,重新把空間賦值給其他數據,所以該內存空間存儲的量不斷變化,這些變化的量都存儲在一個不斷改變其值的存儲空間當中,而這個存儲空間就是內存當中的某一段存儲空間,如麽如何能夠找到某段存儲空間的數值呢?根據內存地址則可找到,一般指的是起始地址,但是對於用戶來說,要記錄內存地址是非常困難,因為是十六進制的,因此會進程內部會有一個映射表,用變量名稱(字符串)來標識某段內存地址,對於用戶識別的是名稱,對於計算機所識別的是一段內存的地址。

      

變量的存儲: 在每一次的數據存儲時,數據的容量大小都可能不一樣,存儲2 和 2000 占用的內存容量是不一樣的, 例:存儲字符10 在計算機最小存儲單位為8bit,1和0兩個字符需要16bit 存儲數值10,十進制轉換二進制等於1010,實際上占用4bit,但計算機最小存儲單位為8字節,所以需要8bit 所以當賦值存儲數據時,事先需要確定是當字符存儲還是當數值存儲,否則占用多少存儲空間都無法斷定,因此變量是有類型的 變量類型: 指定的是存儲數據的存儲格式,變量類型直接決定了數據的存儲格式和長度 字符型: 數值型: 整形: 浮點形:帶有小數點,例:12.25,實際上浮點形的存儲方式是分開存放的,小數點前作為一個單位存放,小數點後也作為一個單位存放,而後存儲小數點的位置 邏輯運算: 與、或、非、異或 1:真 0:假 與: 只要有一個為假,結果一定為假 1 & 0 = 0 0 & 1 = 0 0 & 0 = 0 1 & 1 = 1 或: 只要有一個為真,結果一定為真 1 || 0 = 1 0 || 1 = 1 0 || 0 = 0 1 || 1 = 1 非:      非假即真 非真即使假 !真 = 假 !假 = 真 異或: 1 | 0 = 1 0 | 1 = 1 0 | 0 = 0 1 | 1 = 0

   不相同為1 相同為0    

強類型:變量在使用前,一定需要聲明變量的類型、甚至需要初始化(當申請內存空間後數據還沒有存儲時,則隨機生成原始值,所以需要初始化再存放數據,一般數值初始化為零,字符串也初始化為NULL,相當於初始為NULL,默認初始值)也可以指定初始值 弱類型:變量在用時聲明,不區分變量是數值還是字符,不需要聲明,甚至不需要區分類型,如果不區分類型,一般默認為字符串 如果需要賦值變量為數值則需要使用 let VAR_NAME=VALUE 變量名稱格式: 1、只能包含字母、數學和下劃線,並且不能以數字開頭 2、不應該與系統中已有的環境變量生命重名 3、最好做到見名知義 變量賦值:VAR_NAME=VALUE 引用變量:${VAR_NAME},又稱變量替換,引用的是變量名稱,結果得到的是變量中的數據值,在引用變量時,在沒有導致變量名稱混淆的情況下可以省略括號,否則需要加上括號 bash 變量類型: 環境變量:作用域為當前shell進程及其子進程 賦值變量方式:(又稱導出變量) 1、export VAR_NAME=VALUE 2、VAR_NAME=VALUE export VAR_NAME 本地變量:作用域為整個bash進程都可使用,當該進程結束則不可使用 賦值變量方式: VAR_NAME=VALUE 局部變量:作用域只對當前的代碼段有效 賦值變量方式: local VAR_NAME=VALUE 位置變量:用於引用腳本的參數, 引用方式:在腳本中以 VAR_NAME=$1 VAR_NAME=$2 賦值,在執行腳本同時以空格分隔跟上參數,該參數則為腳本中以 VAR_NAME=$1 VAR_NAME=$2 的變量,第一個參數為$1的變量數據值,第二個參數則為$2 的變量數據值,可以指定多個,腳本的執行參數與腳中的位置變量$N 一一對應 shift 組合位置變量用法,shift 命令用於輪調變量,同一個位置變量,引用多個參數 shift N 表示輪調N個變量,shift 2 例:1 2 3 4 5 ,則1 3 5 例: #!/bin/bash echo $1 shift echo $1 shift echo $1 # ./shift.sh 1 2 3 特殊變量:bash內置的一種變量,用於保存某些特殊數據的變量,甚至會把特殊變量稱為系統變量 $?:上一個命令的執行狀態返回值 程序執行,可能有兩類返回值: 程序執行結果 程序狀態返回代碼(0-255) 0:表示正確執行 1-255:表示錯誤執行,1,2,127為系統預留 echo $? 可以查看上一個命令的執行狀態返回值 $# :腳本的參數數量 $* :腳本的參數列表 $@ :腳本的參數列表 $$ :腳本的PID $2 :腳本的第2個參數 $0 :腳本的名字 本地變量:變量是在某個程序中使用的,或程序在運行過程中用來存儲數據,而bash則是一種特殊的程序,在運行起來的時候就可以在bash內部聲明變量,那麽bash在內部聲明變量,這個變量是與bash進程相關的,如果bash進程結束時,那麽相關的變量則結束,所以變量一定是進程的變量,因此可以在shell中直接定義變量,隨時用,隨時定義,不需要定義數據的類型,那麽在bash中再打開bash子shell時,此時在父shell定義的變量則不生效,原因是在不同的shell中,實際上是兩個不同shell的進程,所以在父shell定義的變量,在子shell中是得不到的,雖然在界面上所見到的一樣,但是在機器內部是完全不同 腳本在執行時會啟動一個當前shell的子shell進程: 命令行中啟動的的腳本會繼承當前shell的環境變量 系統自動啟動的腳本(非命令行啟動)則需要自我定義需要的環境變量 撤消變量: 在賦值變量時,實際上是set VAR_NAME=VALUE,只是set可省略 unset VAR_NAME 即可撤消變量 查看當前shell中的變量: set 即可查看當前shell中的變量,包括環境變量和本地變量 查看當前shell中的環境變量: printenv env exprot 添加變量中的數據: 例: VAR_NAME=$VAR_NAME:VALUE 添加數據到原有變量數據後 VAR_NAME=VALUE:$VAR_NAME 添加數據到原有變量數據前 添加PATH環境變量: export PATH=$PATH:/uer/local/mysql/bin 添加/uer/local/mysql/bin路徑到PATH環境變量路徑後面 export PATH=/uer/local/mysql/bin:$PATH 添加/uer/local/mysql/bin路徑到PATH環境變量路徑前面 腳本:命令的堆砌,按照實際的需要結合命令流程控制機制實現源程序 用文本編輯器編輯一個文本,並以.sh結尾 當腳本編寫完成時,系統內核是不能執行的,因為系統內核無法理解,系統內核只能夠理解ELF格式的文件,但編寫的腳本是ASCII格式的,所以需要在腳本中指定執行魔數 在腳本的第一行需要指定腳本的執行魔數(shebang ) 以#!開頭,後面跟上解釋器的路徑 #! 表示指定魔數(shebang ) #!/bin/bash 註:/bin/bash必須是個可執行解釋器程序的路徑 當腳本在執行時,把腳本提交給內核,內核執行發現錯了,不能執行,但內核會發現腳本裏面有執行魔數,則會理解該腳本是什麽格式,而後則會根據指定的執行魔數路徑啟動相對應的解釋器去解釋腳本中的命令並執行,在過程中間會出現一個錯誤,而這個錯誤由內核進行處理,而處理機制則依賴這個魔數 腳本在執行時還需要有執行權限 chmod +x filename.sh 腳本在沒有執行權限時執行 bash filename.sh 明確指定bash的腳本,使用bash解釋器執行腳本,此時filename.sh並不是執行條件,只作為bash命令的參數執行 腳本的執行方式: 1、把腳本所在的路徑加入PATH環境變量中 2、指定路徑執行 絕對路徑 /dir1/dir2/dir/filename.sh 當前目錄 ./filename.sh                       本文來自學神1705班班長關民宗原創改編

    

shell編程基礎