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,一经查实,立即删除!

相关文章

python七段数码管的详解,Python入门基础:七段数码管绘制

1.在学习Python的过程中,运用所学的一些基础知识,进行一些简单的编程,可以收获很多乐趣。在生活中,LED灯无处不在,荧幕显示的广告词,给我们呈现出动态的视觉效果。下面,则以最简单的显示日期为例…

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…

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

既然是看源码,那我们要怎么看一个类的源码呢?这里我推荐的方法是:1)看继承结构看这个类的层次结构,处于一个什么位置,可以在自己心里有个大概的了解。2)看构造方法在构造方法中,看做了哪些事情,…

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;而不用查…

【链表】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…

ecs服务器数据迁移_如何非常方便地从Windows文件服务器把数据完整地迁移到ONTAP Select...

这是一个续篇&#xff0c;如果你依然爱你的Windows文件服务器或者使用Windows文件服务没有任何问题的话&#xff0c;请忽略我。续自&#xff1a;从Windows文件服务器&#xff0c;到ONTAP Select软件定义存储感谢联想凌拓合作伙伴新锐英诚的帮助&#xff0c;我们成功地做到了从海…

oracle触发和存储过程,Oracle存储过程与触发器

Oracle存储过程与触发器存储过程存储过程最直接的理解&#xff1a;就是保存了批量的sql(select,insert,if for)&#xff0c;以后可以通过一个名字把这些批量的sql执行&#xff0c;使用存储过程在大批量数据查询或计算时会带来高性能&#xff0c;存储过程编写和调试比较复杂&…

swift int转string_Swift集合类型协议浅析(下)

关注【搜狐技术产品】公众号&#xff0c;第一时间获取技术干货导读本篇是Swift集合类型协议浅析系列文章的下篇&#xff0c;在这篇文章中&#xff0c;我们将继续围绕集合类型协议展开讨论&#xff0c;侧重点更多地关注于String相关的周边协议。StringProtocol代表一个字符串&am…

oracle视图执行脚本,Sh脚本中查询Oracle v$视图时需要在$号前加转义符“\”

DBA经常会部署一些sh脚本登陆Oracle数据库查询v$动态视图得到一些东西来实际管理自动化的目的&#xff0c;但在sh脚本中写ORACLE SQL语句时&#xff0c;如果语句查询v$视图&#xff0c;直接写v$XXXX是不能成功的&#xff0c;shell会将$当成一个参数来处理。以下面一段简单的sh脚…

微信小程序页面跳转与返回并回传数据

2019独角兽企业重金招聘Python工程师标准>>> A页面&#xff1a; .wxml文件 <view class"flex-wrp"><text style"width: 32%;">选择城市</text><input style"width: 68%;" type"text" bindtap"ci…

地址栏 输入 参数 刷新参数丢失_小米11 Pro屏幕参数曝光:2K屏幕+120Hz刷新率

本周一&#xff0c;高通已经宣布将于12月初举行的骁龙技术峰会上正式发布新一代旗舰处理器——骁龙875。根据此前的曝光消息&#xff0c;小米11系列将首发搭载这颗芯片&#xff0c;网上也已经开始对这款新机进行曝光。日前&#xff0c;海外知名论坛XDA在MIUI 12的代码中发现了一…

Cypress EZ-USB FX3 DMA模式下的串口通讯

由于公司设备升级后出了问题&#xff0c;需要对USB驱动进行修改&#xff0c;原本使用的是寄存器模式进行UART传输&#xff0c;但是由于FX3寄存器模式会出现长时间延时等待的问题&#xff0c;不得不对其传输模式进行修改。虽然赛普拉斯的EZ-USB FX3系列芯片功能强大&#xff0c;…

springboot md5加密_实在!基于Springboot和WebScoket,写了一个在线聊天小程序

基于Springboot和WebScoket写的一个在线聊天小程序(好几天没有写东西了&#xff0c;也没有去练手了&#xff0c;就看了看这个。。。)项目说明此项目为一个聊天的小demo&#xff0c;采用springbootwebsocketvue开发。其中有一个接口为添加好友接口&#xff0c;添加好友会判断是否…

suse 启动oracle11g,SuSe10下Oracle11g文件系统模式安装及配置、网络配置与连接

SuSe10下Oracle11g文件系统模式安装及配置、网络配置与连接概述本课程主要讲解oracle数据库软件的安装及配置&#xff0c;以及数据库的创建过程和网络配置与连接等&#xff1b;同时讲解一些数据库安装过程中的常见问题解决办法。注意&#xff1a;本文当中引用的package_name均为…

Python pyenv

一、简介 一般在操作系统中我们会安装多个Python版本&#xff0c;所以在进行Python版本切换时会比较麻烦&#xff0c;pyenv就提供了一种简单的方式&#xff0c;能简易地在多个Python版本中进行切换的工具&#xff0c;它简单而优雅。pyenv有以下功能&#xff1a; 1&#xff09;进…

oracle 增加间隔分区,oracle分区表之间隔分区(oracle 11g) - 漫兮网

范围分区允许用户根据分区键列值的范围创建分区。下面是一个按范围分区表的示例&#xff1a;create table sales6(sales_id number,sales_dt date)partition by range (sales_dt)(partition p0701 values less than (to_date(2007-02-01,yyyy-mm-dd)),partition p0702 values l…