4

私は多くの Windows コマンド シェル スクリプトを作成してきましたが、Linux の初心者です。次のコマンドをスクリプト化/自動化して、(Windows の用語で) 「バッチ ファイルを実行する」だけでこれをすべて実行できるようにする方法はありますか? これが私の手順です。

  • パテを起動し、ホスト名とポートを選択し、[開く] をクリックします (この最初の部分もスクリプト化/自動化したいと考えています)
  • Linux シェル/ターミナルが開きます
  • ログインとパスワードを入力します
  • 次のコマンドを入力します: sudo su - psoftXXX
  • もう一度 pwd を入力して Enter キーを押します
  • ちょっとした cmd-shell メニューとプロンプトが表示されます。「1」と入力してEnterキーを押す必要があります
  • CD /
  • CD ログ
  • cd 時間
  • CDDV
  • cd appserv
  • rm ジェン*
  • ls

これのすべてまたは一部を自動化する方法はありますか? ありがとう。

4

4 に答える 4

7

はい。一度理解すれば、Linux でのスクリプティングは、 Windows に比べて楽しいものであることがわかるでしょう。(恐ろしい) コマンド プロンプトと (それほど恐ろしいものではない) PowerShell の違いを想像してみてください。その違いを 10 倍すると、Linux でスクリプトを作成する方がはるかに優れています。

コマンド プロセッサ (Windows コマンド プロンプトに相当) が「シェル」と呼ばれるため、この用語は「シェル スクリプト」です。生活をもう少し充実させるために、Linux で利用できるさまざまなシェルがあります。最も一般的なのは、やshなどのバリアントです。ただし、一部のクレイジーな人はor or other を使用しますが、これらは面倒なほど異なる構文を持っています。bashashcshtcsh

スクリプトの作成

「シェル スクリプト」、つまりバッチ ファイルを作成するには、先頭に次の行を含むテキスト ファイルを作成します。

#!/bin/bash

(またはシェルの名前は何でも)。通常、ファイル名は で終わる.shか、特別なファイルの終わりがまったくない場合があります。

ファイルの残りの行には、通常の Linux 端末で入力する場合と同様に、実行したいコマンドをリストします。

次に、そのファイルに「実行」権限を割り当てます。コマンドラインからは、chmod u+x filename.sh. これは、現在のユーザーに eXexecute 権限を追加することを意味します。

本当の楽しみは、シェルで実行できるさまざまなことをすべて学び始めたときです。たとえば、次のような巧妙なトリックがあります。

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

grepまた、他のプログラムを簡単に接続できる素晴らしい Linux/UNIX プログラムもたくさんありuniqますxargs

あなたの具体例

しかし、それがどれほど素晴らしいことかを説明してきましたが、実際にそれを行う必要があるとは思いません。

あなたの例のシェルスクリプト部分は、次のように要約されます。

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 つあります。メニューで 1 を押します。/bin/bashこれは、このメニューが特別なデフォルトのログイン シェルを提供することで実装されていると思われるためです/something/somewhere/which/shows/a/menu。PuTTY で代替コマンドを指定すると、その設定が完全​​に無視され、代わりにスクリプトが実行されることを願っています。

少し遊んでみる必要があるかもしれません。幸運を!

于 2013-02-14T19:28:43.787 に答える
1

ある時点で、私は職場で同様の問題を抱えていました。シェルにログインしなければならないことにうんざりしていました。メイン システムが保護されているということは、それがオフラインであることを意味します。ログインするには、まずネットワーク内のオンライン システムに 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/

私はこの方法を標準の Cygwin (タブ付きのターミナル インターフェイスが必要な場合は Console2 で使用できます) と MobaXterm で使用しました。Cygwin を使用する場合は、apt-cyg または Cygwin セットアップを使用して expect パッケージをインストールします。MobaXterm を使用する場合は、MobaXterm プラグイン ページから tcl/expect プラグインをダウンロードする必要があります。

期待ライブラリを使用して、何でも自動化できます。TCL 言語に慣れていない場合は、Python ベースのバージョンもあります。

ここにガイドがあります - http://www.cotse.com/dlf/man/expect/bulletproof1.htm - これは、expect の学習を開始するのに役立つはずです。Expect を使用して、ワークスペース全体をスクリプト化することができました。リモート マシンへの接続とログインは、Cygwin .bashrc ファイル内の単一のエイリアスに削減されました。

これが期待されるホームページです - http://expect.sourceforge.net/

この件に関する追加の詳細、指示、およびヒントは、今後の編集で提供される予定です。

于 2014-06-26T10:44:44.990 に答える
1

はい、Linux でシェル スクリプトを記述できます。各シェルスクリプトは

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

上記のコマンドを実行したい場合は、次のようになります

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

最初の部分を自動化する限り、少しトリッキーかもしれませんsudo su psoftXXX。最初に psoftxxx としてログインしただけで全体を切り取ることができると思います...

少しでもお役に立てば幸いです。シェル スクリプトを書き始めるための良いリソースがここにあります http://linuxcommand.org/writing_shell_scripts.php

于 2013-02-14T19:25:52.360 に答える
0

これをいくつかのタスクに分割しましょう。

SSH経由でに接続します。

まず第一に、スクリプト内でパスワードを使用することは避けてください。代わりに、公開/秘密鍵を使用してください。次のペアを生成します。

$ ssh-keygen

手順に従って、2つのファイル(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 に答える