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.mzph.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给定一段连续的整数。求出他们中全部偶数的平方和以及全部奇数的立方…