linux中shell的變數型別

2021-06-29 00:12:19 字數 4061 閱讀 9408

shell中的變數型別有:本地變數、環境變數、位置變數、標準變數、特殊變數。

2.1.本地變數在shell指令碼的生存週期中使用的變數(也就是登入乙個shell到退出,這個shell為生存週期)設定乙個本地變數格式為:變數 名=變數,顯示乙個變數:echo $也可以不要大括號,顯示本地所有變數:set就可以,本地變數還可以設定為唯讀的:readonly 變數名,這時的變數就具有唯讀屬性,如果在shell下執行命令readonly,就會顯示當前環境下所有的唯讀變數。

2.2.環境變數用於所有的使用者程序(也就shell下所有的子程序),這個就有點像windows中的環境變數了(系統–>高階–>環境變 量),環境變數一般儲存在$home/.bash_profile和/etc/profile中,前者是只適用於當前使用者,後者適用於所有使用者設定乙個環 境變數用export,比喻我們這裡設定乙個環境變數:export pagename=」ghostwwl」這樣就設定了乙個叫做pagename的環境變數,我們可以通過env這個命令來檢視,還有就是可以直接通過執行 export來檢視。

2.3.位置變數也就相當於程式中的引數(也就相當於c中的argv),在shell中位置變數一般允許$0-$9一共10個,超過10個的,嘿嘿就必須使用其他方式了。很顯然這裡$0就是指令碼的名字了,從$1開始就是後面的引數了。說白了也就是那個argv了。

我們這裡舉個小例子,比喻有shell程式aa.sh於下:

#!/bin/bash

#named aa

echo 「程式名為: $0″

echo 「姓名為: $1″

echo 「年齡為: $2″

echo 「所屬省分為: $3″

echo 「所在城市為: $4″

echo 「第五個引數為: $5″

我們執行這個指令碼 ./aa.sh ghostwwl 24 hubei wuhan 顯示結果為:

程式名為: ./aa.sh

姓名為: ghostwwl

年齡為: 24

所屬省分為: hubei

所在城市為: wuhan

第五個引數為:

可以看出因為第五個引數沒有所以就為空了

當然我們可以在指令碼中系統命令傳遞引數,比喻下面一句:

find /usr/share/realpaly -name $1 -print

這個指令碼語句就可以在指令碼中對檔案目錄/usr/share/realplay中檔名為第乙個引數的檔案進行查詢。

說這麼多他*的就是引數,搞半天。

2.4.標準變數,也就是bash環境建立的一些標準環境的標量,他會自動去解析,基本都在/etc/profile中定義了有exinit,home,ifs,logname,mail,mailcheck等。

exinit 是vi編輯器初始化執行的一些引數

home 這個傻子都知道,就是偶們的主目錄

ifs 乙個個字段域之間用什麼隔開的理論上可以任意字元,比喻/usr/bin;/usr/sbin

這裡的ifs就是」;」了。

logname 看名字就知道 是登入名可以用 echo $logname 來檢視

mail 表示當使用者的郵箱路徑

mailcheck 表示每間隔多少秒檢查一次收件箱

還有一堆標準變數path,tz,ps1,ps2,pwd等等,我這裡就不全部寫了,自己去找資料看,相信應該蠻好找的。

2.5.特殊變數

$# 表示傳遞到指令碼的引數列表

$* 以乙個字串顯示所有向指令碼傳遞的引數,跟位置變數不同的是這裡引數可超過9個。

$$ 表示當前執行指令碼的程序id號

$! 表示後台執行的乙個程序的id號

$@ 與$#相同,但是使用時加引號,並在引號中返回每乙個引數

$- 顯示shell使用的當前選項,與set命令相同

$? 顯示最後命令執行的推出狀態,0表示沒有錯誤,其他任何值表示有錯誤 

3.shell中的變數替換

這裡說一下變數替換這個經常用到,其實就是用變數的值替 換他的名字,顯示變數的時候就是這個,可以用:

為了試驗我們先定義乙個變數haha=」**** you」

a.$來搞定(這裡的大括號可要可不要,不過偶一般都加)

b.$這個表示如果前面的變數值不為空,則顯示變數值,否則置空,比喻echo $這樣可不管你以前有沒有對name賦過值都會顯示這裡的」ghostwwl」

c.$這個表示當變數名存在,就是變數的值,不存在就顯示問號後面的錯誤資訊比喻echo $這個因為age不存在所以它會顯示錯誤資訊age:no defined variable age

d.$這個表示如果如果變數名沒有設定,就用這裡給出變數值來代替,顯然如果設定了肯定就是返回原來設定的值:比喻echo $因為age變數沒有設定,所以它會用24去代替,如果是echo $這裡會顯示原來所賦的值」**** you」記得不要跟b中的情況搞混。

e.$表示如果沒有設定變數名這個變數,就設定它的值,比喻echo $因為沒有設定age這個值,所以執行這句的時候會賦值並顯示。當然這樣賦值以後就可以把age當正常變數用了,也就是這時我們有 haha和age這兩個變數了。

就這五種了(當然如果把第一種去掉大括號,就6種了),開始可能並不習慣,用多了就習慣了,啊哈哈!

4.清除變數(unset)

能定義變數當然也就能刪除變數了,比喻我們要刪除那個haha,因為值為」**** you」不太文明,我們可以用:unset haha 從這裡就可以看出清除變數用unset 變數名。

這裡我們要注意,設定了readonly的唯讀變數不能取消也不能重新設定值。

我們這裡再來把前面個例子改一下:

#!/bin/bash

#named aa

echo 「程式名為: $0″

echo 「姓名為: $1″

echo 「年齡為: $2″

echo 「所屬省分為: $3″

echo 「所在城市為: $4″

echo 「引數個數為: $#」

echo 「指令碼引數為: $*」

echo 「指令碼程序id為: $$」

我們再來執行這個指令碼 ./aa.sh ghostwwl 24 hubei wuhan 結果為:

程式名為: ./aa.sh

姓名為: ghostwwl

年齡為: 24

所屬省分為: hubei

所在城市為: wuhan

指令碼引數個數為: 4

指令碼引數為: ghostwwl 24 hubei wuhan

指令碼程序id為: 212

5.影響變數的一些命令

5.1 declare 建立或顯示變數

引數-f 只顯示函式名

引數-r 建立唯讀變數(typeset也可以)

引數-x 建立轉出變數

引數-i 建立整數變數

如果引數中使用+來代替-,表示選項的含義相反。

5.2 export 建立環境變數

引數– 表明選項結束,所有後面的引數都是實參

引數-f 表示在」變數-值」對照中的變數是乙個函式名

引數-n 表示把全域性變數轉換成區域性變數(也就是本地變數)。

引數-p 顯示全域性變數列表

5.3 readonly 建立或顯示唯讀變數

引數– 表示選項結束

引數-f 建立唯讀變數

5.4 set 設定或者重設各種shell

5.5 shift [n] 用來移動或調整位置變數,使$4賦給$3(也就是全都向前面移動一次),這個裡面的n表示移動幾位,預設是移動一位。

5.6 typeset 這個就跟declare相同了

5.7 unset 清除變數的定義

引數– 表示選項結束

引數-f 刪除唯讀變數,但是不能sehll環境中制定的變數和函式。

6.shell的運算子

6.1 位運算 ~,>>,<<,&,|,^ 一看就知道分別是取反,左移,右移,與,或,異或。

6.2 $表示對中的表示式求值和$(())相等的。

6.3 邏輯運算子 &&,||,>,<,==,!= 是人都看得懂跟c裡一樣的。 

6.4 賦值運算子 =,+=,-=,*=,/=,%=,&=,|=,<<=,>>=,^= 跟其他語言差不多一看就明白的。當然表示式賦值let $a=$b+$c這種形式。

6.5 運算子的優先順序我就不想廢話了,都跟其他語言差不多。

**:

linux中shell的變數用法

一 環境變數 環境變數也可叫全域性變數,可以在建立他們的shell及派生出的子shell中使用 無需定義,直接可以使用,如 uid 相關命令 set 輸出所有變數 env 只顯示全域性變數 declare 輸出所有變數,函式,整數等 二 普通變數 普通變數賦值 變數名 value 變數名 value...

Linux程式設計 Shell中的變數

系統啟動後會產生許多環境變數,使用者可以使用 set 命令檢視這些環境變數 家目錄位置變數 home 系統語言變數 lang 臨時修改系統語言可以重新指定此變數的值 lang zh cn.utf 8 互動程式變數 shell 命令搜尋路徑變數 path 主提示符變數 ps1 檢視當前使用的主提示符表...

linux中shell變數含義

linux中shell變數katex parse error expected eof got at position 1 0,1,2的含 釋 變數說明 shell本身的pid processid shell最後執行的後台process的pid 最後執行的命令的結束 返回值 使用set命令設定的fl...