bash指令碼感覺不好用,有什麼方法能將bash和程式語言結合起來嗎?

時間 2021-05-09 02:02:37

1樓:窗戶

對於shell而言,所有語言寫的程式都是零件,shell是以可執行檔案為操作物件。於是,其他語言編寫各個程式,再用shell使用管道、順序、條件判斷、迴圈等方式將各個其他語言的程式結合在一起,是shell與其他語言混編的主要方式。

cmd1

cmd2

cmd file2

cmd1 <(cmd2)

cmd1 | cmd2

管道是一種特殊的重定向,cmd1的標準輸出當作cmd2的標準輸入cmd && cmd2

cmd1 || cmd2

if cmd1 ; then cmd2; else cmd3; ficmd1 &

cmd2 &

wait $!

別的方式:

可以考慮在別的語言中呼叫shell命令,比如C語言的system函式。

2樓:駿馬金龍

個人對bash還算熟悉,嚴格來說是對bash shell直譯器稍有研究,無論它的外在(命令列、shell指令碼),還是它的內在(shell直譯器程序)上,都有一些體會(唯一跳過沒去研究的是readline部分)。

也學過一些語言,像python、perl、ruby、lua等,就我的個人感受來談下看法:

shell的優點:

在於一行在於管道的簡潔

在於有大量各種功能的命令,相當於封裝好的一大堆的專門處理基本任務的輪子。

shell的缺點:

在於shell的一行式,使得它缺少了一些完整語言的邏輯處理能力

在於管道的簡潔,使得管道兩邊的程序總是具有親緣關係的,總是被繫結在一起以單向流水線方式工作(不過作為補充,也有命名管道的存在,可以將流水線上的程序解綁,部分shell包括bash,也提供了協程coproc,也能解綁流水線上的程序)

在於shell自身是一種"精簡語言",沒有嚴格的資料型別,沒有嚴格的......,powershell正好在這方面把linux shell"碾壓"了,但並不能說powershell優,linux shell劣,正因為沒有這些嚴格的限定,使得shell用起來更加簡單方便

總的來說,shell是成也蕭何敗也蕭何,它的優點也正是限制它的缺點,也正是這些缺點被人"詬病",但從shell的作用定位來看,利遠大於弊。

先學其它語言的人,大概會覺得shell指令碼不好用,shell的語法畢竟異於完善的程式語言。但語法畢竟只是語法,對於個人的使用來說,熟悉了都一樣。

使用命令列多了的人,又會覺得bash不夠友好,於是改用zsh、fish等。但是這些shell只適用於命令列下使用,不適用於shell指令碼,全網之下,shell指令碼還是以bash為主。

運維為主的人,對bash(嚴格來說是對shell)應該是情有獨鍾的,因為語法太簡單了,邏輯也太簡單了。用在運維工作上,真香。不過,多數人的shell指令碼裡都只是堆積一些簡單命令,加上一些簡單邏輯。

涉及複雜的命令、複雜的邏輯,要麼寫不出來,要麼採用高階語言,通常選擇的是"指令碼"語言,比如perl/python/ruby等。

不要說Python等高階語言取代bash,那是不可能的,對於基礎任務,沒有比shell更方便的,連Perl/Ruby(Lua一行式要比這兩弱的多)這種能使用一行式表示式的工具在基礎任務處理方面也不如shell。

還有,以通用語言為標準去看待shell是不合理的,shell可以看作是乙個比較特殊點的DSL,它的存在使得使用者可以非常方便地去管理作業系統,比如讓程式執行起來,用某個工具去執行某些任務,另外還有作業控制也提供了更多的任務管理方式,等等。

3樓:花楹

shell用引數、管道和檔案來解決各程序資料傳輸問題,把握了這一點就知道怎麼把各程序粘合到一起

前面有回答here document的方式,很不錯,而且here document還能進行變數替換,豈不美哉?

字串引數也不錯,變數替換就不說了,也能換行。

管道、重定向、輸出到檔案、執行時變數如$?和$PIPESTATUS,還有類似a=$(cmd) 或 a=`cmd`……一大堆,不香嗎?

總結起來一句話:想跟其他語言通訊,方法很多;想做成嵌入式混編,只是單純的字串替換,沒問題;而複雜結構傳遞簡直找死,序列化完了傳給shell,shell也不好存……

4樓:zsssj

bash指令碼其實非常有用,運維什麼的,編個指令碼後台執行,告警發郵件,統計,格式化輸出。用的好非常酷。

你覺得不好用,應該是對linux的許多命令不熟悉,結合find,grep,sed,awk等命令,可以實現眾多效果。

5樓:簡民

shell指令碼,你要把它當指令碼來看。不是嚴肅的程式設計。你用bash不是用它來實現複雜的邏輯和資料結構的。

大家總說膠水語言膠水語言。bash這種就是純膠水。負責的是叫最合適的軟體幹最合適的事,在中間負責溝通就好。

如果你發現用bash實現的邏輯已經複雜到bash的語法已經限制到你了。說明是時候考慮一下換語言把這個單獨的功能用你最順手的語言實現出來,再用bash的pipe去膠就完了。

6樓:tuhooo

很多C/C++開源軟體指令碼都是用bash寫的,我猜乙個原因是*NIX上shell是標配,至於什麼ruby,python之類的還要單獨裝個環境。

其次,不知道bash不好用這個結論是怎麼來的?乙個例子都冒得,有張口就來的嫌疑。

拙見,勿噴。

7樓:hitsmaxft

bash就是個引導器,拉起python或者效能更高的go,就該退位了。

bash的方便之處也就是現場除錯了,也就是以前環境比較亂,不好本地測試才需要這麼簡單直白的玩意。現在有docker用啥語言不一樣?

8樓:exiledkingcc

目前沒有乙個正面回答的。

實際在bash裡面可以這樣做:

#!/bin/bash

a=$(python3 << END

p = "$"

p = p.split(":")

p = [x for x in p if not x.startswith("/usr")]

print(":".join(p))

END)

echo $a

(手機上敲的,可能有點錯誤)

我一般能用Python的就直接用Python(#!/usr/bin/python3)。但是有的情況下,需要呼叫很多系統命令或者進行很多系統操作的時候,用python的subprocess會更複雜,這時可以直接把Python寫到bash裡面去。

9樓:

既然你標籤裡打了「Linux運維」,那就靜下心來好好體會shell吧。不要從開發的角度看問題。interactive shell 用的「簡陋」語言,和動不動就要祭出IDE的「正經」語言,根本就是兩回事。

PowerShell 什麼的還是算了,明明是披著shell皮的正經語言。

10樓:Jason5Lee

NodeJS

可以選擇性加型別(TypeScript),可以和任何能編譯到JS的語言(Scalajs, BuckleScript, Fable, ClojureScript)互動,還能寫C++擴充套件,效率還不錯

11樓:石大頭

可以這樣做啊,popen、system等c函式就可以用來做這個(popen雖然在stdio.h裡,但是只能在*ix系統裡用),python裡面也有類似的對應物

vps好用不好用?

Han sen 這得看商家,買對的商家,VPS自然好用,我的部落格 http www.是關於VPS評測的,挑選精選商家 知乎老司機 個人覺得挺好用,可以在上面做很多事情。國內VPS看頻寬,國外VPS關鍵還是要看線路,建議選擇CN2 GIA線路。個人推薦搬瓦工。下面是註冊教程,廣告嫌疑大,不需要不要點...

哪些潤唇膏好用,哪些不好用?

護膚攻略 我覺得珂潤潤浸保濕唇膏還不錯的,建議還是先看看試用體驗。由於一直使用珂潤的面霜,所以對這個牌子還是蠻有好感的,開啟後比較讓我驚喜的是,產品摸起來的手感很舒服,感覺是採用的帶磨砂質感的那種材質。由於手邊有一支正在使用的唇膏,所以拿到手後就先做了個對比,可以看到,一般市面上的唇膏大多都是這種矮...

IOS真的不好用嗎

某黎某某 不請自來。買了ipad pro2021,越用越想打人。它的優點我不需要,它的缺點全踩中了我需要的。對我來說,就是不好用。這幾年蘋果走下坡路了,原來的好用確實是真的,現在的好用是尬吹。 以前很好用,現在已經慢慢變成一坨屎。拿最基本的輸入法來說,曾經的ios輸入順滑到懷疑人生,全鍵盤模式下我都...