shell變量定義

shell變量定義

一,變量:

可變化的量,有名稱的內存空間(在內存中要佔據空間)

聲明變量的目的是:讓計算機留出內存空間來儲存某一個確定類型的數據

二,bash中變量的類型

(1)環境變量:對當前shell及其子shell都是生效的,declare -x var=value or export var=value

顯示當前環境變量,export or printenv or env

(2)本地變量(局部變量):僅對當前shell有效,對子shell無效。

(3)特殊變量:通常指shell自身的變量

(4) $?:引用上一條命令狀態的返回值;

0:成功

1-255:失敗1,2,127系統預留的

(5),位置變量:用於引用傳遞過來的參數: $0, $1 ,$2 ....${11}

(6),局部變量:作用範圍可以縮小到只對一段代碼有效)

local name (定義成只對一段代碼有效)

命令別名:alias cmd_alias= ''(有些時候要帶,沒-,/之類就不用帶'') , unlias

三,系統上常用的環境變量

(1)PATH:定義命令搜索路徑

/usr/local/mysql/bin

export PATH=$PATH:/usr/local/mysql/bin(在原來PATH變量中添加/usr/local/mysql/bin,當運行mysql命令就不需要使用絕對路徑)

hash 系統加速的緩存(shell內置變量)命令執行完會在hash中

(2) LANG:語言變量

/etc/sysconfig/i18n

語言:編碼規則

DISPLAY=

screen

每個變量的生命的週期其關聯進程,shell進程

(3) PS1

export 或declare -x 聲明環境變量,

改變全局在/etc/profile,改變用戶在~/.bashrc

立即生效與永久生效(寫入配置文件才能永久生效)

(4) bash環境配置文件:

全局:

/etc/profile,/etc/profile.d/* ,/etc/bashrc

用戶個人:

~/.bash_profile,~/.bashrc,~/.bash_logout

每一個shell腳本的執行,必然是使用對應的shell程序來實現

/bin/bash, /tmp/test.sh

登錄式shell:(先讀/etc/profile-->/etc/profile.d/*-->~/.bash_profile--->~/.bashrc-->/etc/bashrc)

1,用戶登錄最後創建的shell

2, su - username

非登錄式的shell:(~/.bashrc-->/etc/bashrc--->/etc/profile.d/*)

su username

腳本執行

圖形界面打開的shell

profile類:爲登錄式shell所用的配置文件(source=.)

設置環境變量;

設置命令或腳本

bashrc類,非登錄式shell所用的配置文件

本地變量;

命令別名:

()表示在子shell中執行,()裏的內容表示命令

管道的最後一個命令通常也在最後一個子shell執行


四,在bash中不需要事先聲明,如果沒聲明則默認都當成字符串,但是可以事先聲明,

變量的事先聲明:

(1)declace [ options ] var

-i :整型

-x :環境變量

-a :數組

-r :只讀變量,值不能改變,也不能撤消

(2)變量命名:

1,只能包含字母,數字,下劃線,並且不能以數字開頭;

2,不能與關鍵字衝突

3,見名知義

4,引號:

單引號:''

雙引號:"" 變量替換

反引號:`` 命令替換(把命令執行結果當作別的命令的參數) =$()

5,變量引用:

$var

${var} :如果變量值中有特殊字符或帶後綴時不能省略{}

path="$PATH"與path=${PATH}與path=$PATH(這種方式少用,因爲有時$PATH中含有特殊字符時會出現問題,如含有空格之類的時候)

三種方式效果是一樣的。都是定義path的變量等於PATH的變量

引用命令的結果兩種方式:

(1)MYUID=$(id -u root)

(2)MYUDI=`id -u root`

五,變量賦值

set var_name=value (set 可以省略)

DIR=/tmp/name

DIR='/tmp/name'(一般情況都可以用,但是有空格之類的特殊符號時,剛必須加''或"")

DIR="/tmp/name"(如果/tmp/name中有$則不能使用'')

unset var_name(撤銷變量) 變量名最好有大寫,習慣性用法,當然不一定要

六:變量類型

1,決定存儲類型 2,數據表示範圍

整型:

字符型:

布爾型:

浮點型:

ascii:定義了基本字符,

byte:8bit

七,bash如何實現命令展開;

(1)切開;以space,tab,enter分隔

(2)別名替換,命令行展開,$ ,{} ,()

(3)再切開

(4)實現重定向:>,>> ,< ,<<

(5)執行命令

阻止展開:1,轉義字符\,2,單引號,3 ,雙引號

八,位置變量

./a.sh a b c

$0 $1 $2 $3

bash -x 與set -x(寫在腳本里)調試腳本

set +x 取消調試,set -x 與set +x之間會調試(調試片段)

$#:代表接不接參數的個數,上面表示有四個

$@:代表”$1" "$2" "$3" "$4",每個變量是獨立的(用雙引號括起來)

$*:代表"$1 $2 $3 $4" 中間默認用空格鍵隔開,因IFS默認的第一個變量是空格

變量賦值等號與let (a=1 與let a=1效果一樣,賦值數值,不用加引號)

name="mary smith"(引號的目的是告訴計算機從哪開始到哪結束,引號中間的字符就會被當作字符串處理

如果是隻有單個時,可以不用引號name=mary,賦值字符串,最好加引號)

九,腳本的函數

功能模塊,結構化編程,代碼重用

先定義後調用

14,bash中定義被函數兩種方式:

(1)function func_name {

body

}

(2)fname () {

body

}

函數的返回值:

是函數調用時所執行的函數體中的最後一條語句的狀態返回值

自定義函數返回值

return #

函數還能接受參數

/var/lock/subsys

/etc/rc.d/init.d/functions 定義了系統上常用的函數

(1)daemon

(2)killproc

(3)pidofproc

(4)status

(5)echo

echo_failure

${para#*word} 以word爲分隔符,自左向向,word這個分隔去匹配,找到第一次匹配到的所有內容先移出

${para##*word} 。。。。。。。。。。。。.................,找到最後一次,也就是最長的一個給移出

${para%word*}................ 自右向左

${para%%word*} 自右向左

取得目錄路徑的時候可以用上


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章