标签: scripting

将 shell 脚本的输出重定向到文件

我正在尝试重定向脚本的输出,并且需要在脚本内部调用它。

filename=uname -a
filename="$filename" date

2>&1 | tee $filename".txt"
Run Code Online (Sandbox Code Playgroud)

这就是我到目前为止所得到的,但这显然是错误的。我不太了解 SH 脚本,所以感谢帮助

-亚历克斯

shell scripting

0
推荐指数
1
解决办法
4474
查看次数

更优先 - Shebang 行还是 perl 命令?

我有多个 Perl 脚本,其中 shebang 行已过时。也就是说,shebang 指向 Perl 的旧版本。

每条路径旧:

#!/data/oracle10.0/perl/bin/perl
Run Code Online (Sandbox Code Playgroud)

新版本的 Perl 已发布

#!/data/**oracle11.0**/perl/bin/perl
Run Code Online (Sandbox Code Playgroud)

我已将 perl 命令软链接到新版本 perl 的位置。

perl -> /data/oracle11.0/perl/bin/perl
Run Code Online (Sandbox Code Playgroud)

现在,shebang 指向旧版本,perl 命令指向新版本。

所以,当我这样做时perl sample.pl,shebang 就会被忽略。

我编写了一些示例脚本来查看这一点。当我使用该命令时,shebang 行似乎被忽略了perl。但我记得旧版本的 perl 并非如此(Shebang 被认为是超过perl命令的)。

所以我的问题是,新版本的 perl(5.10)和旧版本(5.8)对于 shebang 行是否有不同的行为?如果将 perl 命令传递给新版本的 Perl,它会忽略 shebang 行吗?

scripting perl shebang

0
推荐指数
1
解决办法
303
查看次数

ZSH 仅循环数组的第一项

#/bin/zsh
servers=('10.138.0.8' '10.138.0.91')

for srv in $servers; do
   echo "Checking health for " $srv
   echo "=========================================="
   echo mntr | nc $srv 2181 
done
Run Code Online (Sandbox Code Playgroud)

当我执行时,我没有循环第二个值10.138.0.91,如下所示

[devops@devops]~% ./healthcheck/zookeeper.sh  
Checking health for  10.138.0.8
==========================================
zk_version      3.4.10-39d3a4f269333c922ed3db283be479f9deacaa0f, built on 03/23/2017 10:13 GMT
zk_avg_latency  0
zk_max_latency  0
zk_min_latency  0
zk_packets_received     9
zk_packets_sent 8
zk_num_alive_connections        1
zk_outstanding_requests 0
zk_server_state follower
zk_znode_count  4
zk_watch_count  0
zk_ephemerals_count     0
zk_approximate_data_size        27
zk_open_file_descriptor_count   28
zk_max_file_descriptor_count    4096
Run Code Online (Sandbox Code Playgroud)

为什么?

unix shell scripting zsh shebang

0
推荐指数
1
解决办法
559
查看次数

从 bash 脚本中创建 HTML 页面

这可能是一个非常愚蠢的问题,但我目前有一个包含一些 HTML 内容的脚本。运行脚本后,我可以轻松创建 HTML 页面:

./scriptName.sh > test.html
Run Code Online (Sandbox Code Playgroud)

然而,我想要实现的是在脚本中创建 HTML 页面,并且在执行时不将其作为参数传递,也不由用户以任何方式指定。

换句话说,我希望脚本的运行方式如下:

./scriptName.sh
Run Code Online (Sandbox Code Playgroud)

在该脚本中,创建的 HTML 与执行时传递的 HTML 类似。

这可能吗?如果是这样,我将如何实现这一目标?

就其价值而言,我的脚本非常简单,如下所示:

#!/bin/bash

cat << _EOF_
<!DOCTYPE html>
<html>
<head>

</head>
<body>

<h1>Hello World</h1>

</body>
</html>

_EOF_
Run Code Online (Sandbox Code Playgroud)

html bash shell scripting

0
推荐指数
1
解决办法
1万
查看次数

PowerShell Winform GUI 中的 WebView2

我无法找到任何有关此的信息,所以我不确定它完全可能。我目前正在尝试将 WebView2 控件集成到我的 PowerShell Winform GUI 中。我在调试脚本时可以看到 webView2 控件已创建,但没有加载任何内容。我安装了 WebView2 运行时。

这是我到目前为止所拥有的:

function Show-test-WebView2Control_psf {

#----------------------------------------------
#region Import the Assemblies
#----------------------------------------------
[void][reflection.assembly]::LoadFile('C:\Tests\Assemblies\Debug\Microsoft.Web.WebView2.WinForms.dll')
[void][reflection.assembly]::LoadFile('C:\Tests\Assemblies\Microsoft.Web.WebView2.Core.dll')
[void][reflection.assembly]::LoadFile('C:\Tests\Assemblies\Microsoft.Web.WebView2.Wpf.dll')
[void][reflection.assembly]::Load('System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a')
[void][reflection.assembly]::Load('System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089')
#endregion Import Assemblies

#----------------------------------------------
#region Generated Form Objects
#----------------------------------------------
[System.Windows.Forms.Application]::EnableVisualStyles()
$form1 = New-Object 'System.Windows.Forms.Form'
$buttonRefresh = New-Object 'System.Windows.Forms.Button'
$buttonGo = New-Object 'System.Windows.Forms.Button'
$textbox1 = New-Object 'System.Windows.Forms.TextBox'
[Microsoft.Web.WebView2.WinForms.WebView2] $webview = New-Object 'Microsoft.Web.WebView2.WinForms.WebView2'
$InitialFormWindowState = New-Object 'System.Windows.Forms.FormWindowState'
#endregion Generated Form Objects

#----------------------------------------------
# User Generated Script
#----------------------------------------------

$form1_Load={
    #TODO: Initialize …
Run Code Online (Sandbox Code Playgroud)

powershell scripting winforms webview2

0
推荐指数
1
解决办法
5600
查看次数

在 Windows PowerShell 中使用计时器

我正在尝试弄清楚如何在 Windows PowerShell 中使用计时器。我希望我的脚本运行命令/任务一段时间,停止任务,然后将结果输出到 txt 文件。这是我到目前为止所拥有的:

$timer = [Diagnostics.Stopwatch]::StartNew()

while ($timer.elapsed.totalseconds -lt 10){

netstat 169.254.219.44 

$timer.stop() | 
Out-File $PSScriptroot\connections.txt

break
}
Run Code Online (Sandbox Code Playgroud)

该脚本所做的就是在终端中运行命令,直到我按 ctrl+c。一旦我按 ctrl+c,它就会停止,然后输出 .txt 文件。但 .txt 文件是空白的。我花了比我应该花的时间更多的时间来试图解决这个问题。我是 Windows PowerShell 的新手,只是闲逛看看我能做什么。该脚本没有真正的目的。这简直让我发疯,我无法弄清楚这一点......

windows powershell scripting timer

0
推荐指数
1
解决办法
2万
查看次数

if 语句中的 grep 命令

#!/bin/bash
read -p "enter search term here: " searchT

if [[ $(cat test.txt | grep -wi '$searchT') ]]; then     
    echo "$(cat test.txt | grep '$searchT' && wc -l) number of matches found"
    echo $(cat test.txt | grep '$searchT')

else echo "no match found"    

fi

exit 0
Run Code Online (Sandbox Code Playgroud)

如果if statement为真,我如何使脚本运行。当我运行脚本时,脚本将输出else语句。因为没有值可以与 grep 命令进行比较。

unix bash scripting

0
推荐指数
2
解决办法
761
查看次数

PowerShell :: SQL SELECT 只返回第一行

我有一种奇怪的感觉,我在这里做错了什么。

这是我的 PowerShell 脚本,当然是从这里窃取和改编的:

param(
    $instance = "localhost"
)

if (!(Get-Module -ListAvailable -Name "SQLPS")) {
    Write-Host -BackgroundColor Red -ForegroundColor White "Module Invoke-Sqlcmd is not loaded"
    exit
}

#Function to execute queries (depending on if the user will be using specific credentials or not)
function Execute-Query([string]$query,[string]$database,[string]$instance,[int]$trusted,[string]$username,[string]$password){
    if($trusted -eq 1){
        try{ 
            Invoke-Sqlcmd -Query $query -Database $database -ServerInstance $instance -ErrorAction Stop -ConnectionTimeout 5 -QueryTimeout 0      
        }
        catch{
            Write-Host -BackgroundColor Red -ForegroundColor White $_
            exit
        }
    }
    else{
        try{
            Invoke-Sqlcmd -Query $query …
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server powershell scripting automation

0
推荐指数
1
解决办法
56
查看次数

使用 sed 删除包含主机名的行

我有一台主机,其主机名是 ,babuntu10而且hostname12我只想从fstab条目中删除主机名之一,但以下sed命令会同时删除它们:

sed -i '/'"$HOSTNAME:"'/,$d' /etc/fstab
Run Code Online (Sandbox Code Playgroud)

输入文件:

babuntu10:/root/products/babuntu10 /root/products/babuntu10 nfs soft,timeo=1,retrans=1 0 0
babuntu12:/root/products/babuntu12 /root/products/babuntu12 nfs soft,timeo=1,retrans=1 0 0
Run Code Online (Sandbox Code Playgroud)

我只需要删除带有主机名的条目。

bash scripting sed

0
推荐指数
1
解决办法
114
查看次数

如何使用 Scala 运行简单的脚本?

我已经安装了 Scala(在一台气隙 Linux 机器上,来自 scala3-3.3.1.tar.gz)。

我尝试运行一个简单的 Scala 程序,无需sbt. 所以我写了一个文件hello.scala

object Hello {
  def main(args: Array[String]) = {
    println("Hello, World")
  }
}
Run Code Online (Sandbox Code Playgroud)

然后调用

scala hello.scala 
Run Code Online (Sandbox Code Playgroud)

这有效。:-)

但我浏览了 Scala 3 网站,看到了许多没有整个“对象包装”的代码示例。所以我希望写一个更简单的文件script.scala

scala hello.scala 
Run Code Online (Sandbox Code Playgroud)

并运行它scala。但这不起作用:Scala 返回错误“顶级定义的非法开始”。

我怎样才能运行这个?我需要一些命令行选项吗?或者我需要吗scala-cli?(我读到scala已经成为或将成为scala-cli。)

我很困惑。在气隙机器上运行简单 Scala 脚本的最佳方法是什么?

scripting scala scala-cli

0
推荐指数
1
解决办法
59
查看次数