标签: bash-scripting

计算两个文件之间的%差异和文件大小

我们有两个 zip 文件,想对它们进行比较。

我们还对计算它们与文件大小之间的百分比差异感兴趣。有没有一个工具可以快速做到这一点?

linux shell shell-script bash-scripting

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

Linux Bash "|" 运营商不工作 - 我做错了什么?

我正在尝试通过这样的登录命令检查用户密码:

# echo "name\npassword" | login  
Run Code Online (Sandbox Code Playgroud)

但命令结束时没有写任何东西。echo由于 SIGPIPE 而结束。为什么login在要求名称和密码之前停止?

当我对passwd命令执行相同操作时,它可以工作:

# echo "password\npassword" | passwd  
Enter new UNIX password: 
Retype new UNIX password:
passwd: password updated successfully 
Run Code Online (Sandbox Code Playgroud)

我有 Ubuntu 12.04 和 Bash 4.2.25

linux bash bash-scripting

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

IT 专业人员最喜欢的脚本语言

IT 专业人员最喜欢使用的脚本语言是什么?为什么?我看到开发人员主要使用 Javascript,而 Windows 管理员使用旧版 VBScript 和 Powershell,UNIX/Linux 管理员使用 bash/shell。是否有适用于所有平台的全球通用脚本语言?

script powershell shell-script bash-scripting

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

Bash:循环存储的主机名,通过 SSH 在这些主机上执行命令

我将主机名列表存储在名为 ssh_hosts.txt 的文件中。在 shell 脚本中,我循环访问 ssh_hosts.txt 中的主机名,并通过 SSH 在指定主机上执行命令。shell 脚本如下所示。

问题是脚本在处理第一个主机后退出。但是,如果我除了通过 ssh 在指定主机上执行命令之外执行其他操作,脚本将运行完成。

在下面的示例中,我注释掉了对 ssh 的调用,并将其替换为当前主机名的简单回显。这将运行直至完成。

我从 Windows 7 上的以下 Cygwin 版本下运行的 bash shell 执行此脚本:

$ uname -a
CYGWIN_NT-6.1 myHostname 1.7.16(0.262/5/3) 2012-07-20 22:55 i686 Cygwin
Run Code Online (Sandbox Code Playgroud)

涉及到的SSH版本有:

$ ssh -V
OpenSSH_6.0p1, OpenSSL 1.0.1c 10 May 2012

$ ssh myUsername@remoteHost 'ssh -V'
myUsername@remoteHost password:
OpenSSH_6.7p1 Debian-5+deb8u3, OpenSSL 1.0.1t  3 May 2016
Run Code Online (Sandbox Code Playgroud)

这是 shell 脚本:

#!/bin/bash

if [[ $# -ne 1 ]]; then
   echo "Usage: $(basename $0) <user name>"
   exit 1
fi

USER="$1" …
Run Code Online (Sandbox Code Playgroud)

ssh cygwin bash openssh bash-scripting

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

如何仅在进程失败时重新启动进程,而在正常退出(或具有某些返回代码)时则不重新启动进程?

我遇到一个奇怪的问题,可能与硬件初始化有关。我正在开发一个基于 Java 的自动数据采集系统,该系统在带有 Ubuntu 16.04 的 SBC 上运行。数据采集​​程序目前是通过 cron 启动的,尽管我打算切换到 systemd。

如果我重新启动系统,它就会启动并运行良好。但是,如果断电并冷启动(这是正常方式),程序将崩溃并出现错误free(): corrupted unsorted chunks。如果我再次启动它,它似乎运行良好。我需要找出原因,希望能找出原因,但这可能需要一些时间,同时系统需要进一步测试,我需要一种解决方法,可以在崩溃时重新启动它。仅添加延迟并没有帮助。

我想做的是重新启动 Java 进程或从 bash 包装脚本重新启动系统,但前提是它崩溃了。如果它以零退出代码退出(或者,理想情况下,以预定的允许退出代码集中的任何代码退出),则不应重新启动它,并且脚本也应退出。

java bash ubuntu bash-scripting

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

旋转奇数图片

我写了一个小脚本来旋转目录的所有奇数图片,但我无法让它工作。这是代码。

#!/bin/bash

count=1

for picture in `ls -v *.png`
do
    if ["$picture" == "picture_$count.png"]
    then
        mogrify -rotate 90 "$picture"
        count=$(($count+2))
    fi
done
Run Code Online (Sandbox Code Playgroud)

有什么建议?

linux bash bash-scripting

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

Groovy 语法不适用于反斜杠

我试图在常规语法中的以下命令中使用反斜杠:

find /path/folder-* -type f -iname "file*" -exec rm -f {} \;
Run Code Online (Sandbox Code Playgroud)

当我尝试在 Jenkins 管道上构建此命令时,会出现有关此语法的错误。甚至在我执行此命令之前,Jenkins 表单字段上就会出现红色语法警告,提示意外字符:“\”。

我可以做什么来替换或修复这个反斜杠的错误?

Groovy 命令:

node ("instance") {
    stage ("cleaning folders"){
        sh '''        
        find /root/logfiles/instance* -type f -iname "file*" -exec rm -f {} \;
        '''
    }
    stage ("instance1"){
        sh '''
        rm -f /root/logfiles/instance1/*
        echo instance1; 
        scp 100.0.0.50:/var/log/file1.log /root/logfiles/instance1/file1.log;
        scp 100.0.0.50:/var/log/file2.log /root/logfiles/instance1/file2.log;
        '''
    }
    stage ("instance1"){
        sh '''
        rm -f /root/logfiles/instance2/*
        echo instance2; 
        scp 100.0.0.51:/var/log/file1.log /root/logfiles/instance2/file1.log;
        scp 100.0.0.51:/var/log/file2.log /root/logfiles/instance2/file2.log;
        '''
    }
}
Run Code Online (Sandbox Code Playgroud)

注意:rm -f目前我对所有情况都有。将全部替换rm …

bash find bash-scripting groovy jenkins

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

在脚本中更改目录不会更改目录——为什么?

自从搜索这个以来,我已经看到了这个答案,但最初我写了这个脚本:

for i in `seq 1 $1`; 
   do cd ../;
done;
Run Code Online (Sandbox Code Playgroud)

它不会更改目录。这是为什么,运行为

./updir.sh 5
Run Code Online (Sandbox Code Playgroud)

bash bash-scripting

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

每次打开终端窗口时运行脚本

所以我编写了一个简单的 bash 脚本来在每次打开新的终端窗口时运行一个名为“cmatrix”的程序。

我已经更改了文件的权限,因此每个人都可以接收它,并验证它在调用时是否会按照我想要的方式运行,但现在我不知道将脚本放在哪里,以便它在每个新的 bash 上运行终端启动。我知道如果我希望它在启动时运行,我会将其放置在 usr/local/bin 中,但我只希望它在打开新的终端窗口时运行。

非常非常简单:

cmatrix -bs -C cyan
Run Code Online (Sandbox Code Playgroud)

感谢任何和所有的帮助!

谢谢

linux terminal bash linux-mint bash-scripting

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

在屏幕中运行命令的 Bash 脚本

我需要创建一个 bash 脚本来打开一个新的屏幕会话,然后在该会话中运行一个程序。有可能这样做吗?任何帮助表示赞赏。

mac terminal bash-scripting

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