天天看點

為什麼Bash比指令提示符好?CMD有什麼缺陷?powershell的優勢?

作者:萊迪娜的風聲

原因很簡單,BASH領先于Windows CMD.exe批處理器。

我在CMD 程式設計領域投入了很多的時間精力,讓CMD去做大多數有經驗的Windows管理者認為永遠不可能的事情,并做很多Bash甚至PowerShell可以做的事情。

盡管在CMD中幾乎所有事情都是可能的,但它的許多缺陷使大多數複雜的任務變得尴尬或乏味。

主要不足:

  • 非常差的變量支援。環境變量 %path%、for循環變量%%a %%b,甚至call參數%1 %2都可以工作,但是在可能的情況下将指令輸出作為變量指派并沒有得到很好的支援,而且相當不自然。
  • 缺乏友善的數學和字元串函數。數學是可能的,字元串操作也是有可能的,并且具有内置功能,但它們是非常簡陋和乏味的。支援非常有限。
  • 循環和其他流程控制結構 – IF then ELSE可以正常使用,但是for variable in file or string or commands do something結構也很乏味。注意,我現在挺擅長for指令的,但是這些年我花了相當長的時間才能流暢的運用這個,而且容易出錯。
  • 不一緻的傳回代碼。大多數指令都可以正确執行此操作,但也有足夠多的指令不能做到這一點,進而使結果有時無法預測。
  • Windows本地缺少Linux樣式的實用程式,這些實用程式可以執行指令處理器難以執行的操作。
  • 沒有内置的sed,awk,perl等指令。雖然findstr可以工作。但它是grep指令的糟糕替代品,
  • 等等還有更多

這些問題很少有是不可克服的,外部指令可以輕松解決幾乎任何問題。諸如Perl,Python,甚至Bash都可以在CMD下運作。但這些對于擁有數千台電腦的管理者沒有多大幫助,這些電腦不允許你随意的安裝第三方軟體。

批處理的for循環還有一個非常煩人的地方是,當直接在 cmd 行上執行時,它們必須使用 1個% 符号 %a,并且在批處理檔案中使用相同的變量時必須使用 2個% 符号 %%a 。這個不同的地方使 cmd 腳本測試很容易出錯。這導緻我在指令行測試完成後,還需要再将代碼添加到批處理之前更改代碼。

CMD具有過程調用,而且也可以僞造各種函數調用,甚至第三方指令,但這對于大多數Windows使用者甚至進階從業者來說非常乏味、無聊且不可預測。

PowerShell在很多方面都要好得多,甚至明顯比BASH好得多,但PowerShell直到XP / 2003之後才預設出現在Windows上。即使如此,ps1腳本也被愚蠢地預設禁用,直到2012-R2 / 8.1才可以直接使用。此外,預設情況下它還禁用遠端處理,直到更高版本才取消掉。

如果不能依賴 PowerShell或其他工具預設存在并啟用,則大多數腳本都需要避免依賴它。對于 Win2003 及更早版本仍然大量存在的大型伺服器資産來說,這主要是一個問題。

在PowerShell中預設禁用腳本是安全性的一些愚蠢想法,但是可以編寫CMD批處理檔案來打開該腳本,是以它隻會給剛接觸PowerShell的管理者帶來煩人的障礙,并減慢此工具的普及與采用速度。

那麼為什麼是CMD?因為目前使用的所有Windows系統上隻有2種語言:CMD和VBScript。是以,盡管我們不喜歡這些,但如果我們要在客戶仍在使用的所有系統包括 NT4、XP、2000/2003,甚至未啟用 PowerShell 的 2008-R2 等上實作自動化,CMD和VBScript是必要的。

但是對于最近的系統,現在甚至對于Linux和Mac IOS如果你被允許安裝Powershell,那麼PowerShell是以後要走的路。

為什麼Bash比指令提示符好?CMD有什麼缺陷?powershell的優勢?
為什麼Bash比指令提示符好?CMD有什麼缺陷?powershell的優勢?
為什麼Bash比指令提示符好?CMD有什麼缺陷?powershell的優勢?