Linux教程 Shell中字串與陣列操作例項

2021-07-25 18:13:33 字數 4387 閱讀 4230

本篇主要介紹了介紹在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...