シェルスクリプト · 1 min read · Nov 14, 2025

シェルスクリプト パート2: 入力の受け取りとシェル算術の実行

こんにちは!この記事はHowtoforgeのシェルスクリプトチュートリアルシリーズの第2部です。この時点で、シリーズの第1部を読んでおり、シンプルなスクリプトを作成して実行する方法を知っていると仮定します。第2部では、ユーザーからの入力を受け取り、それをシェルスクリプトを通じて処理する方法を学びます。それでは始めましょう!

Linuxの変数

プログラミング言語と同様に、Linuxシェルはデータを変数に保存する機能を持っています。変数は、プログラミング言語を通じて処理されるデータを一時的に保存するコンテナです。Linuxには2種類の変数があります:環境変数とシェル変数です。

環境変数

環境変数はLinuxのデフォルト変数であり、シェル内のプロセス間で情報を渡すために使用されます。環境変数は大文字と小文字を区別し、アクセスするためには常に大文字である必要があります。

以下の表は、Linuxシェルの一般的な環境変数を示しています:

変数名使用法
BASHBashスクリプトのコマンドインタープリタのフルパスを保持します
BASH_VERSION現在使用されているマシンのbashリリースバージョンを保持します
HOMEホームディレクトリの相対パスを保持します。
LOGNAME現在ログインしているユーザーのアカウント名を保持します
OSTYPE使用されているマシンの現在のOSを説明する文字列を保持します
PATHLinuxの実行可能ファイルのコロン区切りの絶対パスを保持します
PWDシェルの現在の作業ディレクトリを保持します
SHELL好みのコマンドラインシェルを保持します
USERLOGNAMEと似ています。現在ログインしているユーザーのアカウント名を保持します
_シェルで最近使用されたコマンドの名前を保持します

環境変数の値を表示するには、ユーザーはアクセスする変数の前にドル記号($)を付ける必要があります。たとえば、現在の作業ディレクトリ、ログインユーザー、およびOSタイプなどのシステム情報を表示するには、echoを使用して次のようにします:

#!/bin/bash  
echo $PWD  
echo $LOGNAME  
echo $OSTYPE

結果は次のとおりです:

Linuxの環境変数の全リストを取得するには、envコマンドを使用します。

環境変数の値を変更する

システムの柔軟性を提供するために、これらの環境変数は操作可能です。環境変数に値を設定するには、代入式(等号)を使用します。

例:

#!/bin/bash  
echo $USER  
USER="new user"  
echo $USER

スクリプトの結果は次のとおりです:

スクリプトを実行すると、最初にecho $USERの行の$USERはUSER変数の値を表示します。代入演算子(=)を使用することで、USER変数はその値を変更します。ただし、ユーザーが環境変数に未知の値を割り当てると、シェルはスクリプトのローカルコンテキスト内で環境変数に似た別のシェル変数を作成しますが、他のアプリケーションの動作には影響しません。つまり、スクリプトが終了すると、USER変数はデフォルト値を保持します。

前の例では、環境変数の値を操作する際に、USER=”new user”の行の変数名にドル記号($)を省略していることに注意してください。また、代入演算子を使用する際には、USERと=の間にスペースを入れてはいけません。スペースを追加するとエラーが発生します。

シェル変数

シェルはユーザーが変数を宣言することも許可します。PHPと同様に、シェルスクリプトで変数を宣言する際に、データ型を宣言することを心配する必要はありません。インタープリタは、ユーザーが実行時に保存するデータに基づいて変数のデータ型を自動的に検出します。

シェル変数の命名規則

他のプログラミング言語と同様に、シェル変数の命名には規則があります。以下はその規則の要約です:

  1. 変数名は文字またはアンダースコアで始まる必要があります。
  2. 英数字またはアンダースコアのみを含む必要があります。
  3. 変数は大文字と小文字を区別するため、path、PATH、Pathは異なります。

この規則を証明するために、以下にシンプルなスクリプトを作成します:

#!/bin/bash  
12abc=10  
abc#*=10  
_abc=10  
_ABC=2  
echo $12abc $abc#* $_abc $_ABC

行2と3は「command not found」エラーを返します。なぜなら、変数12abcは数値文字で始まり、変数abc#*は不正な文字を含んでいるからです。また、_abcと_ABCは異なる変数であり、行_ABC=2は_abcの値を上書きしないことも証明しました。

readコマンドを使用してシェル変数に値を割り当てる

readはユーザーからの入力を受け取ることを可能にするコマンドです。readコマンドの構文は次のとおりです:

read 

たとえば、ユーザーが自分の名前と姓を入力し、それを表示するスクリプトを作成します。ユーザーに何をすべきかを知らせるために、echoコマンドでユーザープロンプトを表示します。

#!/bin/bash  
echo "あなたの名前: "  
read fname  
echo "あなたの姓:"  
read lname  
echo "こんにちは $fname $lname ! シェルスクリプトの作成方法を学んでいます。"

結果は次のとおりです:

前の例と同様に、変数を使用するために宣言する必要はありません。インタープリタはreadコマンドで使用される変数を自動的に作成します。ただし、例ではユーザーにプロンプトを作成するためにechoコマンドを繰り返し使用しました。readコマンドには、ユーザー入力を受け取る際にプロンプトを作成する機能もあります。readコマンドでプロンプトを使用する構文は次のとおりです:

read -p "あなたのプロンプト: " 

前のコードを簡素化するために、コードを次のように再構築できます:

#!/bin/bash  
read -p "あなたの名前: " fname  
read -p "あなたの姓: " lname  
echo "こんにちは $fname $lname ! シェルスクリプトの作成方法を学んでいます。"

readコマンドのもう一つの利点は、コマンドプロンプトがテキストのすぐ後に表示され、次の行に表示されないことです。

readコマンドはパスワードを受け取るためにも使用できます。通常の入力とは異なり、パスワードはセキュリティを提供するためにマスクされます。パスワードを受け取る構文は次のとおりです:

read -s -p "あなたのプロンプト" 

シェルを使用した簡単な算術の実行

入力を受け取り、出力を表示することに加えて、bashシェルには組み込みの算術オプションもあります。以下の表は、Bashシェルの組み込み算術演算子を要約しています。

演算子説明構文使用法
+加算a=$((b+c))bとcの値を加算し、変数aに保存します
-減算a=$((b-c))bからcの値を減算し、変数aに保存します
*乗算a=$((b*c))bとcの値を乗算し、変数aに保存します
/除算a=$((b/c))bをcで割り、変数aに保存します
%剰余a=$((b%c))bとcの剰余除算を実行し、変数aに保存します
++前置インクリメント$((++aa))変数aの値を即座にインクリメントします
++後置インクリメント$((a++))変数aの値をインクリメントし、次の行に変更を反映します
前置デクリメント$((–a))変数aの値を即座にデクリメントします
後置デクリメント$((a–))変数aの値をデクリメントし、次の行に変更を反映します
指数$((a2))変数aの値を2の指数に上げます
+=プラスイコール$((a+=b))変数aとbの値を加算し、変数aに保存します
-=マイナスイコール$((a-=b))変数bをaから減算し、変数aに保存します
*=掛け算イコール$((a*=b))変数aとbの値を乗算し、変数aに保存します
/=スラッシュイコール$((a/=b))変数aをbで割り、変数aに保存します
%=モジュールイコール$((a%=b))変数aとbの間で剰余除算を実行し、変数aに保存します

算術命令を実行するたびに、すべての変数はドル記号と二重括弧で囲まれます。これにより、インタープリタは変数の値を整数として扱います。そうでない場合、インタープリタは変数の値を文字列として扱います。例を見てみましょう:

#!/bin/bash  
read -p "整数1を入力してください: " a  
read -p "整数2を入力してください: " b  
echo $((a+b))  
c=$a+$b  
echo $c

例を実行すると、行$((a+b))はユーザーの値を加算し、変数aとbにそれぞれ保存されますが、c=$a+$bは変数aとbを文字列として扱います。

結論

入力を受け取り、それを変数に保存し、bashシェルスクリプトで算術演算を実行する方法をカバーしました。次のパートでは、制御構造、特に決定構造について説明します。

参考文献:

The Linux Information Project. (2007). 2015年4月29日取得, Linfo.orgから: http://www.linfo.org/

Cooper, M. (n.d.). Advanced Bash Scripting Guide. 2015年4月29日取得, http://www.tldp.org/LDP/abs/html/から

Environment Variables. (n.d.). 2015年4月29日取得, Ubuntu Documentationから: https://help.ubuntu.com/community/EnvironmentVariables

Share: X/Twitter LinkedIn

新しい投稿を受信箱で受け取る

スパムはありません。いつでも購読を解除できます。