一 變量shell
變量:本質上是程序中保存用戶數據的一塊內存空間,變量名就是內存空間地址。數組
Shell中:變量可有字母數字和下劃線組成,只能以字母或下劃線開頭。bash
命名:PATH=/sbin函數
JAVA_HOME=」/usr/lib」命令行
(變量名區分大小寫)code
在shell中,變量的數據類型無需顯示低聲明,變量的數據類型會根據不一樣操做有所變化。ip
(shell變量部分數據類型,統一按字符串存儲,但根據變量的上下文環境,容許程序執行一些不一樣操做)。爲了能執行加減法計算,shell爲自動進行數據類型的轉換,若是遇到含義非數字的字符串,則該字符串被轉換成整數0。同時,在空串以及沒有定義變量的狀況下,變量值都會被轉換爲整數0。內存
例如,n=「」 echo 「n=$n」作用域
Echo 「p=$p」字符串
1.1變量的定義:
Shell中能夠直接使用變量,無需定義,若是變量的值包含空格,必定要用引號引發來。
declare attribute variable(控制變量相關屬性)
attribute 表示變量屬性,variable表示名稱,屬性有:
-p:顯示全部變量值
-i:定義爲整數
-r:定義爲只讀變量
-a:定義爲數組變量
-f:顯示全部自定義函數,包括名稱和函數體
-x:變量設置成環境變量,隨後的腳本和程序能夠使用
例子:
x=6/3
echo "$x" //6/3
#定義變量x爲整數
declare -i x
echo "$x" //6/3,由於shell中全部數據都當作字符串存儲
#將算術式賦給變量x
x=6/3
echo "$x" //2,變量聲明爲整數後,能夠進行算術運算
#將字符串賦給變量x
x=hello
echo "$x"
#將浮點數賦給變量x
x=3.14
echo "$x" //報錯,bash不支持浮點數
#取消變量x的整數屬性
declare +i x
#從新將算術式賦給變量x
x=6/3
echo "$x"
#求表達式的值
x=$[6/3]
echo "$x" //2,獲得算術值得兩種方法,方括號
#求表達式的值
x=$((6/3)) //2,獲得算術值得兩種方法,圓括號
1.2 引號
單引號(‘’):括起來的字符做爲普通字符
雙引號(「」):括起來的字符,除 「$」, 「\」, 「`」和「``」保留其特殊功能外,其他仍做爲普通字符
反引號(``):括起來的字串被解釋爲命令,shell首先執行該命令,並一他的標準輸出結果例如:取代整個反引號部分
#! /bin/bash
#輸出當前目錄
echo "current directory is `pwd`"
結果:currentdirectory is /root/chapter3
(先執行`pwd`,結果/root/chapter3取代`pwd`)
1.3 變量的做用域:
全局變量:shell中,全局變量可在腳本中定義,也可在某個函數中定義。腳本中定義的變量都爲全局變量,做用域爲被定義的地方開始,指定shell腳本結束或顯示刪除。
例:
#! /bin/bash
#定義函數
func()
{
#輸出變量x的值
echo "$v1" //100
#修改變量x的值
v1=200
}
#在腳本中定義變量x
v1=100
#調用函數
func
#輸出變量x的值
echo "$v1" //200
局部變量:一般僅限某個程序段訪問,如函數內部。Shell中可在函數內部經過local關鍵字定義局部變量,另外函數的參數也是局部變量。
例:
#! /bin/bash
#定義函數
func()
{
#使用local關鍵字定義局部變量
local v2=200
}
#調用函數
func
#輸出變量的值
echo "$v2" // 空值,函數外面不能得到該變量的值
注意:全局變量與局部變量同名時,函數內部的局部變量優先被使用。不管在何處,賦值語句都會影響全局變量的值,全局變量的值改變後,最整個腳本都有效,默認狀況下,函數內部定義的變量也是全局變量,除非用local聲明
1.4 系統變量:
Shell的系統變量主要對參數判斷和命令返回值判斷時的使用,包括腳本和函數的參數,以及腳本和函數的返回值。經常使用系統變量:
$n:表示傳遞給腳本的第n個參數,如$1表示第一個參數
$#:命令行參數的個數
$0:當前腳本名稱
$*:以「參數1參數2….」形式返回全部參數的值
$@:以「參數1」「參數2」形式返回全部參數的值
$_:保存以前執行的命令的最後一個參數
例子:
#! /bin/bash
#輸出腳本的參數個數
echo "thenumber of parameters is $#"
#輸出上一個命令的退出狀態碼
echo "thereturn code of last command is $?"
#輸出當前腳本名稱
echo "thescript name is $0"
#輸出全部的參數
echo "theparameters are $*"
#輸出其中的幾個參數
echo"\$1=$1;\$2=$2;\$11=$11"
1.5 環境變量:
Shell環境變量是全部shell程序均可以使用的變量。(所有大寫)
PATH:命令搜索路徑,以冒號爲分隔符,當前目錄不在系統路徑裏
HOME:用戶主目錄的路徑名,cd命令的默認參數
COLUMNS:命令編輯模式下可以使用命令行長度
HISTSIZE:命令歷史文件中最多可包含的命令條數
HISTFILE:命令歷史文件
HISTFILESIZE:命令歷史文件中包含的最大行數
IFS:shell使用的分隔符
LOGNAME:當前的登入名
SHELL:Shell的全路徑名
TERM:終端類型
TMOUT:shell自動退出時間,單位秒,爲0則禁止shell自動退出
PWD:當前工做目錄
能夠使用set命令列出全部環節變量,set| more
例子:
#! /bin/bash
#輸出命令搜索路徑
echo"commands path is $PATH"
#輸出當前的登陸名
echo "currentlogin name is $LOGNAME"
#輸出當前用戶的主目錄
echo "currentuser's home is $HOME"
#輸出當前的Shell
echo "currentshell is $SHELL"
#輸出當前工做目錄
echo "currentpath is $PWD"
1.6 變量賦值和清空:
Shell中全部普通變量值都看做字符串,若是賦值包含空格,製表符和換行符,要用單引號或雙引號括起來,一個沒有初始化的shell變量被認爲是一個空字符串。
1.7 清除變量:
變量被清除後,表明的值也會消失。消除變量用unset語句
unsetvariable_name
二 引用
2.1引用變量的值:
可經過在變量面前加$來獲取變量的值。
爲了能使shell正確的界定變量名,能夠在引用變量時使用大括號將變量括起來
如:
v4=123
echo 「${v4}abc」
結果:123abc
(若直接echo 「$v4abc」,會變成空字符串,由於v4abc沒有被定義)
2.2引用和替換:
引用:字符串用引用符合包括起來,防止特殊字符被shell解釋成其餘含義
經常使用引用符號:
雙引號:除$,’’,``,\以外,其餘全部字符保持字面意義
單引號:全部字符保持字面意義
反引號:反引號中的字符串被解釋爲shell命令
反斜線:轉義字符,屏蔽後的字符的特殊意義
2.3全引用:
單引號引用的方式。
#! /bin/bash
#定義變量v1
v1="chunxiao"
#輸出含有變量名的字符串
echo 'Hello, $v1' //全引用保持字面意義
結果:Hello ,$v1
2.4 部分引用:
雙引號引用方式
2.5 命令替換:
將某個shell命令的執行結果賦給某個變量。
兩種方式:
反引號:`shell_command`
圓括號:$(shell_command)
2.6轉義:
轉換某些特殊字符的意義,\表示。屏蔽反斜線後面字符的特殊意義
如:
Echo $SHELL
結果:/bin/bash
Echo \$SHELL
結果:$SHELL