本篇主要介紹了介紹在shell指令碼中對於字串的處理,資料變數的定義與使用。
字串的擷取,只是單純將字串擷取出來,對原來的變數並不會進行修改。
$
school="this is string."
echo
$ //確定變數的長度
echo
$
使用${}方式擷取字串時,起始位置是從0開始的(和陣列下標編號類似)。expr substr 「$var」 起始位置 長度
expr substr 「$var」 起始位置 長度
expr substr
"$school"
16
使用expr substr擷取字串時,起始編號從1開始,這個要注意與${}相區分。注意:因為school變數的值裡含有空格,所以應該加雙引號進行呼叫,否則是會報錯的
echo $var | cut -b 起始位置-結束位置
選項 -b 表示按位元組擷取字元,其中起始位置、結束位置都可以省略。當省略起始位置時,視為從第1個字元開始(編號也是從1開始,與expr類似),當省略結束位置時,視為擷取到最後。
echo
$school | cut -b 1-6
只替換第乙個匹配結果:$
echo
$
替換全部匹配結果:$
echo
$
echo
$echo
$
echo
$echo
$
echo
$echo
$
echo $
echo $
要適應不同副檔名檔案的修改,並能夠反向還原。
修改前的副檔名、修改後的副檔名通過位置變數 1、
2提供。
vim ../renfilex.sh
#!/bin/bash
for file in
"$1"
do mv $file
$"$2"
done
只取值,va
r:−w
ord若
變數va
r已存在
且非nu
ll,則
返回var 的值;否則返回字串「word」,原變數var的值不受影響。
取值+賦值,va
r:=wo
rd若變
量var
已存在且
非nul
l,則返
回 var 的值,原變數值不變;否則返回字串「word」,並將此字串賦值給變數 var。
在shell環境中,變數預設均作為字串處理,當參與expr、
數**算
時自動作
為整數處
理。比如
,使用「
1+2」
、「x+
2」、「
x+2」表示式是無法將運算結果直接作為整數賦值給指定的變數的:
[root@service99 ~]# x=24
[root@service99 ~]# a=1+2
[root@service99 ~]# echo $a
1+2 //賦值結果為字串
[root@service99 ~]# a=x+2
[root@service99 ~]# echo $a
x+2 //賦值結果為字串
[root@service99 ~]# a=$x+2
[root@service99 ~]# echo $a
24+2
若要將乙個變數強制設定為整數,可以使用declare命令宣告(-i選項):
[root@service99 ~]# declare -i a //先將a宣告為整數變數
[root@service99 ~]# a=1+2
//然後賦值
[root@service99 ~]# echo $a
//確認結果
3 [root@service99 ~]# declare -i b=$x+2
//也可以在宣告的同時進行賦值
[root@service99 ~]# echo $b
26
declare命令結合-x選項,可以將區域性變數設定為全域性變數,這個與export命令的作用差不多:
[root@service99 ~]# declare -x nm="tarena"
//新建全域性變數nm
如果要取消變數的全域性屬性,可以使用「+x」選項:
[root@service99 ~]# declare +x nm //將nm恢復為區域性變數
declare命令結合-r選項,可以為變數設定「唯讀」屬性,唯讀變數的值不允許再被修改,通常可用來儲存一些固定的引數,避免無意中被修改:
[root@service99 ~]# echo $nm
tarena
[root@service99 ~]# declare -r nm //將變數nm設定為唯讀
[root@service99 ~]# nm="tarena it group."
//重新賦值失敗
-bash: nm: readonly variable
唯讀變數除了不能修改值以外,也無法被unset清除(若要清除唯讀變數,需要退出當前shell程式):
[root@service99 ~]# unset nm
-bash: unset: nm: cannot unset: readonly variable
使用declare命令,結合-a選項可宣告乙個陣列(這個操作一般可不做),比如:
[root@service99 ~]# declare -a svrs
直接執行declare -a,即不指定陣列名引數時,會列出當前shell環境中已定義的所有陣列設定:
[root@service99 ~]# declare -a //檢視已定義的陣列
若要定義陣列的成員,可以在declare宣告時定義,也可以直接整體定義。整體賦值的格式為「陣列名=(值1 值2 值3 .. ..)」,比如:
[root@service99 ~]# my_svrs=(www ftp mail club)
[root@service99 ~]# set | grep "my_" //檢視陣列定義結果
shell中的語法要求是比較鬆散的,所以我們也可以直接為單個陣列元素賦值,格式為「陣列名[下標]=值」,每個陣列元素的編號(即下標)從0開始。比如,以下操作會產生乙個包括3個元素的陣列:
[root@service99 ~]# web_svrs[0]="www.tarena.com"
//為第1個元素賦值
[root@service99 ~]# web_svrs[1]="mail.tarena.com"
//為第2個元素賦值
[root@service99 ~]# web_svrs[2]="club.tarena.com"
//為第3個元素賦值
為陣列元素賦值時,並不要求每個成員都需要指定,下標也可以不連續。比如,可跳過下標3,直接為下標為4的元素賦值:
3)檢視陣列、檢視陣列元素
輸出整個陣列的內容:
[root@service99 ~]# echo $
檢視第1個(下標為0的)陣列元素:
[root@service99 ~]# echo $
輸出陣列中下標從1開始的2個元素:
[root@service99 ~]# echo $
檢視陣列的元素個數:
[root@service99 ~]# echo $
當陣列元素的內容較多時,直接輸出 $ 可能不方便檢視,這種情況下可以利用迴圈遍歷陣列元素,通過連續取值的操作(或者 % 取模運算)限定每行只顯示多少個ip位址(比如4個) 。 Shell教程之Shell字串
shell 字串 字串是shell程式設計中最常用最有用的資料型別 除了數字和字串,也沒啥其它型別好用了 字串可以用單引號,也可以用雙引號,也可以不用引號。單引號 str this is a string 單引號字串的限制 單引號裡的任何字元都會原樣輸出,單引號字串中的變數是無效的 單引號字串中不能...
Shell教程一 Shell教程
開啟文字編輯器 可以使用 vi vim 命令來建立檔案 新建乙個檔案 test.sh,擴充套件名為 sh sh代表shell 副檔名並不影響指令碼執行,見名知意就好,如果你用 php 寫 shell 指令碼,副檔名就用 php 好了 bin bash echo hello world 是乙個約定的標...
Shell基礎教程七 Shell字串
字串是shell程式設計中最常用最有用的資料型別 除了數字和字串,也沒啥其它型別好用了 字串可以用單引號,也可以用雙引號,也可以不用引號。單雙引號的區別跟php類似。str this is a string 單引號字串的限制 your name qinjx str hello,i know your...