2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

X-TECHエンジニア室Advent Calendar 2022

Day 17

シェルスクリプト超入門(ファイル作成と変数)

Last updated at Posted at 2022-12-15

はじめに

シェルスクリプトは複雑な操作を1つのコマンドにすることで様々な作業の効率化を図ることができます。

覚えておくと便利。
ということでシェルスクリプトの基礎をまとめました。

この記事に書くこと

  • シェルスクリプトの概要
  • シェルスクリプトのファイルについて
  • シェルスクリプトの変数について

シェルスクリプトの概要

シェルスクリプトはコマンドを1つのファイルに集約することです。

利用シーン

シェルスクリプトは同じOSなら、誰が動かしても同じ結果になります。
その利点を生かして以下の利用シーンが考えられます。

  • 同じコマンドを何度も実行する作業の自動化
    • デプロイで必要なコマンドの一括実行
    • 計算後にファイル抽出などレポートの作成
  • 引き継ぎ
    • 複雑な処理もシェルスクリプトのファイルを渡すだけでOK

シェルスクリプトの欠点

  • 他のプログラミング言語に比べて特殊な書き方やルールが多い
  • 開発環境やテスト環境が貧弱
    • 大人数の作業に不向き

シェルスクリプトのファイルについて

ひとまずHello,World

hello.sh
#!/bin/bash
echo 'Hello,world!'

拡張子が.shな理由

シェルスクリプトの拡張子はなんでも構いません。helloでもhello.yahoooooでも動きます。
しかし、慣習的に拡張子は「.sh」を使うことが多いです。
そのため、特別な理由がない限りは「.sh」を使いましょう。

#!/bin/bashはなにをしているか

これはshebang(シェバン)と呼ばれるもので、「このスクリプトはbashで動作しますよ」という印です。
この行を追加することでファイルを呼ぶだけで実行できるようになります。

ターミナル
~ ./hello.sh
Hello,world!

もしshコマンドで動かす場合は 以下のように一行目を書き換えてください。
なお、bashで使えて、shで使えない機能があるため、すでにshで作られているシェルスクリプトでなければ、#!/bin/bashにすることをお勧めします。

shコマンドのシェバン
#!/bin/sh

標準出力 echo

echoコマンドは引数で指定された文字列を出力するコマンドです。
-nオプションをつけると改行されずに出力されます。

echo.sh
#!/bin/bash
echo -n 北海道
echo -necho -n でっかいどう
ターミナル
~ ./echo.sh
北海道はでっかいどう

シェルスクリプトの変数について

多くのプログラミング言語と同様に、bashでも変数が使用できます。
bashの変数名は、アルファベット、数字、_(アンダースコア)の組み合わせが使えます。
ただし数字は先頭には使えません。

利用可能な変数例

利用可能 app1
_tmp
AppScript
利用不可 my-app(ハイフン不可)
1th_name(先頭に数字不可)

変数の宣言

変数は「変数名=値」の形式で値を代入します。
=の間にスペースやタブを入れてはいけません。

変数に入れた値はdeclareなど宣言がなければ文字列として扱われます
そのため、「'(コーテーション)」や「"(ダブルコーテーション)」は省略できます。

しかし、スペースやタブの入った1つの文字列として扱いたい場合は「'」か「"」で囲む必要があります。

variable.sh
#!/bin/bash
# 変数は文字列として扱われる
ROOT_DIR=/home/shell
# 空白を含み、1つの文字列として扱いたい場合は''か""で囲む
SPACE_TEXT1='Document file'
# 出力結果はSPACE_TEXT1と同じ
SPACE_TEXT2=Document file
# 値を入れなければ、空文字になる
empty=

変数の参照

変数を参照するときは定義した変数の先頭に「$」をつけます。
なお、「$」は変数を参照時のみです。
代入時に「$」をつけるとエラーになります。

variable.sh
#!/bin/bash
ROOT_DIR=/home/shell
SPACE_TEXT='Document file'
empty=

# 参照時は$を先頭につける
echo $ROOT_DIR
echo $SPACE_TEXT
echo $empty
ターミナル
# 最後の行は空文字
~ ./variable.sh
/home/shell
Document file

変数と文字列を組み合わせる

変数の直後に文字列をつなげたい場合、変数を${}で囲みます。

variable.sh
#!/bin/bash
item=pen
echo I have a ${item}s
ターミナル
~ ./variable.sh
I have a pens

おわりに

シェルスクリプト超入門として、ファイル作成と変数を記事にしました。
シェルスクリプトを自作できれば、色んな業務効率化ができそうです。

環境設定を対話方式で行うときにシェルスクリプトを使えば実装できるんじゃないかなーと思ったので今度試してみたいです。

参考

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?