ウェブサイト検索

Linuxでシェルスクリプトを使用してコマンドを実行する方法


紹介

シェルは、ユーザーがシステムと対話できるようにするコマンドラインインタープリタです。ユーザーからの入力を受け取り、出力を表示する役割を担っています。

シェルスクリプトは、実行の順序で書かれた一連のコマンドです。これらのスクリプトには、関数、ループ、コマンド、変数が含まれることがあります。スクリプトは、複雑なコマンドの連続や繰り返し作業を簡素化するのに役立ちます。

この記事では、Linuxのコマンドライン用にシェルスクリプトを作成して実行する方法を学びます。

前提条件

このチュートリアルを完了するためには、次のものが必要です:

  • ターミナルの使用に慣れている。
  • テキストエディターに慣れていること。
  • コマンドchmod、mkdir、およびcdに慣れていること。

始めに

シェルスクリプトは、.shの拡張子で保存する必要があります。

ファイルは、Linuxシステムにシェルスクリプトのためにどのインタプリタを使用するかを知らせるために、シェバンライン (#!) で始める必要があります。

bashをサポートする環境では、次のように使用してください:

#!/bin/bash 

shellをサポートする環境では、次のように使用してください:

#!/bin/sh

このチュートリアルは、あなたの環境がbashをサポートしていることを前提としています。

シェルスクリプトには可読性を高めるためにコメントを含めることもできます。良いスクリプトは常に、スクリプトが何をしているのか、デザイン選択の背後にある理由を理解するのを助けるコメントが含まれています。

基本的なシェルスクリプトの作成と実行

viエディタ、catコマンド、またはテキストエディタを使用してシェルスクリプトを作成できます。

このチュートリアルでは、viを使用してシェルスクリプトを作成する方法を学びます:

  1. vi basic_script.sh

これにより、viエディタが起動し、basic_script.shファイルが作成されます。

次に、キーボードのiを押してINSERT MODEを開始します。次の行を追加してください:

#!/bin/bash
whoami
date

このスクリプトは、whoami と date コマンドを実行します。whoami は、現在のユーザー名を表示します。date は、現在のシステムのタイムスタンプを表示します。

viエディタを保存して終了するには:

  • エスケープキー(ESC)を押してください
  • :(コロン文字)
  • コードと入力します
  • エンターを押してください

最後に、次のコマンドでスクリプトを実行できます:

  1. bash basic_script.sh

次のような出力が得られる場合があります:

root
Fri Jun 19 16:59:48 UTC 2020

最初の出力の行はwhoamiコマンドに対応しています。2番目の出力の行はdateコマンドに対応しています。

スクリプトを bash を指定せずに実行することもできます:

  1. ./basic_script.sh

この方法でファイルを実行するには、ユーザーが最初に許可を与える必要があるかもしれません。bashで実行する場合は、この許可は必要ありません。

~bash: ./basic_script.sh: Permission denied

コマンドbash ファイル名は、ファイルからの読み取り権限のみを必要とします。

一方で、コマンド ./filename はそのファイルを実行可能なものとして実行し、実行 権限を必要とします。

スクリプトを実行するには、権限を更新する必要があります。

  1. chmod +x basic_script.sh

このコマンドはchmodを適用し、現在のユーザーにx(実行可能)権限を付与します。

シェルスクリプトでの変数の使用

スクリプトにはユーザー定義の変数を含めることができます。実際、スクリプトのサイズが大きくなるにつれて、明確に定義された自己説明的な名前の変数を持つことが重要です。

スクリプトに次の行を追加してください。

#!/bin/bash
This is a comment

defining a variable
GREETINGS="Hello! How are you"
echo $GREETINGS

GREETINGS は定義された変数であり、その後 $ (ドル記号)を使ってアクセスされます。変数に値を割り当てる行にはスペースを入れてはいけません。

スクリプトを実行する:

  1. bash basic_script.sh

これは変数に割り当てられた値を印刷します:

Hello! How are you

スクリプトが実行されると、GREETINGSが定義されてアクセスされます。

コマンドラインからの入力を読み取る

シェルスクリプトは、コマンドラインからの入力を受け付ける能力により対話式にすることができます。readコマンドを使用して、コマンドラインの入力を変数に格納することができます。

スクリプトに次の行を追加してください。

#!/bin/bash
This is a comment

defining a variable
echo "What is your name?"
reading input
read NAME
defining a variable
GREETINGS="Hello! How are you"
echo $NAME $GREETINGS               

変数NAMEはコマンドラインからの入力を受け入れるために使用されています。このスクリプトはユーザーがNAMEの入力を提供するのを待ちます。その後、NAMEとGREETINGSを印刷します。

What is your name?
Sammy
Sammy Hello! How are you

この例では、ユーザーが名前「Sammy」を持つプロンプトを提供しています。

関数の定義

ユーザーはスクリプト内で独自の関数を定義できます。これらの関数は複数の引数を取ることができます。

スクリプトに次の行を追加してください。

#!/bin/bash
#This is a comment

defining a variable
echo "What is the name of the directory you want to create?"
reading input 
read NAME

echo "Creating $NAME ..."
mkcd ()
{
  mkdir "$NAME" 
  cd "$NAME"
}

mkcd
echo "You are now in $NAME"

このスクリプトはユーザーにディレクトリ名を尋ねます。それから、mkdirを使用してディレクトリを作成し、cdでその中に移動します。

What is the name of the directory you want to create?
test_dir
Creating test_dir ...
You are now in test_dir

この例では、ユーザーが入力として test_dir を指定しています。次に、スクリプトはその名前の新しいディレクトリを作成します。最後に、スクリプトはユーザーの現在の作業ディレクトリを test_dir に変更します。

結論

この記事では、Linuxのコマンドラインでシェルスクリプトを作成して実行する方法を学びました。

頻繁に実行する繰り返しの多い、または時間のかかる作業を考えて、それらがスクリプトによって恩恵を受ける可能性があるものを検討してください。

if-else、配列、およびコマンドラインの引数を使って学習を続けてください。

関連記事: