bash 字串擷取,替換,刪除,條件賦值

2022-05-18 00:48:11 字數 4299 閱讀 7902

字串按位置切片

$

[root@localhost scripts]# var=23dfja

[root@localhost scripts]# echo $

23d[root@localhost scripts]# echo $

dfja

字串模式

模式:字串按模式切片(只能從行首或行尾開始切,不能切中間部分)

[root@fa ~]# user=root:x:0:0:root:/root:/bin/bash

[root@fa ~]# echo $ #匹配到行首root,所以刪除了行首的root

:x:0:0:root:/root:/bin/bash

[root@fa ~]# echo $ #雖然存在bin,但是bin在中間,無法只切中間的部分,所以啥也沒刪除。

root:x:0:0:root:/root:/bin/bash

[root@fa ~]# echo $#雖然是貪婪匹配,能匹配到第二個root,但第二個root在中間,所以還是匹配的第乙個root

:x:0:0:root:/root:/bin/bash#匹配到行首root,所以刪除了行首的root

[root@fa ~]# echo $

:x:0:0:root:/root:/bin/bash

[root@fa ~]# echo $#貪婪模式,匹配到root:x:0:0:root:/root,所以把這部分刪除了。

:/bin/bash

[root@fa ~]# user=root:x:0:0:root:/root:/bin/bash

[root@fa ~]# echo $#雖然存在root,但是在中間和行首,不在行尾,無法只切中間的部分,所以啥也沒刪除。

root:x:0:0:root:/root:/bin/bash

[root@fa ~]# echo $ #貪婪模式,匹配到了bin/bash,所以刪除了

root:x:0:0:root:/root:/

[root@fa ~]# echo $ #匹配到了bash,所以刪除了

root:x:0:0:root:/root:/bin/

字串替換

pattern是glob風格的

[root@fa ~]# echo $user

root:x:0:0:root:/root:/bin/bash

[root@fa ~]# echo $

root:x:0:0:root:/root:/abc/bash

[root@fa ~]# echo $

abc:x:0:0:root:/root:/bin/bash

[root@fa ~]# echo $

abc:x:0:0:abc:/abc:/bin/bash

[root@fa ~]# echo $

root:x:0:0:root:/root:/abc/bash

[root@fa ~]# echo $user

root:x:0:0:root:/root:/bin/bash

[root@fa ~]# echo $

abc:x:0:0:root:/root:/bin/bash

[root@fa ~]# echo $

root:x:0:0:root:/root:/bin/bash

[root@fa ~]# echo $

root:x:0:0:root:/root:/bin/bash

[root@fa ~]# echo $

root:x:0:0:root:/root:/bin/abc

[root@fa ~]# echo $

root:x:0:0:root:/root:/abc

字串刪除

pattern是glob風格的

[root@fa ~]# echo $user

root:x:0:0:root:/root:/bin/bash

[root@fa ~]# echo $

:/bin/bash

[root@fa ~]# echo $

:/bin/bash

[root@fa ~]# echo $

:x:0:0::/:/bin/bash

[root@fa ~]# echo $

:x:0:0:root:/root:/bin/bash

[root@fa ~]# echo $user

root:x:0:0:root:/root:/bin/bash

[root@fa ~]# echo $

:x:0:0:root:/root:/bin/bash

[root@fa ~]# echo $

:/bin/bash

[root@fa ~]# echo $

root:x:0:0:root:/root:/bin/bash

[root@fa ~]# echo $

root:x:0:0:root:/root:/bin/bash

[root@fa ~]# echo $

root:x:0:0:root:/root:/bin/

字元大小寫轉換
[root@fa ~]# echo $

root:x:0:0:root:/root:/bin/bash

[root@fa ~]# pa=12sssss

[root@fa ~]# echo $

12sssss

變數賦值寫乙個指令碼,實現如下功能:

提示使用者輸入乙個可執行的命令的名稱,如ls。

獲取該命令所依賴的庫檔案列表(借助ldd命令)。

複製命令至某目標目錄(例如:/mnt/sysroot/,即將此目錄當做新的根目錄)下的對應路徑中。

bash, /bin/bash --> /mnt/sysroot/bin/bash

useradd, /usr/sbin/useradd --> /mnt/sysroot/usr/sbin/useradd

複製命令所依賴的庫檔案至對應的目標目錄下。

/lib64/ld-linux-x8664.so.2 --> /mnt/sysroot/lib64/ld-linux-x8664.so.2

高階:每次複製完乙個命令後不退出,而是等待使用者鍵入新的需要複製的命令,直到使用者顯示輸入「quit」方可退出指令碼。

這個指令碼可以實現按需做根檔案系統,根檔案系統裡只有想要的程式和程式所使用到的庫檔案。

#!/bin/bash

##宣告2個陣列

declare -a ary

declare -a bry

#根目錄

sysroot=/tmp/sysroot

while [ true ]; do

read -p "enter a command or enter quit/q: " comm

[ $comm == "quit" -o $comm == "q" ] && break

#輸入的目錄不存在則退出

if ! which $comm &> /dev/null ; then

echo "command $comm is not exist!"

continue

fi#which有可能返回多個,所以用陣列接收結果

bry=(`which $comm`)

#取陣列bry的最後乙個元素的下標

lastidx=$[$-1]

#取陣列bry的最後乙個元素,最後乙個元素就是要copy的執行檔案的全路徑

last=$

#建立目錄後copy

pa=$

mkdir -p $sysroot$pa && cp $last $sysroot$pa/

#得到執行檔案所需要的所有庫檔案

ary=(`ldd $`)

#取得陣列ary的大小

asz=$

for ((i=0;i<$asz;i++)); do

tmp=$

#ldd得到結果放到了陣列,陣列裡的元素是用空格分隔,所以只有/開頭的元素才是庫檔案

if [ $ != "/" ]; then

continue

fi#建立目錄後copy

tpa=$

mkdir -p $sysroot$tpa && cp $tmp $sysroot$tpa/

echo $tmp

done

echo "done!"

done

# c/c++ 學習互助qq群:877684253

!(

bash 字串擷取

命令的2種替換形式 和 示例 截斷字串 a 擷取檔名稱 var1 basename home aimybbe bash test.sh echo var1 擷取目錄 var2 dirname home aimybbe bash test.sh echo var2 b var1 basename ho...

bash字串擷取 匹配

字串匹配特定起始 結尾 子串 1.指定字元匹配字串 去左留右,去右留左,不匹配則保留整個字串 string a a b c d d echo a b c d d echo d echo a a b c d echo a echo 提取 a 左側內容 a 2.指定位置擷取 左側0起始,右側0 1起始 ...

字串擷取和字串替換

substring 叫做擷取字串,split叫做字串分割 substring擷取,下面是從第0位擷取前3個 說白了是從第一位擷取前3個 中的0索引就是我們常說的第一位 列印結果 用一生 split擷取,下面是通過 擷取,把字元分為6部分 string txta 用,一,生,下,載,你 string ...