标签: scripting

查找总 RAM 内存和交换内存

我需要编写一个脚本来查找多个 Linux 服务器(2000+)的总内存和总交换空间。我有一台受信任的服务器,无需密码即可登录所有这 2000 台服务器。

当我运行这个脚本时,它应该给出如下输出:

Server         total memory        swap
redhat1   
redhat2
redhat3
...
redhat2000
Run Code Online (Sandbox Code Playgroud)

我怎样才能实现这个目标?

linux scripting memory

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

如何将命令传递给在shell中打开的程序?

我正在编写一个 shell 脚本,以便在 linux ubuntu 中使用 Jboss-cli 自动部署程序。我需要打开 jboss cli 界面并执行一些命令,但我想自动执行此操作。它看起来像什么

cd /opt/jboss/bin
./jboss-cli.sh --connect
Run Code Online (Sandbox Code Playgroud)

上面一行打开jboss命令行。我希望能够向打开的程序发送命令,例如: undeploy FlcErp.ear

我尝试回显它并给它直接文本,但在 Jboss 程序运行完毕之前什么都不会执行。

我也尝试过./jboss-cli.sh --connect undeploy "FlcErp.ear",但它读"FlcErp.ear"作命令

linux command-line shell scripting jboss

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

Cron 作业未写入日志文件

我有一个 shell 脚本,在执行时将日期写入日志文件。当我手动运行脚本时,正确的输出将写入文件。但是,这需要自动化,当我作为 cron 作业运行时,没有任何内容写入文件,我很困惑为什么。

定时任务:

0 * * * * tomcat /usr/bin/sh /apps/rdsreplication/snap_replication.sh
Run Code Online (Sandbox Code Playgroud)

示例代码:

#/bin/bash/

echo ---------------------------------------- >> create_snap.txt
echo Start time:  >> create_snap.txt
date >> create_snap.txt
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激!

shell scripting bash cron io-redirection

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

Shell 脚本 - 检查单个字符输入是否为大写、小写或特殊字符

这是我写的代码。我需要一个简单的代码,使用 if elif 来检查读取的字符是大写、小写还是特殊符号。

echo "enter a char"
read c

if [[ $c == [A-Z] ]];
then
    echo "upper"
elif [[ $c == [a-z] ]];
then
    echo "lower"
else 
    echo "Digit or special symbols!"
fi
Run Code Online (Sandbox Code Playgroud)

以下是我输入字符后收到的输出

enter a char
A
upper

enter a char
a
Digit or special symbols!

aravind@bionic-beaver:~/Desktop$ ./1.sh
enter a char
1
Digit or special symbols!
Run Code Online (Sandbox Code Playgroud)

shell scripting bash shell-script

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

如何使用命令行查找多个mp3的累积持续时间?

我有一个包含大量 mp3 文件的目录,我需要一种简单的方法来查找它们的累积持续时间。我知道我可以找到一个文件的持续时间

ffmpeg -i <file> 2>&1 | grep Duration
Run Code Online (Sandbox Code Playgroud)

我还知道我可以使用以下命令对目录中的所有 mp3 文件运行此命令

for file in *.mp3; do ffmpeg -i "$file" 2>&1 | grep Duration; done
Run Code Online (Sandbox Code Playgroud)

这可以稍微过滤一下

for file in *.mp3; do ffmpeg -i "$file" 2>&1 | grep Duration | cut -f4 -d ' '; done
Run Code Online (Sandbox Code Playgroud)

但我该如何总结这一切呢?使用ffmpeg是没有必要的。输出格式也不是那么重要。秒或 mm:ss 或类似的东西都可以。我希望它看起来像这样:

$ <command>
84:33
Run Code Online (Sandbox Code Playgroud)

command-line scripting bash mp3

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

查找包含字符串的行,然后使用 awk 返回该行以及文本文件的所有后续行

对任何重复表示歉意,但我遇到的大多数问题都涉及从行中的字段获取特定值,或使用从文件中tail获取尾行,其中已知先验。我正在寻找一个值匹配的行,然后获取该行中的所有字段以及所有后续行。详细信息如下。nn

我有从在线数据库返回的数据文件,其中包含可变数量的元数据标题行,其中包含有关用于搜索数据库的查询条件的信息。在这些标题行之后是一个整洁的数据框。例子:

Query date: February 3, 2020, 1:34:57 PM
Database: <database name>
\n
Search criteria:
\n
Geographic bounding box coordinates: -130.00 20.00; -130.00 24.00; -120.00 24.00; -120.00 20.00
Sample type: rocks > sediments > dust
\n
SAMPLE ID,REFERENCE,LONGITUDE,LATITUDE,X,Y,Z,A
56,Author (YYYY) Title: Journal,-127.3,22,1.7,2.3,0,0.55
56,Author (YYYY) Title: Journal,-127.34,22.4,1.9,1.3,0.5
Run Code Online (Sandbox Code Playgroud)

我已使用以下命令成功找到包含数据字段名称的行:

SID=$(awk -F, '{ if ($1 == "SAMPLE ID") print NR }' data.csv)
Run Code Online (Sandbox Code Playgroud)

echo $SID回报9,如预期

现在我想获取该行字段名称以及包含数据的所有后续行并将它们发送到一个新文件。换句话说,我希望解析整个输入文件,并将行发送NR >= $SID到新文件。

这是我一直在使用的代码,但它只返回几乎所有数据,除了几行。我不明白如何获取我想要的数据,或者为什么它省略了它所在的行。

awk -F, -v r=$SID …

command-line shell scripting awk text-processing

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

如何使用固定数量的字符在bash中读取文件?

因此,我使用 bash 读取文件(没有换行符、空格或制表符)。

像这样的东西:

aababcbbcbckqkkqkqhddhkehkjhqkjhsdk
skjhqkdjhqkzdhkzhdkjqzhdhqkjhzdkqzh
Run Code Online (Sandbox Code Playgroud)

虽然在这个例子中有一个换行符,但我正在处理的数据上没有......所以我发现了这一点,因为从技术上讲,一切都被视为“同一行”(因为没有任何换行符或我可以使用的任何分隔符),我尝试读取每个第 N 个字符:

aababcbbcbckqkkqkqhddhkehkjhqkjhsdk
skjhqkdjhqkzdhkzhdkjqzhdhqkjhzdkqzh
Run Code Online (Sandbox Code Playgroud)

(我知道“猫的无用使用”)

我在这里使用的数字只是我发现我可以read使用的最大值(我也更喜欢这样做,因为它可以更快地处理文件)program这里只是一个例子,为了说明。我故意删除上述数据上的换行符、制表符和空格。

现在,虽然我提供的内容有效,但它对文件的最后部分并不完全有效,其中包含的数字少于上述数字……虽然我知道,如果提供给 的分隔符IFS,则 -n选项可以在此之后继续,而不是忽略不适合字符范围的文件的其余部分...

我如何(在 bash、sed 或任何 posix 工具中?)读取每个第 N 个字符范围,同时包括不适合该范围的文件/输入的其余部分?

shell scripting bash

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

提取两个字符串模式之间的数字

我在每一行“年龄= 22 岁,身高= 6 英尺”中有一个具有以下表达式类型的文件,我只想提取年龄和身高数字。

我试过了

grep -oP  '(?<=Age=)[^years]+' $f | awk '{ printf "%d \n",$1; }
Run Code Online (Sandbox Code Playgroud)

并正确获取年龄。我怎样才能得到年龄和身高。当我尝试嵌套模式匹配时,我只得到高度。

这是我试过的模式

grep -oP  '(?<=Age=)[^years]+.+(?<=Height=)[^feet]+' $f | awk '{ printf "%d \n",$1; }
Run Code Online (Sandbox Code Playgroud)

scripting awk shell-script numeric-data

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

Expect 脚本在 linux 机器上不起作用

当我必须对下面的一台机器执行 ssh 命令时,如果我输入“是”,它就可以正常工作并且能够如下登录。

ssh root@192.168.1.177
The authenticity of host '192.168.1.177 (192.168.1.177)' can't be established.
ED25519 key fingerprint is SHA256:KqI6oKKY1JOH+OJZzCYObPdkMVNNwhkaMGTYgx/fDxE.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.1.177' (ED25519) to the list of known hosts.
localhost ~ # 
Run Code Online (Sandbox Code Playgroud)

我正在通过expect脚本尝试同样的事情,它会引发如下错误。

 ./expectscriptssh.sh 192.168.1.177
spawn ssh root@192.168.1.177
invalid command name "fingerprint"
    while executing
"fingerprint"
    invoked from within
"expect "Are you sure you want to continue connecting (yes/no/[fingerprint])? ""
    (file "./expectscriptssh.sh" line 4).
Run Code Online (Sandbox Code Playgroud)

以下是我的期望脚本:

#!/usr/bin/expect -f
set VAR [lindex …
Run Code Online (Sandbox Code Playgroud)

linux scripting expect

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

如何使用 BASH 将 .txt 文件数据存储在 CSV 文件的不同列中?

我有一个具有以下数据结构的 .txt 文件:

Scan Times:
 33.3 seconds
 77.4 seconds
 33.3 seconds
 77.4 seconds

Check Times:
 110.30 seconds
 72.99 seconds
 72.16 seconds
 110.30 seconds

Move Times:
 73.66 seconds
 90.77 seconds
 72.87 seconds
 71.75 seconds
 
Switch Times:
 92.0 seconds
 78.6 seconds
 77.8 seconds
 84.9 seconds
Run Code Online (Sandbox Code Playgroud)

我现在想要获取该 .txt 文件并创建一个具有以下格式的 CSV 文件。

在此处输入图片说明

到目前为止,我的 bash 脚本有一个非常基本的布局,但我不确定如何继续:

inputFiles=("./Successes/SuccessSummary.txt" "./Failures/FailSummary.txt")
touch results.csv

for file in "${inputFiles[@]}"
do 
    while IFS= read -r line
    do
        #echo $line
        if [ "$line" = "Scan Times:" ]
        then 
        fi

        if [ "$line" …
Run Code Online (Sandbox Code Playgroud)

scripting bash csv files text

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