BASH指令碼基礎 作業系統相容性

2021-10-03 01:27:50 字數 2433 閱讀 2129

這篇文章以sed的乙個引數的使用示例進行說明在不同作業系統之下,一些常用的命令或者作業系統內建的功能可能會有所不同,是指令碼程式設計在實際編碼中需要額外注意的事情。

比如希望把如下文字檔案中的greeting_msg使用sed替換成liu miao

[root@liumiaocn ~]# cat test.text 

hello greeting_msg to use bash

[root@liumiaocn ~]#

[root@liumiaocn ~]

# cat test.sh

#!/bin/bash

file_txt=test.text

words_replace_src=

"greeting_msg"

words_replace_dst=

"liu miao"if[

! -f $];

then

echo

"file $file_txt does not exist"

exit 1

fiecho

"before sed -i "

cat$file_txt

echo

sed -i s@"$"@"$"@g $file_txt

echo

"after sed -i "

cat$file_txt

[root@liumiaocn ~]

#

[root@liumiaocn ~]# cat /etc/redhat-release 

centos linux release 7.7.1908 (core)

[root@liumiaocn ~]# sh test.sh

before sed -i

hello greeting_msg to use bash

after sed -i

hello liu miao to use bash

[root@liumiaocn ~]#

同樣的**和準備在macos下的執行結果如下所示:

liumiaocn:~ liumiao$ sw_vers

productname: mac os x

productversion: 10.15.2

buildversion: 19c57

liumiaocn:~ liumiao$

liumiaocn:~ liumiao$ cat test.text

hello greeting_msg to use bash

liumiaocn:~ liumiao$ sh test.sh

before sed -i

hello greeting_msg to use bash

sed: 1: "test.text"

: undefined label 'est.text'

after sed -i

hello greeting_msg to use bash

liumiaocn:~ liumiao$

可以看到sed執行出錯,這是因為在macos上的sed在使用-i引數的時候需要額外指定乙個標籤用於備份原始檔,設定為空就不會備份,將**做如下修改即可:

liumiaocn:~ liumiao$ cp test.sh test.sh.org

liumiaocn:~ liumiao$ vi test.sh

liumiaocn:~ liumiao$ diff test.sh test.sh.org

16c16

< sed -i "" s@"$"@"$"@g $file_txt

---> sed -i s@"$"@"$"@g $file_txt

liumiaocn:~ liumiao$

再次執行就會成功

liumiaocn:~ liumiao$ sh test.sh

before sed -i

hello greeting_msg to use bash

after sed -i

hello liu miao to use bash

liumiaocn:~ liumiao$

通過sed的-i引數在不同平台上的執行方式不同,如果需要在多個平台上進行相容的情況下,或者將**進行移植的情況下,都需要考慮,最好的方式當然還是使用posix的規範之內的部分,此部分之外的情況則需要多多考慮,很多常用的命令在不同平台下的表現可能會相差較大,這部分情況有時使用gnu版本的功能也是乙個經常性的選擇。

考量作業系統相容性

最近為了使程式能執行在windows xp 和windows 7上,對原有 進行了改造,include stdafx.h include include using namespace std define define known folder name,l,w1,w2,b1,b2,b3,b4,b...

ionic4之android系統相容性問題

由於官方外掛程式ordova ionic web view 2.x.x只能在android7.1 以上的系統正常執行,所以一般這樣打包出來的apk在更早之前的android系統中執行時會出現白屏的情況。ionic build ionic cordova platform add android co...

關於NiosII和Win7系統相容性的問題處理方式

前一陣子在研究niosii的使用時,發現niosii和win7旗艦版系統相容的非常的差,以至於產生了為了學習niosii而將旗艦版系統換成xp系統的衝動 今天從實驗室回到寢室,吃完飯,百無聊賴中忽然猛發發了乙個年念頭 win7系統在處理相容性問題的時候,總是會建議將旗艦版的透明模式轉換成win7經典...