分享一條shell命令 是否有更簡潔的處理方法

2021-10-09 04:35:17 字數 1694 閱讀 5359

一條命令寫下來,感覺很酷~~

ifs_old=$ifs ;ifs=$'\n';for conn in $(nmcli c show |grep wired|cut -b 1-19);do nmcli c show "$(echo $conn |awk '')"|grep 'ipv4.method';done;ifs=$ifs_old
還是換行好看一些:

ifs_old=$ifs

ifs=$'\n'

for conn in $(nmcli c show |grep wired|cut -b 1-19)

do nmcli c show "$(echo $conn |awk '')"|grep 'ipv4.method'

done

ifs=$ifs_old

這一條shell命令填了若干坑:

1、for迴圈取值將完整引數打散了;

2、切割出來的引數末尾存在空格,需要去掉;

nmcli c show |grep wired

wired connection 1   1ad36a4f-96d7-3238-9fd1-b4a325498f46  ethernet  enp3s17   

wired connection 10  c4885450-ed11-39d0-a008-b40528f3ad4a  ethernet  enp3s17f1 

wired connection 11  55678260-795f-3ede-91a6-ef96a7534cdc  ethernet  enp3s16f4 

為了獲得如下字段,我用了|cut -b 1-19 也可以使用|awk '';

wired connection 11

wired connection 12

wired connection 2

將上面獲得的字段傳給nmcli c show,查詢該link裝置的ipv4.method屬性。但是ifs預設是空格,這會導致在for in中獲得的引數是:

wired

connection

1wired

connection

10wired

釋義:ifs變數:shell 指令碼中有個變數叫ifs(internal field seprator) ,內部域分隔符。

所以需要將預設ifs值備份,然後再講ifs的值設定為換行符,最後將預設值重置回來。

如果前面用的是|cut -b 1-19,那麼會導致如"wired connection 2 "末尾會有空格,而多數linux命令並不會自動忽略字元前後空格。那麼就需要去掉空格:

echo $conn |awk ''

因為$conn的值存在空格,需要使用引號引起來:

"$(echo $conn |awk '')"

最後執行的效果如下:

ipv4.method:                            auto

ipv4.method:                            auto

……

判斷一條單鏈表是否有環

這道題作為考察程式設計師的基本資料結構 鍊錶的操作和演算法是一道不錯的題,也是一道經常面試到的一道題,我從網上查了一下,這裡只寫一下演算法思想,實現由讀者自己去實踐下,下面轉入正題 已知頭結點,判斷一條單鏈表是否有環可用三種方法,演算法思想如下 1.追趕法。設兩個指標,乙個快指標 步長為2 乙個慢指...

判斷上一條命令是否成功

只判斷最後一條命令,指令碼中前面命令錯誤的話,最後一條命令對的話就會返回0 1 執行完上一條命令直接判斷是否成功 22 03 37 root localhost grep q alex1 etc passwd 22 03 39 root localhost echo 1 2 通過判斷是否為0,是0則...

linux判斷上一條命令是否成功

基礎知識點 0 shell或shell指令碼的名字 以一對雙引號給出引數列表 將各個引數分別加雙引號返回 引數的個數 代表上乙個命令的最後乙個引數 代表所在命令的pid 代表最後執行的後台命令的pid 代表上乙個命令執行後的退出狀態 指令碼 bin bash ls dev null 2 1 if e...