回答:
'あなたはシェルで行うことができるPythonですべてを行うことができるというのは本当です; また、Pythonには簡単で、シェルには難しいものがあることも事実です(ちょうど、シェルには簡単だがPythonには難しいものがあるのと同じです)。両方を知ることは、長期的には最善です。
bash
シェルがすべてのLinuxディストリビューション、特に組み込みシステム用のディストリビューション、およびbusybox
実行可能ファイルを実行している他のディストリビューションで普遍的に使用できるわけではないことです。bash
下位互換性のあるBourneシェル自体をターゲットとするスクリプトは、すべてのPOSIX準拠システムで実行されますが、その言語はによって実装されたものよりもはるかに制限されていbash
ます。
「Pythonと比較して、シェルスクリプトが不可欠なツールになる強みは何ですか?」
シェルは必須ではありません。なぜそんなにたくさんあると思いますか?bash、tcsh、csh、shなどなど
Python はシェルです。すべてのコマンドの実行に使用するものではありませんが、スクリプト作成には理想的です。
Pythonは、すべてのLinuxディストリビューションの標準的な部分です。
より伝統的なシェルは多くのことを行います。
コマンドを実行するための便利なユーザーインターフェイスがあります。これには、シェルがPATHを検索し、要求されたプログラムをフォークして実行する1行のコマンドが含まれます。また、パイプライン、シーケンス、並行プログラム(およびを使用);
、|
および&
リダイレクト(>
およびを使用)も含まれ<
ます。
彼らはスクリプトを実行するための不器用な小さなプログラミング言語のような機能を持っています。この言語はかなり使いにくく、非常に非効率的です。この言語のほとんどのステートメントでは、1つ以上の追加プロセスをforkする必要があり、時間とメモリを浪費します。
シェルからプログラムを実行し、stderrをログファイルにリダイレクトします。これは良いことです。シェルでそれを行います。
他のほとんどすべては、Pythonスクリプトとしてより効率的かつ明確に実行できます。
両方が必要です。ただし、従来のシェル言語では、ifステートメントまたはループを含むスクリプトを記述しないでください。
if
ステートメントは、多くの場合、test
プログラムの実行を伴います。シェルは、あらゆる点で不作法なプログラミング言語です。
bash
少なくとも)には、意思決定を処理するためのビルトインがあります(たとえば、より用途の広い構成に加えてtest
、bash
ビルトインです)。それには確かに弱点がありますが、長所もあります。他の種類の言語とはパラダイムが非常に異なるため、詳細に学習する価値もあります。
cat "$1" | ssh "$2" "cat - >\"$1\""
生みましたscp
。彼らはすでにそれを使用していたので、彼らはそれをどのように設計するのが最善かを知っていました。
シェルは、より複雑なものをはるかに複雑にする代わりに、一般的なアクションと単純なアクションを本当に単純にします。
通常、小さなシェルスクリプトは対応するpythonプログラムよりも短くて単純ですが、pythonプログラムは変更を適切に受け入れる傾向がありますが、シェルスクリプトはコードが追加されるにつれて保守性が低下する傾向があります。
これにより、日々の生産性を最適化するにはシェルスクリプトが必要ですが、それは主に使い捨てスクリプトに使用し、それ以外の場所ではpythonを使用する必要があります。
シェルスクリプトでできることは、Pythonではできないことです。シェルスクリプトの大きな利点は、シェルを使用するときと同じコマンドを使用できることです。そのため、ヘビーシェルユーザーの場合、シェルスクリプトは、シェルの作業を自動化するための非常に迅速で簡単な方法になるでしょう。 。
また、Pythonからは絶対に実行可能ですが、Pythonよりもシェルスクリプトでデータのパイプを処理する方が簡単です。
そして最後に、シェルスクリプトを実行するために追加のインターピーターを起動する必要がないため、非常に小さくなりますが、速度とメモリ使用量が著しく向上する場合があります。
しかし、繰り返しになりますが、Pythonスクリプトの方がはるかに保守しやすくなっています。そのため、私は大きな醜いシェルスクリプトからPythonスクリプトに移行しようとしています。Pythonで例外処理とQAを行うのも簡単です。
以前のすべての回答が示しているように、シェルスクリプトを学ぶ必要はありません。しかし、学習は決して悪いことではありません。それは本当に個人的な優先事項の問題です。誰かがあなたの時間に値するものと価値がないものをあなたに伝えるのは非常に困難です。
ほとんどのプログラマーは、新しい言語の学習が毎回段階的に簡単になることに気づきます。(同じことが自然言語にもほぼ当てはまります。)そして、あなたが始めるのが早いほど良いでしょう。
プラス:言語を学んだことで、完全な知識と親しみやすさの立場からその限界を贅沢に取り除くことができます。これはおそらくあなたを解雇することはありませんが、あなたの仲間からあなたにビールを稼ぐかもしれません!
以前の回答のほとんどに同意します。私は、ファイルシステム指向のタスク(ファイルのコピーと移動、grepなど)を実行するのに最も適したシェルコマンドを検討します。私の意見では、ファイルを読み書きする必要がある場合は、1つの>>file.txt
リダイレクトがファイルに追加されるため、たとえばfile=open('file.txt','a'); file.write()
、などを必要とする代わりに、シェルが優れています。
現在、個人的な使用のために、Pythonスクリプトを作成し、一部のアクションがPythonよりもシェルで簡単な場合は常にos.system( 'command')またはos.popen( 'command')を呼び出すことの両方を混合しています。
シェルはどこでも利用できます。ポータブル機能の比較的基本的なセットに固執する場合、スクリプトは携帯電話、ワイヤレスルーター、DVR、ネットブック、ワークステーション、大きな鉄製のサーバーなどで実行できます。多くのシステムでは、Pythonは必ずしもデフォルトで含まれているわけではなく、環境によっては、インストールが難しい場合があります。
コマンドラインはまさしくシェルなので、いくつかのシェルスクリプトを学ぶことは、いくつかのコマンドラインのトリックを学ぶのにも役立ちます。また、かなり長くて複雑なコマンドラインを使用して、さらに必要になるとわかった後で、それをより一般的なスクリプトに変換するのにも適しています。
シェルには、かなり強力な機能もいくつかあります。パイプラインは、私が知る限り、シェルにのみネイティブな非常に興味深い制御構造です。