- 相關(guān)推薦
linux shell編程變臉賦值和字符串操作
1.用戶定義的變量
用戶定義的變量有字母數(shù)字及下劃線組成,并且變量名的第一個(gè)字符不能為數(shù)字.
與其它UNIX名字一樣,變量名是大小寫(xiě)敏感的.
對(duì)于變量,用戶可按如下方式賦值:
name = value
在引用變量時(shí),需在前面加$符號(hào),用戶也可以在變量間進(jìn)行相互賦值,如:
(前面的$是命令提示符)
$ JOHN = john
$ NAME = $JOHN
$ echo Hello $NAME
Hello john
也可以用變量和其他字符組成新的字,這時(shí)可能需要把變量用{}括起,如:
$ SAT = Satur
$ echo Today is ${SAT}day
Today is Saturday
對(duì)于未賦值的變量,Bash以空值對(duì)待,用戶也可以用unset命令清除給變量
賦的值.
Bash中還可以使用數(shù)組變量,其賦值有兩種:
(1) name[index] = value
(2) name = (value1 ... valuen) 此時(shí)下標(biāo)從0開(kāi)始
數(shù)組下標(biāo)的范圍沒(méi)有任何限制,同時(shí)也不必使用連續(xù)的分量.
Bash中關(guān)于變量的內(nèi)建命令有:
(1) declare和typeset.兩者具有一樣的功能.其選項(xiàng)有:
[-/ ]a 設(shè)置/撤消變量的數(shù)組屬性
[-/ ]i 設(shè)置/撤消變量的整數(shù)屬性
[-/ ]r 設(shè)置/撤消變量的只讀屬性
[-/ ]x 設(shè)置/撤消變量的輸出屬性
-p var 顯示變量屬性
(2) export和local.
export把變量輸出到環(huán)境中,用法為:
export name
export name = value
這里需要簡(jiǎn)單介紹一下export的作用:當(dāng)Bash shell執(zhí)行一個(gè)
程序時(shí),將首先為該程序建立一個(gè)新的執(zhí)行環(huán)境,稱為子shell,
在Bash Shell中變量都是局部的,即它們只是在創(chuàng)建它們的子
Shell中是有意義的,使用export后,變量被設(shè)置為全局變量,這
時(shí)可以被其它子Shell所識(shí)別
local標(biāo)記變量為局部的(如只能被函數(shù)內(nèi)部使用),用法為:
local name
local name = value
(3) readonly.
指定變量為只讀,執(zhí)行后,改變量不能被再次賦值,用法為:
readonly name
2.位置變量或Shell參數(shù)
Bash Shell在解釋用戶命令時(shí),將把命令行的第一個(gè)子作為命令,而其它字作為
參數(shù)通過(guò)位置變量傳遞給程序.$1,...,$9分別代表第一,...,九個(gè)參數(shù).其中1-9
是真正的參數(shù)名,"$"符只是用來(lái)標(biāo)識(shí)變量的替換.
位置變量$0指命令對(duì)應(yīng)的可執(zhí)行名.
其它的還有:
$# 送給命令的參數(shù)個(gè)數(shù)
$@ 所有的參數(shù),每個(gè)用雙括號(hào)括起
$* 所有的參數(shù),用雙括號(hào)括起
3.與Shell有關(guān)的變量
(1) Shell自身設(shè)置的一些常用變量:
LINENO 正在執(zhí)行的命令在腳本中的行號(hào)
PWD 用戶當(dāng)前目錄的全名
OLDPWD 最近一次執(zhí)行cd之前,用戶當(dāng)前目錄的全名
PPID 父進(jìn)程ID
$ 當(dāng)前進(jìn)程ID
RANDOM 隨機(jī)數(shù)(范圍0-32767)
SECONDS Bash Shell的運(yùn)行時(shí)間,單位是秒
REPLY select和read命令使用,以后會(huì)講到
OPTARG
ORTIND 這兩個(gè)變量由getopt命令設(shè)置
UID 當(dāng)前用戶的User ID
_ 上一條命令使用的最后一個(gè)參數(shù)
(2) 影響Shell行為的一些常用環(huán)境變量:
PATH 命令搜索路徑,以冒號(hào)為分隔符.注意與DOS下不同的是,
當(dāng)前目錄不在系統(tǒng)路徑里
HOME 用戶home目錄的路徑名,是cd命令的默認(rèn)參數(shù)
COLUMNS 定義了命令編輯模式下可使用命令行的長(zhǎng)度
EDITOR 默認(rèn)的行編輯器
VISUAL 默認(rèn)的可視編輯器
FCEDIT 命令fc使用的編輯器
HISTFILE 命令歷史文件
HISTSIZE 命令歷史文件中最多可包含的命令條數(shù)
HISTFILESIZE 命令歷史文件中包含的最大行數(shù)
IFS 定義SHELL使用的分隔符
LOGNAME 用戶登錄名
MAIL 指向一個(gè)需要SHELL監(jiān)視其修改時(shí)間的文件.當(dāng)該文件修改后,
SHELL將發(fā)消息You hava mail給用戶
MAILCHECK SHELL檢查MAIL文件的周期,單位是秒
MAILPATH 功能與MAIL類似.但可以用一組文件,以冒號(hào)分隔,每個(gè)文件后
可跟一個(gè)問(wèn)號(hào)和一條發(fā)向用戶的消息
SHELL SHELL的路徑名
TERM 終端類型
TMOUT SHELL自動(dòng)退出的時(shí)間,單位為秒,若設(shè)為0則禁止SHELL自動(dòng)退出
PROMPT_COMMAND 指定在主命令提示符前應(yīng)執(zhí)行的命令
PS1 主命令提示符
PS2 二級(jí)命令提示符,命令執(zhí)行過(guò)程中要求輸入數(shù)據(jù)時(shí)用
PS3 select的命令提示符
PS4 調(diào)試命令提示符
MANPATH 尋找手冊(cè)頁(yè)的路徑,以冒號(hào)分隔
LD_LIBRARY_PATH 尋找?guī)斓穆窂?以冒號(hào)分隔
bash變量賦值
例子:經(jīng)常在configure腳本中,會(huì)出現(xiàn)以下類似的語(yǔ)句,都表示什么意思呢?
if test -n "${ZSH_VERSION set}"; then
ac_env_build_alias_set=${build_alias set}
test "${ac_configure_args0 set}" != set
答案及擴(kuò)展:
變量賦值方式 |
str 沒(méi)有賦值 |
str 為空字符串 |
str 為非空字符串 |
備注 |
var=${str-expr} | var=expr | var=$str | 對(duì)var進(jìn)行設(shè)置 | |
var=${str expr} | var=$str | var=expr | 對(duì)var進(jìn)行設(shè)置,var與str要不都取值,要不都不取值。雖然取值不同 | |
var=${str=expr} |
str=expr var=expr |
str 不變 var=$str |
對(duì)var與str進(jìn)行設(shè)置,
var 與str保持一致 |
|
var=${str?expr} | expr 輸出至 stderr | var=str | 對(duì)var進(jìn)行設(shè)置 | |
var=${str:-expr} | var=expr | var=$str | ||
var=${str: expr} | var= | var=expr | ||
var=${str:=expr} |
str=expr var=expr |
str 不變 var=$str |
||
var=${str:?expr} | expr 輸出至 stderr |
Bash字符串的操作
(一)字符串的替換
(1)
${變量1/查找字符/替換字符}
(說(shuō)明一下,這個(gè)操作中除了第一個(gè)參數(shù)是變量外其它兩個(gè)都是字符;還有一點(diǎn)就是這個(gè)操作并不是把“變量1”中的字符替換了,詳見(jiàn)例子)
例:
str1=abcABCabc123ABC
echo ${str1/bcA/aaa}#這里的abc和aaa都是字符串,而str1是變量,并且這個(gè)操作過(guò)后str1里的字符串長(zhǎng)度不會(huì)減少,只是產(chǎn)生了一個(gè) 新的字串。
(2)
${變量1/#查找字符/替換字符}
(說(shuō)明一下,這個(gè)操作上和面的是一樣的,只不過(guò)是從左邊開(kāi)始匹配,并且必須從左邊第一個(gè)字符開(kāi)始)
例:
echo ${str1/#bcA/aaa}#這個(gè)例子中并不會(huì)把bcA換成aaa因?yàn)閎不是左邊第一個(gè)開(kāi)頭字符
echo ${str1/#abc/aaa}#這樣才行
(3)
${變量1/%查找字符/替換字符}
(與(2)相反,是結(jié)尾最后一個(gè)字符要匹配才行)
例:
echo ${str1/:BC/aaa}#abcABCabc12aaa
(3)
${變量1//查找字符/替換字符}
全部替換
(二)取子串
(1)${變量1:位置}
(說(shuō)明一下,默認(rèn)是從左邊開(kāi)始,如果“位置”為負(fù)數(shù),則是從右邊的第“位置”個(gè)字符開(kāi)始,并且第一個(gè)位置為0;從“位置”開(kāi)始取子串到最后)
例:
str1=abcABCabc123ABC
echo ${str1:(-3)}#會(huì)輸出ABC
(2)${變量1:開(kāi)始位置:結(jié)束位置}
(3)如果“變量1”為“*”或“@”,“位置”所表示的是第幾個(gè)參數(shù)。
(三)字符串移動(dòng)
(1)${字串#匹配字串}
(說(shuō)明一下,這個(gè)是從左邊第一個(gè)開(kāi)始匹配,剝?nèi)プ疃?ldquo;匹配字串”)
例:
str1=abcABCabc123
echo ${str1#a*c}#輸出ABCabc123
(2)${字串##匹配字串}
(說(shuō)明一下,這個(gè)是從左邊第一個(gè)開(kāi)始匹配,剝?nèi)プ铋L(zhǎng)“匹配字串”)
str1=abcABCabc123
echo ${str1#a*c}#輸出123
echo ${str1#b*c}#輸出abcABCabc123,因?yàn)闆](méi)有從第一個(gè)開(kāi)始匹配
(3)${字串%匹配字串}
(4)${字串%%匹配字串}
(說(shuō)明一下,這與上面的(1)(2)是正好相反的,是從最后一個(gè)開(kāi)始匹配的)
(四)字符串長(zhǎng)度
${#字串}
例:
str=abcdefg
echo ${#str}#輸出7
【linux shell編程變臉賦值和字符串操作】相關(guān)文章:
Linux shell常用命令匯總10-26
Linux Shell文本處理工具10-08
Linux認(rèn)證操作技巧10-10
Linux操作試題及答案08-01
Linux中常用操作命令10-17
Linux操作系統(tǒng)概述06-22
數(shù)控車(chē)床編程與操作08-21
《PHP字符串操作》收集整理08-08
Linux認(rèn)證基礎(chǔ)知識(shí):linux操作系統(tǒng)目錄結(jié)構(gòu)07-10