powershell awk_談談 PowerShell

v2-f893a7b41ee1a87947da396e7edb9f28_1440w.jpg?source=172ae18b

萬事萬物,有始有終。直從萌芽拔,高自毫末始。

所謂的 Shell,無非是應用程序與操作系統內核進行交互的一個中間程序而已。我本人玩電腦也有很久一陣子了,最開始接觸到的就是Windows 7 操作系統,當時 Windows 7 上市不久,我在那臺 20 英寸的液晶顯示器上看了很多 PC 的知識。但是我第一次接觸Shell,卻是在 Linux上。

Linux 上最常用的是 Bash,這是一個對于 Bourne Shell 的再造版,完全免費、開源,而且很好用。而 Linux 上的 zsh 也不錯,而且很多提示功能非常貼心。就這么一個好用的 shell 程序,自然身受很多程序員的喜愛。玩電腦怎么能不搞點自動化呢?

想想有哪些東西需要自動化?我列舉幾個:

  • 寫了一個程序,要用來編譯、測試、測試完再清理編譯的產物,這個時候需要一個自動化的操作
  • 用 LaTeX 寫了一篇論文或者文章,希望能自動進行編譯,然后自動清理產生的 aux、log 等中間產物,只留下編譯產生的 PDF 文件
  • 喜歡一個網頁或者博客,希望及時收到這個網頁的更新,這個時候你需要一個程序,自動地每隔幾秒、幾分鐘、數小時發起一次 HTTP 請求,然后獲得頁面中相應部分的更新情況(比如淘寶頁面,價格是否變化了?)
  • 自己的系統裝了很多軟件,希望能夠批量進行更新情況檢查,一旦有部分軟件出了新版,就自動聯網更新。
  • ...

上述的幾個情況比較特殊,但是確確實實貼近我們的生活。最初的 Windows 系統,并不支持這種內建的自動化操作,你能想到的也就是 cmd 命令行。而這個命令行確實非常難用,讓一些追求軟件美感的人望而卻步(嗤之以鼻)。

1、何以 UNIX/Linux

UNIX 是從實驗室里走出來的操作系統,小巧、高效、簡潔、開放。而 Linux 作為 UNIX 的凈室再現,也相應地具有了 UNIX 的各種優點,也兼容 UNIX 系統的很多程序。等到把 GCC 移植到 Linux 之后,Linux 的增長曲線開始發力,因為一旦有了某個平臺的編譯器,我們只需要把其他平臺的源代碼拿過來編譯一遍,就得到了適用于新平臺的軟件。當然,前提是新平臺符合 POSIX 標準。

那么為何 bash 在 UNIX 世界里這么受歡迎呢?我認為有以下幾個原因。

  1. 使用者生活在一個自由的環境里
  2. 使用者的知識水平比較高,眾所周知,BSD 版本的 UNIX 是在伯克利大學流傳開來的,那里的師生什么水平、什么審美,相信大家有目共睹
  3. UNIX 的偽終端非常好用,以 macOS 為例,你可以直接在 Terminal 里面,用鍵盤復制、粘貼,而其他諸如 Linux 自帶的終端也很好用
  4. Bash 的開發很有趣,相關的程序很給力,比如 GNU 軟件,awk、perl、sed 等程序,非常適合命令行下操作字符串
  5. 很有美感

以上種種原因,使得 bash 腳本在 UNIX 世界里廣受歡迎,你只要稍加練習,就會愛上這門語言。

但是,PC 裝機份額最大的 Windows 用戶,在這一方面卻始終處于水深火熱之中。懷抱著丑陋的 cmd,用著蹩腳的復制、粘貼操作。更重要的是,很多 Windows 用戶并不知道竟然可以自己寫腳本來控制自己的電腦,解放自己的雙手!

2、準備好了嗎?PowerShell

2.1 粗略介紹一下 PowerShell 與 bash 的區別與聯系

現如今 Windows 10 平臺的 PowerShell 是 5.0 版本。支持 cmdlet。所謂的 cmdlet 就是相當于微軟 .Net 平臺的一套小程序,命名為 Verb-Noun。舉個例子說明一下什么是 cmdlet,你在 UNIX 上輸入命令創建一個空的文件夾:

#!/bin/bash
mkdir Test_dir

在 Windows Powershell 里面就有對應的 cmdlet:

# 創建一個名為 Test_dir 的文件夾
New-Item -ItemType Directory Test_dir

UNIX 這里面的 mkdir 就是一個小程序,你確實可以在 UNIX 上找到一個名為 mkdir 的可執行程序。但是 Windows 卻不這么認為,Windows 認為用戶可能誤刪某些小程序,導致你無法再正常使用 Windows 的 Powershell,于是微軟的工程師,直接把需要用到的“小程序”集成在一起,禁止你直接訪問、刪改。

bash 是支持管道的,一個進程的輸出,可以當作另一個進程的輸入。換句話說,Linux/UNIX 是一個文本控件,一切皆文本,文本字節流是這個空間里的對象。

Get-PSDrive | ?{$_.Free -gt 1} | %{$Count = 0; Write-Host "";} { $_.Name + ": Used: " + "{0:N2}" -f ($_.Used/1gb) + " Free: " + "{0:N2}" -f ($_.free/1gb) + " Total: " + "{0:N2}" -f (($_.Used/1gb)+($_.Free/1gb)); $Count = $Count + $_.Free;}{Write-Host"";Write-Host "Total Free Space " ("{0:N2}" -f ($Count/1gb)) -backgroundcolor magenta}

Get-PSDrive 是一個小程序,也就是 Power Shell 里的cmdlet。上述命令很復雜,你可以通過視頻進行學習。上述的文件寫進 bat 腳本里,雙擊腳本運行,會得到一個類似的輸出:

C: Used: 138.99 Free: 98.85 Total: 237.84
D: Used: 262.06 Free: 110.55 Total: 372.61
E: Used: 0.16 Free: 465.60 Total: 465.76
F: Used: 1,141.78 Free: 1,652.62 Total: 2,794.39
G: Used: 0.23 Free: 2,794.16 Total: 2,794.39
H: Used: 7.27 Free: 3,718.73 Total: 3,726.01
I: Used: 0.21 Free: 1,862.78 Total: 1,862.98
J: Used: 0.18 Free: 931.34 Total: 931.51
K: Used: 0.18 Free: 931.33 Total: 931.51Total Free Space  12,565.97

cmdlet 約等于 UNIX 里 /bin 下面的小程序,只是你在文件瀏覽器里找不到它而已。除此之外,Power Shell的使用,與 bash 差不多(我可不是說兩者的語法差不多!)。

2.2 高傲的微軟向UNIX世界屈服了嗎?

微軟絕不是因為“他們有,所以我們也要有!”而創立的PowerShell。

微軟主要是因為 Windows Server 的管理問題而開發了 Power Shell 這個東西。所以從這里你也應該看出來了,微軟相當于間接承認,沒有shell的一個操作系統很難用

如果把 .Net 平臺提供的開發 API 稱為生肉的話,那么 PowerShell 就是經過烹調的熟肉。雖然生肉不好下嘴,但是你可以經過自己的烹調,獲得最大的自由度。熟肉雖然好吃,但是你只能換個花樣切一切再吃,沒有什么自由度,想換個口味?幾乎沒可能。

三、PowerShell好用嗎

很好用。

之前我一直對微軟的 Windows 系統的開發能力很懷疑,我有個 MacBook Pro 15,特意配了 32GB 內存來搞開發,用起來很爽。但是哪怕我的 PC 機配置很強大,我也很不想用它來開發,我一般都是再 WSL 里運行我在 Mac 上寫好的程序。但是最近和小伙伴們聊起來,大家對 PowerShell 還是贊不絕口的。

所以我承認,我對微軟有偏見了。

如果你沒有對一個系統做深入了解,你就不能武斷地認為這個系統很難用。一眼看上去就很美,大概率是很美;一眼看上去不好用,大概率是因為你不夠了解(比如Vim)。

最后談談 PowerShell 哪些地方好用吧:

3.1 良好的自動補全功能

不得不承認,PowerShell 的自動補全非常好用,可以忽略大小寫進行循環匹配,bash 的匹配,如果出現前綴對應著多個可能的命令,就會列出來讓你選擇(除非用插件),但是 PowerShell 可以隨著你按 TAB 進行自動匹配下一個可能的選項。這點仁者見仁智者見智吧,Power Shell 如果提示太多一時找不到,還得刪掉已經提示的,然后重新輸入,這點也很煩人。

不過,總體來說很優秀。

3.2 對于管道支持良好

這一點配合 Power Shell 的面向對象特性特別有用。喜歡的自己鉆研的時候注意一下。

3.3 支持環境變量

PS C:Usersnewton> $env:PATH
C:Program FilesPowerShell7-preview;C:Program FilesPython38Scripts;C:Program FilesPython38;C:Windowssystem32;C:Windows;C:WindowsSystem32Wbem;C:WindowsSystem32WindowsPowerShellv1.0;C:WindowsSystem32OpenSSH;C:Program FilesMicrosoft VS Codebin;C:Program FilesGitcmd;C:Program Filesdotnet;C:Program FilesMacType;C:Program FilesPolyspaceR2020aruntimewin64;C:Program FilesPolyspaceR2020abin;C:Program FilesPolyspaceR2020apolyspacebin;C:Program Files (x86)Wolfram ResearchWolframScript;C:Program FilesPowerShell7-previewpreview;C:texlive2020binwin32;C:UsersnewtonAppDataLocalMicrosoftWindowsApps;D:UsersnewtonDocumentsSoftwaressoftware_windowsdownloadm3u8DL;C:Program Files (x86)Microsoft Visual Studio2019CommunityVCToolsLlvmbin;C:Program Files (x86)Microsoft Visual Studio2019CommunityVCToolsMSVC14.25.28610binHostx64x64
PS C:Usersnewton> 

3.4 可以發揮 .Net 平臺的巨大優勢

結合 Office,C#,非常好用。

結束語

如果不是對 Linux 有著絕對依賴,即你知道自己哪些需求絕對離不開 Linux,那么不妨試試 Powershell,這個真的很不錯。微軟敢以 Power 之名,必然是有著相當的自信。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/396913.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/396913.shtml
英文地址,請注明出處:http://en.pswp.cn/news/396913.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

設計模式之: 裝飾器模式

什么是裝飾器模式 作為一種結構型模式, 裝飾器(Decorator)模式就是對一個已有結構增加"裝飾".適配器模式, 是為現在有結構增加的是一個適配器類,.將一個類的接口,轉換成客戶期望的另外一個接口.適配器讓原本接口不兼容的類可以很好的合作.裝飾器模式是將一…

python七段數碼管的詳解,Python入門基礎:七段數碼管繪制

1.在學習Python的過程中,運用所學的一些基礎知識,進行一些簡單的編程,可以收獲很多樂趣。在生活中,LED燈無處不在,熒幕顯示的廣告詞,給我們呈現出動態的視覺效果。下面,則以最簡單的顯示日期為例…

@class

使用格式class 類名; class寫在.h文件里,import寫在.m文件里。這樣可以提高編譯效率 import會在導入文件發生變化時重新拷貝編譯,而class只會告訴使用者有這個類,并不會去拷貝。 場景1 使用import:a拷貝b,b拷貝c&#…

python圖標的演變_Python3 生成icon圖標

首先安裝所使用的庫 pillow, pillow 是用來取代 PIL 的, pip3 install pillow 安裝成功圖:A866FFD7-2283-4BFB-8313-DBDEE909A579.png 簡單的代碼: from __future__ import print_function import os, sys from PIL import Image …

IDEA 熱部署 僅支持jdk1.6,1.7

第一安裝 dcevm 下載地址http://ssw.jku.at/dcevm/binaries/ java -jar dcevm-0.2-win.jar ,選擇需要安裝該補丁的jdk,點擊按鈕Install即可 第二:IDEA 在Debug模式下運行,這時隨便修改文件,自動發布到tomcat中 超級快…

php中perl配置,Windows下 Apache、PHP和Perl的安裝配置

在安裝AWStats7.0和 JAWStats之前需要配置其環境,而運行AWStats需要perl支持,運行JAWStats需要PHP支持,這篇文章將具體介紹其環境的安裝配置。環境Windows 2003Apache2.2Per5.12lPHP5(開源)Apache:http://httpd.apache.org/Perl&a…

Android常用的一些make命令(轉載)--不錯

原文網址:http://blog.sina.com.cn/s/blog_abc7e49a01011y0n.html 1.make -jXX XX表示數字,這個命令將編譯Android系統并生成鏡像,XX表示可以使用到的CPU核數,這在配置好的電腦上特別有用,公司的16核ubuntu服務器執行…

arraylist 初始化_ArrayList(JDK1.8)源碼解析

既然是看源碼,那我們要怎么看一個類的源碼呢?這里我推薦的方法是:1)看繼承結構看這個類的層次結構,處于一個什么位置,可以在自己心里有個大概的了解。2)看構造方法在構造方法中,看做了哪些事情,…

技術管理:技術負責人所需的四個核心能力

簡述 「技術負責人」這一稱呼其實比較泛了。往大了講,可以指 CTO、技術VP、技術總監,往小了講,可以指 小組Leader、技術主管、架構師 等。 這些不同崗位的「技術負責人」在工作中會處理著各不相同的問題,因此對他能力要求的側重點…

think php f方法,修改ThinkPHP3.2的F方法

修改ThinkPHP3.2的F方法ThinkPHP3.2的F采用的是序列化方式保存數據,由于F方法保存的文件名是已知的可能造成一些數據泄露,所以在此修改F方法直接替換TP的F方法即可function F($name, $value, $pathDATA_PATH) {static $_cache array();$filename $path…

php Pthread 多線程 (二) Worker和Threaded

<?php //Worker是具有持久化上下文(執行環境)的線程對象 //Worker對象start()后&#xff0c;會執行run()方法&#xff0c;run()方法執行完畢&#xff0c;線程也不會消亡 class MySqlWorker extends Worker {private $name ;private $db null;public function __construct…

ios yymodel 將字典轉數組模型_TensorNet——基于TensorFlow的大規模稀疏特征模型分布式訓練框架

TensorNet是什么&#xff1f;TensorNet是一個構建在TensorFlow之上針對廣告推薦等大規模稀疏場景優化的分布式訓練框架。TensorNet的目標是讓所有使用TensorFlow的開發者可以快速的、方便的訓練出稀疏參數超過百億的超大模型。訓練帶有大規模稀疏特征模型的主要挑戰在廣告、搜索…

mysql 索引及索引創建原則

是什么 索引用于快速的查詢某些特殊列的某些行。如果沒有索引&#xff0c; MySQL 必須從第一行開始&#xff0c;然后通過搜索整個表來查詢有關的行。表越大&#xff0c;查詢的成本越大。如果表有了索引的話&#xff0c;那么 MySQL 可以很快的確定數據的位置&#xff0c;而不用查…

php文件怎么制定編碼格式,php文件編碼格式對結果有影響

最近弄個小網站&#xff0c;發現windows下的文件上傳到linux服務器上后&#xff0c;出現了標簽錯亂的問題。比如&#xff0c;我的代碼是&#xff1a;print testtest;但是&#xff0c;瀏覽器的解析格式缺成了下面的樣子:testtest進過不停地搜索&#xff0c;發現了問題所在&#…

【鏈表】Add Two Numbers

題目&#xff1a; You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list. Input: (2 -> 4 -> 3) (5…

我們為何要使用多線程,它有什么優點?

其實在平時的開發中&#xff0c;很多程序員都不會去寫線程&#xff0c;為啥&#xff1f;因為麻煩&#xff0c;其次是用到的地方并不多&#xff0c;除非逼不得已&#xff0c;大家都不會去寫&#xff0c;畢竟寫一天代碼&#xff0c;拿一天工資&#xff0c;是吧&#xff1f; 麻煩歸…

ecs服務器數據遷移_如何非常方便地從Windows文件服務器把數據完整地遷移到ONTAP Select...

這是一個續篇&#xff0c;如果你依然愛你的Windows文件服務器或者使用Windows文件服務沒有任何問題的話&#xff0c;請忽略我。續自&#xff1a;從Windows文件服務器&#xff0c;到ONTAP Select軟件定義存儲感謝聯想凌拓合作伙伴新銳英誠的幫助&#xff0c;我們成功地做到了從海…

yum第三方安裝-軟件包沒簽名及更新錯誤

yum安裝時 后面加 --nogpgcheck 阿里云源文件&#xff1a;http://mirrors.aliyun.com/repo/Centos-7.repo epel repo源&#xff1a;http://mirrors.aliyun.com/repo/epel-7.repo yum update 錯誤提示 Error: initscripts conflicts with centos-release-7-4.1708.el7.centos.x8…

oracle觸發和存儲過程,Oracle存儲過程與觸發器

Oracle存儲過程與觸發器存儲過程存儲過程最直接的理解&#xff1a;就是保存了批量的sql(select,insert,if for)&#xff0c;以后可以通過一個名字把這些批量的sql執行&#xff0c;使用存儲過程在大批量數據查詢或計算時會帶來高性能&#xff0c;存儲過程編寫和調試比較復雜&…

(hdu 簡單題 128道)平方和與立方和(求一個區間的立方和和平方和)

題目&#xff1a;平方和與立方和Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 108212 Accepted Submission(s): 34915Problem Description給定一段連續的整數。求出他們中全部偶數的平方和以及全部奇數的立方…