PowerShell和Bash的定义与使用


本文摘自PHP中文网,作者PHP中文网,侵删。

PowerShell是运行在windows平台的脚本,而Bash是运行在linux平台的脚本

现在bash能做的事情,PowerShell也能做,PowerShell的强大之处是它可以管理windows服务器(特别是域domain),现在的开源PowerShell 也可以管理Linux和Mac(通过PSRP)。

下载最新的PS程序


安装后它会有powershell和它的开发IDE工具,ISE,非常不错!

一、进行powershell的程序

二、创建脚本,简单的Helloworld.ps1

任务的自动化是以程序文件或者可执行脚本文件为基础的,PowerShell也支持将命令列表做成脚本文件来执行。以下是Helloworld.ps1脚本文件的内容:

1

2

3

$a = "Hello World!"$a

echo $a > a.txt

dir a.txt

Helloworld.ps1脚本文件的执行情况结果如下:

PS E:\>.\Helloworld.ps1 --注意在执行它时要加.\,表示当前上当下的文章,类似于centos里的文件执行方法
Hello world!
Directory: E:\
Mode LastWriteTime Length Name
---- ------------- ------ ----

-a--- 5/30/2017 4:56 PM 16 a.txt

下面是在eShopOnContainers上的一个例子,分别用ps和bash实现了程序的部署

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

#!/bin/bash

declare -a projectList=('../src/Services/Catalog/Catalog.API''../src/Services/Basket/Basket.API''../src/Services/Ordering/Ordering.API''../src/Services/Identity/Identity.API''../src/Web/WebMVC''../src/Web/WebSPA''../src/Web/WebStatus')

 

# Build SPA app

# pushd $(pwd)../src/Web/WebSPA

# npm run build:prodfor project in "${projectList[@]}"doecho -e "\e[33mWorking on $(pwd)/$project"echo -e "\e[33m\tRemoving old publish output"pushd $(pwd)/$project

    rm -rf obj/Docker/publish

    echo -e "\e[33m\tRestoring project"dotnet restore

    echo -e "\e[33m\tBuilding and publishing projects"dotnet publish -o obj/Docker/publish

    popd

done

 

# remove old docker images:

images=$(docker images --filter=reference="eshop/*" -q)if [ -n "$images" ]; then

    docker rm $(docker ps -a -q) -f

    echo "Deleting eShop images in local Docker repo"echo $images

    docker rmi $(docker images --filter=reference="eshop/*" -q) -f

fi

 

# No need to build the images, docker build or docker compose will

# do that using the images and containers defined in the docker-compose.yml file.

powershell代码如下

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

Param([string] $rootPath)

$scriptPath = Split-Path $script:MyInvocation.MyCommand.Path

 

Write-Host "Current script directory is $scriptPath" -ForegroundColor Yellowif ([string]::IsNullOrEmpty($rootPath)) {

    $rootPath = "$scriptPath\.."}

Write-Host "Root path used is $rootPath" -ForegroundColor Yellow

 

$projectPaths =

    @{Path="$rootPath\src\Web\WebMVC";Prj="WebMVC.csproj"},

    @{Path="$rootPath\src\Web\WebSPA";Prj="WebSPA.csproj"},

    @{Path="$rootPath\src\Services\Identity\Identity.API";Prj="Identity.API.csproj"},

    @{Path="$rootPath\src\Services\Catalog\Catalog.API";Prj="Catalog.API.csproj"},

    @{Path="$rootPath\src\Services\Ordering\Ordering.API";Prj="Ordering.API.csproj"},

    @{Path="$rootPath\src\Services\Basket\Basket.API";Prj="Basket.API.csproj"}

    @{Path="$rootPath\src\Web\WebStatus";Prj="WebStatus.csproj"}

 

$projectPaths | foreach {

    $projectPath = $_.Path

    $projectFile = $_.Prj

    $outPath = $_.Path + "\obj\Docker\publish"$projectPathAndFile = "$projectPath\$projectFile"Write-Host "Deleting old publish files in $outPath" -ForegroundColor Yellow

    remove-item -path $outPath -Force -Recurse -ErrorAction SilentlyContinue

    Write-Host "Publishing $projectPathAndFile to $outPath" -ForegroundColor Yellow

    dotnet restore $projectPathAndFile

    dotnet build $projectPathAndFile

    dotnet publish $projectPathAndFile -o $outPath

}

 

 

########################################################################################

# Delete old eShop Docker images

########################################################################################

 

$imagesToDelete = docker images --filter=reference="eshop/*" -q

 

If (-Not $imagesToDelete) {Write-Host "Not deleting eShop images as there are no eShop images in the current local Docker repo."}

Else

{

    # Delete all containers

    Write-Host "Deleting all containers in local Docker Host"docker rm $(docker ps -a -q) -f

     

    # Delete all eshop images

    Write-Host "Deleting eShop images in local Docker repo"Write-Host $imagesToDelete

    docker rmi $(docker images --filter=reference="eshop/*" -q) -f

}

 

# WE DON'T NEED DOCKER BUILD AS WE CAN RUN "DOCKER-COMPOSE BUILD" OR "DOCKER-COMPOSE UP" AND IT WILL BUILD ALL THE IMAGES IN THE .YML FOR US

自己感觉,这两个东西在以后的程序部署上都会发挥各自强大的力量!

以上就是PowerShell和Bash的定义与使用的详细内容,更多文章请关注木庄网络博客

相关阅读 >>

freeworld.posterous.com linux bash shell cheat sheet----autho:raphael

linux中systemctl命令详细介绍

如何在bash shell脚本中使用函数

linux下vsftpd的安装及配置介绍

linux下的文本编辑器介绍

linux中systemctl命令详细介绍

centos如何升级bash(修复破壳漏洞)

bash shell:测试文件或目录是否存在

bash和dos有什么区别

linux下关于bash提示符的一些操作详解

更多相关阅读请进入《PowerShell》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...