标签: bash

在 bash 脚本中使用 awk 和 if

我正在编写一个脚本,其中我需要测试一个字符串,并根据其结果我将决定是否进一步进行。

下面的命令工作正常(如果字符串以“Clean”开头,它将打印 1,否则打印 0)。

echo | awk ' {print index("'"${task}"'", "Clean")}'
Run Code Online (Sandbox Code Playgroud)

我想做的是在 BASH 脚本中使用 AWK 和 IF 。基于这篇文章,我做了以下工作:

idx=$(awk '{print index("'"${task}"'", "Clean")}')
echo $idx
if [ "$idx" == "0" ]; then
   echo hello
fi
Run Code Online (Sandbox Code Playgroud)

正如我所说,当我运行脚本时,它会打印“0”,但第二个“echo”不会打印任何内容,当然 if 也不起作用。

谁能帮我?

TIA,

鲍勃

scripting bash awk

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

如何跟踪不断增长的目录?

我的系统经常出现磁盘空间不足的情况。我将编写一个脚本来清理变大的目录。通常这些是日志目录。鉴于机器的性质,我不需要保留日志。

我想编写一个脚本来显示所有大小不断增加的目录,这样我就可以确保该列表变为 0。

我在想这样的事情

1. du /
2. wait 24 hrs
3. du /
4. find all instances where the file size increased
Run Code Online (Sandbox Code Playgroud)

它看起来很简单,但我的问题是 du 适用于文件和目录,你不能仅适用于目录。我怎样才能克服这个问题?

scripting linux unix shell bash

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

限制用户只能访问“docker检查”?

有没有办法授予用户(确切地说是www-data)访问权限以仅访问“docker检查”?任何可行的解决方案都是可以接受的

ubuntu bash sudo docker

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

在bash中以整数形式计算Linux上总可用内存的百分比

下面是一个 bash 脚本,它计算 Linux 机器上可用总 RAM 的 80% 作为整数:

server_ram_mb=$(awk '/MemTotal/ {printf( "%.2f\n", $2 / 1024)}' /proc/meminfo)
echo "($server_ram_mb * 0.8)/1" | bc > /tmp/output
eighty_percent_ram_mb=$(cat /tmp/output)
Run Code Online (Sandbox Code Playgroud)

然而,有一些我不喜欢的事情:

  • 它写入临时文件(我尝试将其设置为变量但无法解决语法问题)
  • 它需要bc,但并非所有 Linux 发行版都默认安装

我如何重写/简化它以避免这些问题?

linux bash

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

为 CLI 上的 HTTP 标头创建创建符合 RFC 1123 的日期

我正在尝试使用标准 unix date(1) 创建一个符合 HTTP 1/1 的日期标头,以便使用curl 或类似工具将其发布到 RESTful 服务器。

有什么想法可以传递给 date(1) 以使其符合 RFC 1123 要求吗?

非常感谢

http bash rfc date

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

使用命名管道控制 BASH 中的远程 ssh 会话

我的问题主要基于此 /sf/ask/1573574201/?rq=1

我遵循上述问题,并且能够连接到服务器,如下所示:

mkfifo CMDs.txt
exec 7> CMDs.txt
Run Code Online (Sandbox Code Playgroud)

然后从另一个终端我连接到服务器,如下所示:

sshpass -p 'mypass' ssh -tt myuser@${IP} < CMDs.txt 
Run Code Online (Sandbox Code Playgroud)

会话已建立,但它不是交互式会话(它应该是)。但我可以通过将命令重定向到文件描述符 7 来将命令发送到远程服务器,如下所示:

echo "some command" >&7 
echo "some more command" >&7 
Run Code Online (Sandbox Code Playgroud)

这工作正常并显示我启动会话的另一个终端中的输出。我的目标是发送命令,并捕获变量中每个命令的输出,以便我可以在发送另一个命令之前对其进行分析。我认为通过阅读标准输出应该可以实现,但我无法弄清楚,因此发布了问题。我可以通过将输出重定向到文件中来捕获文件中的输出,如下所示:

sshpass -p 'mypass' ssh -tt myuser@${IP} < CMDs.txt >>outfile.txt
Run Code Online (Sandbox Code Playgroud)

也如参考问题中提到的,exec 7>&-应该终止会话,但它没有,那么在发送所有命令后如何终止会话?

ssh bash remote named-pipes file-descriptors

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

如何查找不属于给定用户的文件和目录?

我在“alfred”拥有的目录中有一组文件。快速查看了一下,里面的大部分文件也都是‘alfred’所有。

我想将文件夹的所有权以及“alfred”拥有的所有内容更改为“betty”拥有。但是,“alfred”可能在此目录中包含他确定应由其他用户拥有的文件。例如,可能有一个脚本除非由“root”拥有否则不会执行,或者一个目录符号链接到“chris”拥有的区域,因此内部的内容需要由“chris”拥有。

如何找到除“alfred”之外的用户拥有的顶级目录的所有文件和文件夹?

这个问题是类似的,但给出的答案仅涵盖当前用户不拥有的东西的情况。我想找到不属于任何指定用户的东西。

linux bash

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

对 /etc/bashrc 的更改?

您是否对默认的 bash 重新配置脚本进行了任何有助于其他人了解的更改?

请注意,/etc/bashrc 会影响所有用户,而用户主目录中的 .bashrc 只会影响该用户。

bash bashrc

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

追踪shell命令的来源

在我们其中一台服务器的 apache 错误日志 (/usr/local/apache/logs/error_log) 中,我们看到一个 shell 命令经常运行并抛出错误,如下所示:

sh: list_price: command not found
Run Code Online (Sandbox Code Playgroud)

list_price 是我们在 50 多个网站上的电子商务系统中使用的一个字段,当然没有任何可疑之处。问题是我们不知道这是如何传递给 shell 的——我们已经检查了 exec() 和 system() 的所有出现,但我们看不出这是如何传递的。有什么方法可以让我们更容易地检测到它的来源可能是什么,因为没有什么比我上面所说的更有意义的输出了。仅供参考,这是在运行 CentOS 5 的服务器上,有问题的站点都是 PHP。

php shell bash centos

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

Bash 正则表达式问题

我在用

ps -ef | grep java | wc -l
Run Code Online (Sandbox Code Playgroud)

查找在任何给定时间运行的 java 进程数。

上面的命令显然也在结果中计算了“ps -ef | grep java”命令。

为了避免这种情况,我发现我可以使用

ps -ef | grep [j]ava | wc -l
Run Code Online (Sandbox Code Playgroud)

它工作正常。但是,我想弄清楚为什么它能够从结果中跳过原始命令。

bash regex

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

标签 统计

bash ×10

linux ×3

scripting ×2

shell ×2

awk ×1

bashrc ×1

centos ×1

date ×1

docker ×1

file-descriptors ×1

http ×1

named-pipes ×1

php ×1

regex ×1

remote ×1

rfc ×1

ssh ×1

sudo ×1

ubuntu ×1

unix ×1