如何自动化一些linux命令

时间:2013-02-14 19:13:26

标签: linux ksh

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

  • 启动putty,选择主机名&端口,单击打开(也喜欢脚本/自动化第1部分)
  • linux shell / terminal打开
  • 我输入我的登录信息和pwd
  • 我输入此命令:sudo su - psoftXXX
  • 我再次进入我的密码并点击
  • 我看到一个小cmd-shell菜单和提示符。我必须输入“1”然后按回车
  • cd /
  • cd logs
  • cd hr
  • cd DV
  • cd appserv
  • rm JEN *
  • LS

是否可以自动化全部或部分内容?感谢。

4 个答案:

答案 0 :(得分:6)

是。一旦你知道它,你会发现与Windows相比,Linux中的脚本是喜悦。想象一下(可怕的)命令提示符和(不太可怕的)PowerShell之间的区别,然后将这个差异乘以10,这就是在Linux中编写脚本的好处。

这个术语是“shell脚本”,因为命令处理器(相当于Windows命令提示符)被称为“shell”。只是为了让生活变得更有果味,Linux有各种各样的shell。最常见的是sh的变体,例如bashash。但是,有些疯狂的人会使用cshtcsh或其他人,这些语法会产生令人烦恼的语法。

创建脚本

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

#!/bin/bash

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

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

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

当你开始学习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程序可以轻松地将其他程序连接在一起 - 例如grepuniqxargs

您的具体示例

虽然解释了这一切是多么伟大,但我认为这实际上并不是你需要做的。

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

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

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

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

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

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

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

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

答案 1 :(得分:1)

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

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

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

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

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

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

答案 2 :(得分: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上我发现自动腻子的选择不是很好。 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/

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

答案 3 :(得分: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