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