Yanonoblog!

こつこつと

シェルスクリプトの基本 - 改行、引数、変数、条件式など

はじめに

多少は実践的にLinux使えるようになりたいと思い書籍「新しいLinuxの教科書」を読み進めています。

本記事では「新しいLinuxの教科書」で学んだ内容と別途気になって調べた内容や知識も含めアウトプットしていきます。

前回の記事の続きとなっております。

シェルスクリプトの概要と使い方まとめてみた & 作ってみた

シェルスクリプトの行

シェルスプリクトでは実行したいコマンドラインをファイルに記述することでコマンドを実行できますが

コマンドの途中で改行を行う場合は\を使う

スクリプトファイル内において一つのコマンドが長い場合改行したほうが可読性を良くすることができますが、そのまま改行するとエラーが発生してしまいます。

# source_bash_script.sh (コマンドの途中で改行されているスクリプト)
echo 
"シェルスクリプトファイル(source_bash_script.sh)に記述したスクリプトです"

# 実行結果 (エラー発生)
./source_bash_script.sh:3: command not found: シェルスクリプトファイル(source_bash_script.sh)に記述したスクリプトです

その場合は行末に\を置くことで途中で改行しても該当の部分がひとつのコマンドとして正常に実行されます。

# source_bash_script.sh (コマンドの途中で\を入れて改行されているスクリプト)
echo \ 
"シェルスクリプトファイル(source_bash_script.sh)に記述したスクリプトです"

# 実行結果 (正常に動作)
"シェルスクリプトファイル(source_bash_script.sh)に記述したスクリプトです"

Dockerfile

本書にはないのですが、調べてみましたが、Dockerfileもシェルスクリプトの一種といえるようです。

Dockerfileの中で使用されるコマンドは、シェルスクリプトのコマンドに非常に似ており、シェルスクリプトのコマンドを使用されています。

Dockerfileで使用されるコマンドの中には、パイプライン、環境変数の設定、条件分岐、ループなどの機能があり、これらの機能を使用することで、より高度なビルドプロセスを実現することができます。

以下は、Dockerコンテナを動作させるためのDockerfileの例です。

RUN apt-get update && \
    apt-get install -y \
        package1 \
        package2 \
        package3

シェル変数

シェルスクリプトコマンドラインでも通常のプログラミング言語と同じように値を格納する変数を利用できます。

シェル変数の活用方法

シェル変数は主に以下のケースで用いられます。

シェル変数を使ってみる

以下は新しく作成したシェルスクリプトファイル**name_age.sh**です。

#!/bin/bash

# 変数の定義
name=$1
age=$2

# コマンドライン引数の取得
echo "Hello, $1"

# 条件分岐
if [ $age -gt 20 ]; then
  echo "$name is over 20 years old."
else
  echo "$name is under 20 years old."
fi

2つの引数(名前と年齢)を渡して実行することができます。

# 実行 (第一引数にname: yano, 第二引数にage: 27)
. ./name_age.sh yano 27

# 結果 (nameとageが変数に代入され、条件式の結果がechoで出力されている) 
Hello, yano
yano is over 20 years old.

変数定義の注意点 - 「代入時には$はつけない」

以下のように変数の代入時に$をつけるとエラーが発生します。

# 変数の定義 (エラーが発生する書き方)
$name=yano
$age=27

# 変数の定義 (正しい書き方)
name=yano
age=27

# 呼び出し時に$をつける
echo $name
echo $age

変数は呼び出し時、つまり値を参照したいときのみに使用します。

変数定義の注意点 - 「=の前後にはスペースを入れない」

多くのプログラミング言語では変数に値を代入する際には =の前後にスペースを入れることができますがシェルスクリプトではスペースを入れることはできません。

以下のように変数の代入時にスペースをいれるとエラーが発生します。

# 変数の定義 (エラーが発生する書き方)
name = yano
age = 27

# 変数の定義 (正しい書き方)
name=yano
age=27

変数定義の注意点 - 使用できる/できない文字

シェルスクリプトコマンドラインで使用する変数の名前には、以下のようなルールがあります。

  • 変数名に使用できるのは、アルファベット(大文字・小文字)、数字、アンダースコア(_)のみ。
  • 変数名の先頭には、数字を使用することはできない。

以下は、有効な変数名の例です。

foo
bar123
__my_var

一方で、以下の変数名は、無効な変数名となります。

123bar
_my-var
my var

これらの変数名は、数字で始まる、ハイフンを含む、スペースを含むため、変数名としては使えません。

シェルスクリプトでは、変数名に使用できる文字が制限されるため、変数名の命名には注意が必要です。変数名を分かりやすく、覚えやすくするために、キャメルケースやスネークケースなどの命名規則を使うことがあります。

また、変数名には、大文字と小文字が区別されますが一般的には環境変数は大文字、それ以外の通常のシェル変数は小文字を用いるケースが一般的です。

コマンドライン引数

コマンドライン引数は、シェルスクリプトが実行される際に指定される引数であり、$0から$9までの変数に格納されます。

$1は、最初の引数、$2は、二つ目の引数、というように使います。

引数の数に上限はありませんが、$0には実行されたスクリプト名が入るため、引数の数が1つ以上である必要があります。

続く…

コメント

本記事の内容は以上になります!

書籍の続きのアウトプットも随時更新したいと思います。


プログラミングスクールのご紹介 (卒業生より)**

お世話になったプログラミングスクールであるRUNTEQです♪

https://runteq.jp/r/ohtFwbjW

こちらのリンクを経由すると1万円引きになります。

RUNTEQを通じて開発学習の末、受託開発企業をご紹介いただき、現在も双方とご縁があります。

もし、興味がありましたらお気軽にコメントか、TwitterのDMでお声掛けください。

https://twitter.com/outputky

参考