Articles of bash

学习Awk值得吗?

我是体面的bash脚本,我正在赶上正则expression式,以及一些sed用法。 学习awk仍然值得,所有的select都在那里。 意见?

通过脚本将密码传递给您的SSH密钥

我正在编写一个脚本,可以让我一次从我所有的服务器上检索文件。 我有SSH密钥以login到我的服务器。 但是,我的SSH密钥需要密码。 我写的脚本不会自动化,只能手动运行。 所以我的脚本提示用户inputSSH密码。 如何将密码发送到SSH密钥,因为它连接到每个服务器。 我试图避免在每个服务器input我的密码。 我知道我可以使用'期望',但我希望有一个简单的方法来做到这一点。 也许有一些环境variables? 谢谢。

为什么这个命令不能像cronjob那样工作,而在shell中input时却完美呢?

如果我从shell运行这个命令,它按预期工作: cd ~ && mysqldump –databases –skip-dump-date –host=localhost –user=admin –password=xxxxx –lock-all-tables –result-file=xxxxx_dump_tmp.sql mydb && gzip xxxxx_dump_tmp.sql && mv xxxxx_dump_tmp.sql.gz xxxxx_dump_`date +"%Y-%m-%d__%H.%M.%S"`.sql.gz 但是,如果我使用完全相同的命令(复制粘贴)设置了cronjob,则会失败并显示以下错误(我通过电子邮件收到通知): /bin/sh: -c: line 0: unexpected EOF while looking for matching “' /bin/sh: -c: line 1: syntax error: unexpected end of file 怎么了?

在bash中退出星号(*)

我只是不能做到这一点。 如果*在一个variables中,则它展开为当前文件夹中的文件列表。 回声“*”工作正常。 #!/bin/bash c="GRANT ALL ON \*.* TO '$1'@'localhost';" mysql < $c exit 0;

Bash在variables中转换字符

我正在写bash中的collectd nagios自定义检查脚本。 我遇到的问题是,nagios显示主机名为host.name.domain,但collectd将WSP文件保存为host_name_domain。 我的问题是我如何使一个variables将它从nagios(host.name.domain)获取的主机名转换为collectd格式(host_name_domain)。 这是转换必须发生的部分。 所以WSP_PATH会在variables$ NHOST中给出主机名的collectd格式 WSP_PATH=/var/lib/carbon/whisper/ctd/$NHOST/uptime/uptime.wsp

如何并行运行多个shell脚本

我有几个testing脚本,每个脚本都运行一个testingPHP应用程序。 每个脚本永远运行。 所以, cat.sh , dog.sh和foo.sh都运行一个PHP脚本。 每个shell脚本在一个循环中运行PHP应用程序,所以它会永远运行,每次运行后都会hibernate。 我想弄清楚如何在同一时间并行运行脚本。 在标准输出/术语窗口中查看PHP应用程序的输出。 我想,做下面的事情可能会起作用: foo.sh > &2 dog.sh > &2 cat.sh > &2 在一个shell脚本中就足够了,但它不起作用。 foo.sh, runs foo.php once, and it runs correctly dog.sh, runs dog.php in a never ending loop. it runs as expected cat.sh, runs cat.php in a never ending loop *** this never runs!!! 看来shell脚本永远不会运行cat.sh 如果我在单独的窗口/术语中自行运行cat.sh ,它将按预期运行。 […]

Bash脚本不能用`sh`工作

我正在testing一个简单的脚本,我想知道为什么它从目录执行时工作正常: ./test.sh但是当我尝试使用“sh”命令sh test.sh它不工作: test.sh: 3: test.sh: [[: not found test.sh: 7: test.sh: [[: not found 脚本: #!/usr/bin/env bash if [[ $1 = one ]] then printf "%b" "two\n" >&2 exit 0 elif [[ $1 = two ]] then printf "%b" "one\n" >&2 exit 0 else printf "%b" "Specify argument: one/two\n" exit 1 fi

linux命令行:find主机的规范主机名

从linux的命令行获取主机的规范主机名最简单的方法是什么? 如果重要的话,我的壳是bash。 澄清:我想要另一个主机的规范主机名,通过IP或非规范主机名。 不是本地主机的规范主机名。

在Linux中批量重命名或删除

我有一堆(大约10演出的价值)的文件,我需要从外部的Linux磁盘复制到Windows机器。 不幸的是一些包含“:”字符的文件名已经进入了这个集合。 这些冒号文件都不需要在Windows机器上,所以我需要快速解决scheme或重命名它们。 你会推荐什么? (我在Linux中假设像bash / perl / python脚本,在Windows机器上没有powershell。)

两台服务器之间的文件传输,没有FTP,没有networking

我正在寻找自动从一个服务器到另一个服务器的给定目录中的文件传输。 他们都在同一个networking上,可以互相ping通,甚至可以从一个到另一个。 目前我的方法是sshing到服务器A,拉下文件,SSH到服务器B,并上传他们… 我已经在这里看到一篇文章,但是我想问问你们,从服务器到服务器传输文件,embedded到cron-job还是自动化的最佳方式是什么。 这是我的限制: 两个服务器都不能有任何公共的web服务(没有端口80,没有apache,也没有sadface ) 两台服务器都不能使用任何types的FTP连接(尽pipe我们可以使用ssh) 预先感谢您的帮助