4

我已经完成了很多 Windows 命令 shell 脚本,但我是 linux 的新手。有什么方法可以编写/自动化以下命令,以便我所要做的就是(在 Windows 术语中)“运行批处理文件”来完成这一切?这是我的步骤,按顺序:

  • 启动腻子,选择主机名和端口,单击打开(也希望脚本/自动化这第一部分)
  • linux shell/终端打开
  • 我输入我的登录名和密码
  • 我输入这个命令:sudo su - psoftXXX
  • 我再次输入我的密码并按 Enter
  • 我看到了一个小 cmd-shell 菜单和一个提示。我必须输入“1”并回车
  • 光盘 /
  • 光盘日志
  • 光盘小时
  • 光盘DV
  • 光盘应用程序
  • rm 珍*
  • ls

有什么方法可以自动化全部或部分吗?谢谢。

4

4 回答 4

7

是的。一旦您了解了这一点,您就会发现与 Windows 相比,在 Linux 中编写脚本是一种乐趣。想象一下(可怕的)命令提示符和(不那么可怕的)PowerShell 之间的差异,然后将该差异乘以 10,这就是在 Linux 中编写脚本要好得多。

该术语是“shell 脚本”,因为命令处理器(相当于 Windows 命令提示符)称为“shell”。只是为了让生活更充实一点,Linux 有各种可用的 shell。最常见的是sh诸如bash和的变体ash。但是,一些疯狂的人使用cshor tcshor others,它们的语法令人讨厌。

创建脚本

要创建一个“shell 脚本”,即一个批处理文件,只需在顶部创建一个文本文件:

#!/bin/bash

(或者无论你的 shell 的名称是什么)。通常,文件名可能以.sh或根本没有特殊文件结尾。

在文件的其余行中,只需列出您想要运行的命令,就好像您在普通的 Linux 终端上输入它们一样。

然后为该文件分配“执行”权限。从命令行,您将使用chmod u+x filename.sh. 这意味着为当前用户添加执行权限。

当你开始学习你可以在 shell 中做的所有不同的事情时,真正的乐趣就来了。例如,有这样的巧妙技巧:

my-first-command && my-second-command   # only runs my-second-command if my-first-command succeeded

或这个:

my-background-command &   # runs my-background-command in the background, so that you can get on with other things

还有很多很棒的 Linux/UNIX 小程序可以很容易地将其他程序连接在一起——例如grepuniq.xargs

你的具体例子

不过,在解释了这一切有多棒之后,我认为这实际上并不是您需要做的。

您的示例的 shell 脚本部分归结为:

rm /logs/hr/DV/appserv/JEN*; ls /logs/hr/DV/appserv

我得到的印象是您想从 Windows 自动登录以运行这些命令。

我相信在 PuTTY 中,如果它通过 SSH 连接,您可以给它一个运行命令。所以这就是我要做的。

  1. 使用 PuTTY 在您的 Windows 机器上生成 ssh 密钥。(我不记得如何做到这一点 - 我认为有 PuTTYGen 或类似的)。
  2. 将生成的公钥复制到用户目录中调用的文件authorized_keys中。您可以从字面上复制和粘贴它;这可能比做任何花哨的事情要容易。请注意,此目录和/或文件可能不存在,在这种情况下,您需要创建它们;如果文件已经存在,请确保将新密钥附加到文件末尾而不是覆盖它。.sshpsoftXXX
  3. 现在尝试使用 PuTTY 和 ssh 再次连接。它应该自动以psoftXXX用户身份登录。
  4. 最后,在 PuTTY 设置中,您可能可以指定上面给出的命令行。您可能需要像这样指定它:

    /bin/bash -c "rm /logs/hr/DV/appserv/JEN*; ls /logs/hr/DV/appserv"

请注意,有一个阶段我没有自动化,即在菜单上按 1。那是因为我怀疑这个菜单是通过给你一个特殊的默认登录 shell 来实现的,它不是/bin/bash,而是相反/something/somewhere/which/shows/a/menu。我希望如果您在 PuTTY 中指定替代命令,该设置将被完全忽略,而您将运行您的脚本。

你可能需要玩一会儿。祝你好运!

于 2013-02-14T19:28:43.787 回答
1

是的,您可以在 linux 中编写 shell 脚本。每个 shell 脚本都以

#!/bin/bash
<commands>
. 
.
.

如果你想运行上面的命令,它看起来像这样

#!/bin/bash
cd /logs/hr/DV/appserv
rm JEN*
ls

至于自动化可能有点棘手的第一部分,我认为sudo su psoftXXX如果您首先以 psoftxxx 身份登录,您可以删除整个...

希望对您有所帮助,这是一个很好的资源,可以帮助您开始编写 shell 脚本 http://linuxcommand.org/writing_shell_scripts.php

于 2013-02-14T19:25:52.360 回答
1

有一次,我在工作中遇到了类似的问题。我厌倦了不得不登录到 shell。我们的主系统受到保护的方式意味着它处于离线状态。为了登录,我们必须首先 ssh 到网络中的在线系统,然后从该机器 ssh 到主系统。这是这个过程的样子。

1.) Launch putty using the profile set up for the first machine. I had already made the effort to set the login command to ssh into the next server. 2.) Enter my user password 3.) use su to log into root 4.) enter the root password 5.) use gradm on my user 6.) source my .bashrc

不用说,这一切对我来说似乎毫无意义。在 Windows 上,我发现自动化 putty 的选项不是很好。Cygwin 来救援。设置它需要一些工作,但是一旦设置好,您将节省时间是完全值得的。

以下是我建议的用于终端/ssh 的应用程序:

Cygwin - https://www.cygwin.com/或 MobaXterm - http://mobaxterm.mobatek.net/

我已经将此方法与 vanilla Cygwin(如果您想要一个选项卡式终端界面,可以与 Console2 一起使用)和 MobaXterm 一起使用,这确实使 Putty 看起来完全过时了。如果您要使用 Cygwin,请使用 apt-cyg 或 Cygwin 安装程序安装 expect 包。如果您打算尝试使用 MobaXterm,那么您需要从 MobaXterm 插件页面下载 tcl/expect 插件。

您可以使用 expect 库来自动化任何事情。如果您对 TCL 语言不满意,还有一个基于 Python 的版本。

这是一个指南 - http://www.cotse.com/dlf/man/expect/bulletproof1.htm - 它应该可以帮助您开始学习期望。使用 expect 我可以编写整个工作区的脚本。在我的 Cygwin .bashrc 文件中,连接到远程机器并登录已简化为一个别名。

这是期望的主页 - http://expect.sourceforge.net/

有关此主题的其他详细信息、说明和提示将在未来的编辑中提供。

于 2014-06-26T10:44:44.990 回答
0

让我们把它分成几个任务:

通过 SSH 连接到 .

首先避免在脚本中使用密码。而是使用公钥/私钥。生成一对:

$ ssh-keygen

按照步骤,应该会生成两个文件(id_rsa,id_rsa.pub),id_rsa.pub 是公钥。

转到您要连接的服务器,以 psoftXXX 身份登录并在 $HOME/.ssh/authorized_keys 添加存储在 id_rsa.pub 中的公钥

现在您应该能够以 psoftXXX 用户身份连接到服务器,而无需输入密码:

$ ssh psoftXXX@<server>

现在是另一个任务。通过 SSH 删除这些文件。

$ ssh psoftXXX@<server> rm -f /logs/hr/DV/appserv/JEN*

这将以 psoftXXX 身份连接到服务器(服务器不会询问密码)并将执行“rm -f”。

如果我必须定期运行它,我会使用 cron。你应该检查一下。

顺便说一句...试试这个命令:

$ man <command>
$ man -k <keyword>
$ man man
于 2013-02-15T13:13:44.283 回答