「シェル スクリプト」という用語は Linux フォーラムで頻繁に言及されますが、多くのユーザーはこの用語に詳しくありません。この簡単で強力なプログラミング方法を学習すると、時間を節約し、コマンドラインをよりよく学習し、退屈なファイル管理タスクを排除するのに役立ちます。
シェルスクリプトとは何ですか?
Linux ユーザーであるということは、コマンドラインをいじることを意味します。好むと好まざるにかかわらず、このインターフェイスを使用すると、ポイントしてクリックするよりもはるかに簡単に実行できることがいくつかあります。コマンドラインを使い、学べば学ぶほど、その可能性がより見えてきます。コマンドライン自体はプログラム、つまりシェルです。現在、ほとんどの Linux ディストリビューションは Bash を使用しており、実際にコマンドを入力するのはこれです。
Linux を使用する前に Windows を使用していた人の中には、バッチ ファイルを覚えている人もいるかもしれません。これらは実行するコマンドを記入できる小さなテキスト ファイルで、Windows がそれらを順番に実行します。これは、高校のコンピューター室でシステム フォルダーを開いたり、ショートカットを作成したりできないときにゲームを実行するなど、いくつかの作業を行うための賢くてきちんとした方法でした。 Windows のバッチ ファイルは便利ですが、シェル スクリプトの安っぽい模造品です。
シェル スクリプトを使用すると、コマンドをチェーンでプログラムし、バッチ ファイルと同様にスクリプト化されたイベントとしてシステムに実行させることができます。また、コマンド置換など、さらに便利な機能も使用できます。 date などのコマンドを呼び出し、その出力をファイル命名スキームの一部として使用できます。バックアップを自動化し、コピーされた各ファイルの名前の末尾に現在の日付を追加できます。スクリプトは単なるコマンドの呼び出しではありません。それらはそれ自体がプログラムです。スクリプトを使用すると、「for」ループ、if/then/else ステートメントなどのプログラミング関数をオペレーティング システムのインターフェイス内で直接使用できます。また、すでに知っているコマンドラインを使用するため、別の言語を学ぶ必要もありません。
それがまさにスクリプトの力だと思います。ほとんどの主要なプログラミング言語の定番を学びながら、すでに知っているコマンドを使用してプログラミングできるようになります。反復的で退屈な作業が必要ですか?脚本を書いてください!非常に複雑なコマンドのショートカットが必要ですか?脚本を書いてください!何かのために非常に使いやすいコマンドライン インターフェイスを構築したいですか?脚本を書いてください!
あなたが始める前に
スクリプト シリーズを始める前に、いくつかの基本情報を説明しましょう。ここでは、ほとんどの Linux ディストリビューションがネイティブに使用している bash シェルを使用します。 Bash は Mac OS ユーザーが利用でき、Cygwin は Windows 上でも利用できます。非常に汎用的なので、プラットフォームに関係なくスクリプトを作成できるはずです。さらに、参照されるコマンドがすべて存在する限り、スクリプトはほとんど、またはまったく調整を必要とせずに複数のプラットフォームで動作できます。
スクリプトでは「管理者」または「スーパーユーザー」権限を簡単に利用できるため、スクリプトを機能させる前にテストすることをお勧めします。また、スクリプトを実行しようとしているファイルのバックアップがあることを確認するなど、常識に従ってください。また、ユーザーの操作が必要となるように、rm コマンドの –i などの適切なオプションを使用することも非常に重要です。これにより、いくつかの厄介な間違いを防ぐことができます。そのため、ダウンロードしたスクリプトをよく読み、問題が発生した場合に備えて、手持ちのデータに注意してください。
スクリプトの核心は単なるプレーン テキスト ファイルです。 gedit、emacs、vim、nano など、任意のテキスト エディタを使用して作成できます。リストは続きます。ただし、リッチ テキストや Word 文書ではなく、プレーン テキストとして保存してください。 nano の使いやすさが 気に入っているので、これを使用するつもりです。
スクリプトの権限と名前
スクリプトはプログラムと同様に実行されますが、これを実行するには適切な権限が必要です。スクリプトに対して次のコマンドを実行すると、スクリプトを実行可能にできます。
chmod +x ~/somecrazyfolder/script1
これにより、誰でもその特定のスクリプトを実行できるようになります。その使用を自分のユーザーのみに制限したい場合は、代わりにこれを使用できます。
chmod u+x ~/somecrazyfolder/script1
このスクリプトを実行するには、適切なディレクトリに移動し、次のようにスクリプトを実行する必要があります。
cd ~/somecrazyfolder
./script1
作業をより便利にするために、ホーム ディレクトリの「bin」フォルダにスクリプトを配置できます。
~/ビン
最近の多くのディストリビューションでは、このフォルダーはデフォルトでは作成されなくなりましたが、作成することはできます。通常、これは、他のユーザーではなく自分のユーザーに属する実行可能ファイルが保存される場所です。ここにスクリプトを配置すると、他のコマンドと同じように、名前を入力するだけでスクリプトを実行できるようになり、「./」プレフィックスを使用して移動する必要がなくなります。
ただし、スクリプトに名前を付ける前に、次のコマンドを実行して、その名前を使用するプログラムがインストールされているかどうかを確認する必要があります。
どの[コマンド]
多くの人が初期のスクリプトに「test」という名前を付けていますが、コマンドラインで実行しようとしても何も起こりません。これは、引数なしでは何も実行しない test コマンドと競合するためです。スクリプト名がコマンドと競合しないように常に注意してください。競合しないと、意図しないことを実行してしまう可能性があります。
スクリプトのガイドライン
前に述べたように、すべてのスクリプト ファイルは基本的にプレーン テキストです。ただし、だからといって、やりたいことを自由に書けるわけではありません。テキスト ファイルを実行しようとすると、シェルはテキスト ファイルを解析して、それがスクリプトであるかどうか、およびすべてを適切に処理する方法についての手がかりを求めます。このため、知っておく必要のあるガイドラインがいくつかあります。
- すべてのスクリプトは「#!/bin/bash」である必要があります。
- すべての新しい行は新しいコマンドです
- コメント行は # で始まります
- コマンドは()で囲みます。
ハッシュバンハック
シェルがテキスト ファイルを解析する場合、ファイルをスクリプトとして識別する最も直接的な方法は、最初の行を次のように作成することです。
#!/bin/bash
別のシェルを使用する場合は、そのパスをここに置き換えます。コメント行はハッシュ (#) で始まりますが、その後に強打 (!) とシェル パスを追加することは、このコメント ルールをバイパスし、この行が指すシェルでスクリプトを強制的に実行する一種のハックです。
新しい行 = 新しいコマンド
すべての新しい行は、新しいコマンド、またはより大きなシステムのコンポーネントとして考慮される必要があります。たとえば、if/then/else ステートメントは複数行に渡りますが、そのシステムの各コンポーネントは新しい行にあります。コマンドを次の行にはみ出さないでください。前のコマンドが切り詰められ、次の行でエラーが発生する可能性があります。テキスト エディタでそのような処理が行われている場合は、安全のためにテキストの折り返しをオフにする必要があります。 Alt+L を押してナノビットでテキストの折り返しをオフにすることができます。
コメントに # を付けることが多い
行を # で始めると、その行は無視されます。これにより、この行がコメント行に変わり、前のコマンドの出力が何であったか、次のコマンドが何を行うかを思い出すことができます。繰り返しになりますが、テキストの折り返しをオフにするか、コメントを複数行に分割し、すべてがハッシュで始まるようにしてください。多くのコメントを使用することは、あなたや他の人がスクリプトをより簡単に調整できるため、維持することをお勧めします。唯一の例外は前述の Hash-Bang ハックなので、#s の後に !s を付けないでください。 😉
コマンドは括弧で囲まれています
以前は、コマンドの置換は単一の目盛り (`、~ キーを共有) で行われていました。これについてはまだ触れませんが、ほとんどの人は基本を学んだ後に探索を始めるので、代わりに括弧を使用する必要があることを言及しておくとよいでしょう。これは主に、コマンドを他のコマンドの中に入れてネストする場合、括弧がより効果的に機能するためです。
最初のスクリプト
ファイルをコピーし、ファイル名の末尾に日付を追加できる簡単なスクリプトから始めましょう。それを「datecp」と呼びます。まず、その名前が何かと競合していないかどうかを確認してみましょう。
what コマンドの出力がないことがわかります。そのため、この名前を使用するように設定されています。
~/bin フォルダーに空のファイルを作成しましょう。
touch ~/bin/datecp
そして、忘れないうちに、今すぐ権限を変更しましょう。
それでは、スクリプトの構築を始めましょう。選択したテキスト エディタでそのファイルを開きます。先ほども言いましたが、私は nano のシンプルさが好きです。
nano ~/bin/datecp
そして、前提条件となる最初の行と、このスクリプトの動作に関するコメントを入力してみましょう。
次に、変数を宣言してみましょう。代数を学んだことがあるなら、それが何であるかをおそらく知っているでしょう。変数を使用すると、情報を保存し、それを使って何かを行うことができます。変数は、他の場所で参照されると「展開」できます。つまり、名前を表示する代わりに、保存されているコンテンツが表示されます。後で同じ変数に別の情報を格納するように指示することができ、その後に発生する命令では新しい情報が使用されます。本当におしゃれなプレースホルダーです。
out 変数には何を入れますか?それでは、日付と時刻を保存しましょう。これを行うには、date コマンドを呼び出します。
date コマンドの出力を構築する方法については、以下のスクリーンショットをご覧ください。
% で始まるさまざまな変数を追加すると、コマンドの出力を希望どおりに変更できることがわかります。詳細については、date コマンドのマニュアル ページを参照してください。
日付コマンドの最後の繰り返し「date +%m_%d_%y-%H.%M.%S」をスクリプトで使用してみましょう。
このスクリプトを今すぐ保存すると、それを実行でき、期待どおりの date コマンドの出力が得られます。
でも、何か違うことをしてみましょう。このコマンドには date_formatted のような変数名を付けてみましょう。これの適切な構文は次のとおりです。
変数=$(コマンド –オプション引数)
私たちの場合は、次のように構築します。
date_formatted=$(日付 +%m_%d_%y-%H.%M.%S)
これはコマンド置換と呼ばれるものです。基本的に、変数「date_formatted」が表示されるたびに括弧内のコマンドを実行するように bash に指示しています。次に、コマンドが与える出力はすべて、変数名「date_formatted」の代わりに表示されます。
スクリプトとその出力の例を次に示します。
出力にはスペースが 2 つあることに注意してください。 echo コマンドの引用符内のスペースと変数の前のスペースの両方が表示されます。スペースを表示したくない場合は、スペースを使用しないでください。また、この「echo」行を追加しないと、スクリプトはまったく出力を行わないことにも注意してください。
スクリプトに戻りましょう。次に、コマンドのコピー部分を追加しましょう。
cp –iv $1 $2.$date_formatted
これにより、–i および –v オプションを指定してコピー コマンドが起動されます。前者 (「対話型」) では、ファイルを上書きする前に確認を求められ、後者 (「詳細」) では、何が行われているかがコマンド ラインに表示されます。
次に、「$1」オプションを追加したことがわかります。スクリプトを作成する場合、ドル記号 ($) の後に数字を付けると、スクリプトが呼び出されたときのその番号付き引数を示します。たとえば、次のコマンドでは次のようになります。
cp –iv Trogdor2.mp3 着信音.mp3
最初の引数は「Trogdor2.mp3」、2 番目の引数は「ringtone.mp3」です。
スクリプトを振り返ると、2 つの引数を参照していることがわかります。
これは、スクリプトを実行するときに、スクリプトを正しく実行するには 2 つの引数を指定する必要があることを意味します。最初の引数 $1 はコピーされるファイルで、「cp –iv」コマンドの最初の引数として置き換えられます。
2 番目の引数 $2 は、同じコマンドの出力ファイルとして機能します。しかし、それが違うこともわかります。ピリオドを追加し、上記の「date_formatted」変数を参照しました。これが何をするのか知りたいですか?
スクリプトが実行されると何が起こるかは次のとおりです。
出力ファイルには、$2 に入力した内容、ピリオド、date コマンドの出力がリストされていることがわかります。当然ですよね?
datecp コマンドを実行すると、このスクリプトが実行され、任意のファイルを新しい場所にコピーできるようになり、ファイル名の末尾に日付と時刻が自動的に追加されます。アーカイブに便利です!
シェル スクリプトは、OS を機能させるための中心です。それを実現するために新しいプログラミング言語を学ぶ必要もありません。自宅でいくつかの基本的なコマンドを使用してスクリプトを作成して、これを何に使用できるかを考え始めてください。
スクリプトを書いていますか?初心者へのアドバイスはありますか?コメントであなたの考えを共有してください!このシリーズにはまだ他にも登場する予定です!





