Bashシェルスクリプトの代替スクリプト


16

UNIXワークステーションに移行しました。Bashシェルスクリプトの私の記憶は学校以来衰退しており、構文が非常に紛らわしいと感じています。タスクを自動化するために他のスクリプト言語がどのように使用されているのか疑問に思っています。私が聞いた最も人気のあるものは、PerlとPythonです。

  1. どのスクリプト言語が実際の店舗で最も広く使用されていますか?
  2. C / C ++構文に最も似ているスクリプト言語はどれですか?
  3. 私が知らない別のスクリプト言語はありますか?

ご協力いただきありがとうございます、

スコット


2
これはおそらくコミュニティwikiであるはずです。
EBGreen

2
私は実際、ほとんどのシステムタスクにPHPを使用しています。これについては、すぐに適切な回答をまとめます。たくさんのライブラリが組み込まれているので便利です。
カイルホジソン

シェル向けの言語は、他の言語ではできないことを行います。これは、すべての子プロセスが再帰的に生成されたことを管理およびチェックします。ブログ広告のPhusion旅客は理由を詳細に説明します。phusion.github.io/baseimage-docker要するに、LANG-Xで記述されたスクリプトは、おそらく適切にシャットダウンルーチンを処理しません。実際のシェルプロセスの子として実行する限り、これはまったく問題ありません。免責事項、私は専門家ではありません。この情報は、私の知る限りでは、欠陥がある可能性があります。
ThorSummoner 14年

回答:


12

ある程度、それは個人的な好みの問題です。PerlとPythonは人気の点で間違いなくそこにあります。

ただし、3つの質問のうち2つに答えるには:

  1. bashが最も広く使用されており、おそらくperlが続くと思います。ただ推測するだけで、誰かが調査を行ったとしてもわからない。:)
  2. 膨大な数のスクリプト言語があります。:)

私の推奨はPythonです。読み書きが簡単で、非常に強力であり、Webには学習用の便利なリソースがたくさんあります。もちろん、コピーして再利用できるコードもあります。


1
同感です。Pythonは簡単に習得でき、REXXを使用して古き良きOS / 2時代を過ごしてきたので、私はそれを投げることができると思います。
slovon

3
pythonの+1 ...スクリプト言語でのCの力。スクリプトを必要に応じて単純または複雑にすることができます;)
KFro

1
非NTシステムでは、pythonモジュールshはpythonをシェルスクリプト言語として使用できるようにします。ただし、(マルチプロセッシングのように)エッジケースに遭遇した場合は、今日使用するのが難しいと思うサブプロセスモジュールを学習する必要があります。
ThorSummoner

5

PerlとPythonは明らかに答えです。ただし、それぞれが異なるタスクを完了するために使用されます。

  1. Bash-最も習得しやすいものを伝えます。Bashスクリプトを使用すると、コマンドを実行して出力を操作できます。
  2. Python-学習が2番目に簡単。Pythonを使用して完全なプログラムを作成でき、コミュニティで十分にサポートされているため、PythonはBashよりもはるかに便利です。Pythonは非常に読みやすく、数か月後に簡単に編集できます。
  3. Perl-3つのうち最高のもの(スクリプト用)ですが、最も簡単な学習曲線です。非常に優れた正規表現のサポートがあり(これが今日もまだ使用されている主な理由です)、おそらく時間の経過とともに多くのPerlスクリプトに遭遇するでしょう。Perlの主な問題はコードの可読性です。コードを記述してから数か月後には、Perlが何をするのか理解できなくなります。だから、あなたは重くコメントした方がいい。
  4. Awk / Sed-両方とも非常に便利ですが、両方とも学ぶのが非常に困難です。パターンが得意でない限り、これらに最後に取り組むことをお勧めします。

(おそらくあなたはそれらのどれも知らないので)今、どれを学ぶべきかについて、私はPythonを学びます。知っておくと最も簡単で便利です。

そして、あなたの質問への答えに関して:

どのスクリプト言語が実際の店舗で最も広く使用されていますか?

それらのすべてですが、Perlにはここで少し利点があると思います(システム管理でずっと長く使用されているためです)。

C / C ++構文に最も似ているスクリプト言語はどれですか?

Perl

私が知らない別のスクリプト言語はありますか?

Ruby、Tcsh / Csh、http://en.wikipedia.org/wiki/Interpreted_language


2
perlに時間をかけると、完全に読み取り可能なperlを書くことができます。スパゲッティコードを書く人は、失敗をPerlのせいにするのが速すぎます。
シアン

1
私はシステム管理者としての経験に基づいて話しているだけです。私は他の人が書いたコードを維持する必要がありました。通常、私はPythonでコードを書き直すだけです。
マイケルポベガ

3

小さな仕事にはawk、1つ以上の人にはpython。

Python(特定のAPIや他のプラットフォームに依存するものを使用しない場合)には、使用中のpythonバージョンを取得するすべてのプラットフォームで利用可能な豊富な「標準ライブラリ」があります。これは、スクリプトを簡単に再利用できるため非常に便利であり、プラットフォームを変更した場合でも知識は適切な投資であることを意味します。

私たちの会社では、すべてのスクリプト作成、監視にpythonを使用し、アプリケーションにjavaを使用しています。


1

perlとpythonがおそらく2つの最良の選択肢だと思います。sedとawkでも多くのことができます。


1

Sh(ボーンシェル)、grep、awk、およびsedは、常にグリップを回復するのに適しています。Perlは、テキストの正規表現をあまり必要としない場合に優れており、保守性はそれほど重要ではありません(不可能とは言いません)。Python; 読みやすさが重要な場合。私の好みはPythonですが、これらのツールはすべて、あなたが投げかけるほとんどのものに適しています。c / c ++構文の要件を再検討する必要があるかもしれませんが、それを維持しても長期的には役に立ちません。


ありがとう、マーティン。(Webのサンプルから)PerlがPHPに驚くほど似ていることに気づきました(歴史的にはPHPの前はPerlだったと確信していますが)。これは公平な声明ですか?
スコットデイヴィス

それは偶然ではない:)ですので、PHP 1.0は、perlのスクリプトだった
ビル・ワイス

1

ゼロから何かを学びたい場合は、bashを(再)学習することをお勧めします。

それ以外に、perlとpythonは最近人気があります。私はperlには不向きですが、Perl 4がリリースされて以来、私のperlスクリプトスタイルはあまり変更されていません。

「c-syntaxに似た」スクリプト言語については知りません。


1

Perl、CPANの信じられないほどのリソース(http://search.cpan.org/)の場合のみ。このような大規模な貢献コミュニティでスクリプト言語を使用する利点は、自分で何かを発明する必要がほとんどないことです。

Perlには、現在の状況で必要なだけ複雑になるという利点もあります。迅速な管理または単一目的のスクリプト用の単純なスクリプト言語として扱うことができますが、より大きく、保守しやすいアプリケーション(デーモン、サーバー、クライアントなど)を作成する場合は、オブジェクト指向の概念または広範なメタオブジェクトシステムを使用できます。

スクリプト言語間の違いだけでは明確な勝者を選ぶほど深刻ではありませんが、主に関心のあるトピックに関する情報を見つけるのがどれほど簡単かを調べる必要があります。

Perl構文は、タイピングとシギルの欠如を回避できる限り、Cに驚くほど近いこともあります。最終的に言語の長所を学習するにつれて、高度なperlの使用が自然になります。

そして読みやすさの最前線にいる否定論者にとっては、どんな言語でも読みにくいコードを書くことができます。4か月前のコードを振り返って理解できない場合、何か間違ったことをしていることになります。

psこの投稿は、CPANのさまざまな管理フレンドリーモジュールへのリンクで満たされましたが、明らかに新しいユーザーは1つのリンクしか投稿できないため、そのCPANリンクを使用して「CVS」、「SVN」、「Cron」、「Moose」(広範なオブジェクトシステム)



1

[スクリプトに関する一般的なアドバイスについては、他の回答を参照してください]

この答えは、コマンドラインプログラムの使用と、それらの大規模なチェーンに関するものです。

CLIプログラムのチェーン、およびおそらく多くのチェーンを順番に実行するには、bashが最も簡単です。Perl は同じことを実行できますが、言語の学習ははるかに難しく、はるかに複雑です。多くの人が指摘しているように、わかりやすいPerlを書くのは簡単です。

ファイルとパラメーターを繰り返し処理する場合、シェルでプロトタイプを作成し、スクリプトにコピーしてオーバーヘッドを最小限に抑えて配列とループを追加することができます。

意味の例:

$ cat input.dat | numerical_model source_data ${SRC} grid_size ${GRID_SIZE} param1 ${P1} param2 ${P2} | tee ${OUTPUT} | plotter title ${TITLE} ylabel ${YLABEL} xlabel ${XLABEL} > ${OUTPUT_FIG}
$ cat ${OUTPUT} | stats_cmd bin_size ${BINSIZE} dist_type ${DIST_TYPE} | tee ${OUTPUT_STATS} | plotter plot_type ${PLOT_TYPE} title ${TITLE_STATS} > ${OUTPUT_FIG_STATS}

bashでは、これらのパラメーターのいくつかを数回ループで簡単にラップできます。ただし、スクリプトが数十行を超えると、コードが読みにくくなります。--- 30種類のデータプロットに対して30セットのコマンド(それぞれ数行)を想像してください---

PerlおよびPythonは、ループや変数の構文が簡潔であるため、大きなスクリプトには適していますが、bashコマンドは文字列として生成し、サブプロセスとして実行し、stdin、stdoutをキャプチャする必要があります。実行できますが、ネイティブシェル環境を完全に置き換えることはできません。

シェルの言語が優れていれば、これはすべて回避されます。


0
  1. 最も使用される:Perl、主に歴史的な理由から。Pythonは、すべてのLinuxおよびBSDディストリビューション(Mac OSXにもインストールされています)で広く利用可能であり、学習/プログラミングするのにはるかに適しています。もちろん、構文を取得すると、コマンドラインで実行できるほとんどすべてのことに対してBashがより簡単になります。結局のところ、それコマンドラインです。

    • C構文:cshがありますが、TCCを簡単にインストールし、スクリプト言語として実際の Cを使用できます。他の言語の起動よりも短時間でソースからコンパイルできます。

    • 他のスクリプト言語:たくさん!LuaRuby、JavaScript ...


0

適切な場合は、これらすべてを組み合わせて使用​​する必要があります。私は本当にperl(読みやすさ)が嫌いですが、多くのことに適しています。一方、Pythonは、いくつかのKVMマシンを管理しなければならない(それでもしなければならない)まで、システム管理の点で私にとって新しいものでした。libvirtのpythonバインディングを1時間いじってから、スクリプトを介してこれらすべてのマシンを開始、停止、保存、ロード、移行することが現実になりました。

最後になりましたが、perlまたはpythonを使用する必要がない場合は、毎晩mysqlサーバーからすべてのデータベース(独自のダンプファイル内の各データベース)をダンプし、それらをtarし、他のサーバーにrsyncします。どうして ?bashで書く方が速くて簡単だからです:)

最後に、現在のタスクに最も適した言語を使用する必要があります。また、特定のスクリプト言語だけを使用するのは、それが一番好きだからという理由だけでなく、


0

ルビーが好きです。シンプルで簡単にプログラムできます。rubyを使用したシステム管理に関する優れた本があります。

Rubyは、いくつかの構成管理システム(capistrano、chef、puppet)およびmetasploitの最後のバージョンで使用されています。

rushを使用して、Unixシェルの代わりにruby構文を使用し、次のようなことを行うことができます。

local = Rush::Box.new('localhost') 
remote = Rush::Box.new('my.remote.server.com')     
local_dir = local['/Users/adam/myproj/']
remote_dir = remote['/home/myproj/app/']

local_dir.copy_to remote_dir
remote_dir['**/.svn/'].each { |d| d.destroy }

ありがとうchmeee。sysadminにRubyを使用できるとは思いもしませんでした-常にWeb中心だと思っていました。ほとんどの組織で使用されているものを探しています。システム管理者向けRubyはまだまだ最先端だと言ってもいいですか?
スコットデイヴィス

1
Shell / Perlは、どこにでも確実にインストールされる2つの言語です。Pythonはおそらく次に最も一般的で、Rubyは非常に離れた4番目(実際には、おそらく5番目、awkの後ろ)を実行します。
シアン

@ScottDavies PHPとASP.netは、私が知っている唯一のWeb中心の言語です。Web上でのみ実行するように設計されたJavascriptでさえ、フォーム検証の欠如であった過去が成熟しています。ただし、明らかにbashであっても、任意の言語でhtmlをディスパッチできます。
ThorSummoner 14年

0

Rubyのワンライナーの例:

> echo 'Shell is the best!' | ruby -pe 'gsub("Shell", "Ruby")' 

Ruby is the best!

> printf "foo\nbar\nbaz\n" |  ruby -ne 'BEGIN { i = 1 }; puts "#{i} #{$_}"; i += 1'

1 foo
2 bar
3 baz

ルビーを使用します。

shと比較して、モダンで強力です。

Pythonと比較して、一貫性、1つのエディション、1つのパッケージマネージャーです。そして、私はインデント構文が好きではありません。

ちょっと古臭いPerlに比べると、構文は私にとって複雑すぎます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.