シェルスクリプト入門:日々の作業を効率化しよう!

その他

はじめに

シェルスクリプトは、LinuxやMacでのターミナル操作を自動化し、効率的に作業を進めるための強力なツールです。この入門記事では、シェルスクリプトの基礎を学び、簡単な自動化タスクを実際に試せるように解説します。

シェルスクリプトとは?

シェルとは?

シェルは、コンピュータとやり取りをするためのインターフェースです。コマンドを入力すると、シェルがそれを解釈して実行します。

  • :LinuxやMacで使われる「Bash」や「Zsh」が代表的なシェルです。

シェルスクリプトとは?

シェルスクリプトは、シェルで実行できるコマンドをスクリプト形式(テキストファイル)でまとめたものです。これにより、手動で入力していた操作を自動化できます。

環境の準備

シェルスクリプトを使うには、LinuxやMacのターミナル環境が必要です(Windowsの場合は、WSLまたはGit Bashをインストールしてください)。

Bashが使えるか確認

  1. ターミナルを開く。
  2. 以下のコマンドを実行:
    bash --version
  3. Bashのバージョンが表示されればOK!

テキストエディタを用意

スクリプトを作成するためのエディタを用意します。

  • 例:nano, vim, VSCodeなど。

シェルスクリプトの基本構造

シェルスクリプトは、次のような基本構造で書かれます。

スクリプトの例

bash ファイル名.shで実行できます。

ShellScript
#!/bin/bash
# これはコメントです

echo "Hello, World!"  # メッセージを表示

ポイント

  1. #!/bin/bash
    スクリプトがBashで実行されることを示します(シバン)。
  2. コメント
    # から始まる行はコメントです。スクリプトの説明やメモに使います。
  3. コマンド
    echo のようなコマンドを使います。

基本的な構文とコマンド

変数

変数を使ってデータを保存します。

ShellScript
#!/bin/bash

name="Alice"
echo "Hello, $name!"

条件分岐

if文でまたはcase文で条件を判断します。

基本構文

if文
ShellScript
if [ 条件1 ]; then
  # 条件1が真の場合に実行するコマンド
elif [ 条件2 ]; then
  # 条件1が偽で、条件2が真の場合に実行するコマンド
else
  # 条件1と条件2の両方が偽の場合に実行するコマンド
fi
case文
ShellScript
casein
  パターン1)
    # パターン1に一致した場合の処理
    ;;
  パターン2)
    # パターン2に一致した場合の処理
    ;;
  *)
    # どれにも一致しない場合の処理
    ;;
esac

サンプル

ShellScript
#!/bin/bash

number=10

# if文
if [ $number -gt 5 ]; then
  echo "The number is greater than 5"
else
  echo "The number is 5 or less"
fi

# case文
case $number in
  # 5より大きい場合
  6|7|8|9|10|11|12|*)  # 5を超える値をカバー
    echo "The number is greater than 5"
    ;;
  # 5以下の場合
  0|1|2|3|4|5)  # 0から5までをカバー
    echo "The number is 5 or less"
    ;;
esac

条件式の記述方法

数値の比較
条件式意味
[ $a -eq $b ]$a と $b が等しい
[ $a -ne $b ]$a と $b が等しくない
[ $a -gt $b ]$a が $b より大きい
[ $a -lt $b ]$a が $b より小さい
[ $a -ge $b ]$a が $b 以上
[ $a -le $b ]$a が $b 以下
文字列の比較
条件式意味
[ "$a" == "$b" ]$a と $b が等しい
[ "$a" != "$b" ]$a と $b が等しくない
[ -z "$a" ]$a が空文字列(長さ0)である
[ -n "$a" ]$a が空ではない
ファイルのチェック
条件式意味
[ -e file ]ファイルが存在するか
[ -f file ]通常のファイルか
[ -d directory ]ディレクトリが存在するか

ループ

繰り返し処理を実行します。

基本構文

for
ShellScript
for 変数 in リスト; do
  # 処理
done
while
ShellScript
while 条件; do
  # 処理
done
until

untilループは、条件が真になるまで繰り返します。

ShellScript
until 条件; do
  # 処理
done

サンプル

ShellScript
#!/bin/bash

# for リストループ
for item in apple banana cherry; do
  echo "I like $item"
done

# for 数値ループ
for i in {1..5}; do
  echo "Number: $i"
done

count=5

# while カウントダウン
while [ $count -gt 0 ]; do
  echo "Countdown: $count"
  count=$((count - 1))
done

# until カウントアップ
count=0
until [ $count -ge 5 ]; do
  echo "Count: $count"
  count=$((count + 1))
done

ループの制御

break(ループを中断)
ShellScript
#!/bin/bash

for i in {1..10}; do
  if [ $i -eq 5 ]; then
    break
  fi
  echo "Number: $i"
done
continue(次のループにスキップ)
ShellScript
#!/bin/bash

for i in {1..5}; do
  if [ $i -eq 3 ]; then
    continue
  fi
  echo "Number: $i"
done
無限ループ
ShellScript
#!/bin/bash

while true; do
  echo "This is an infinite loop. Press Ctrl+C to stop."
  sleep 1
done

標準入力・出力

ユーザー入力を受け取ることができます。

基本構文

標準出力
ShellScript
echo "メッセージ"
標準入力
ShellScript
read 変数名

使用例

ShellScript
#!/bin/bash

echo "What is your name?"
read name
echo "Hello, $name!"

よく使われるユースケース

バックアップスクリプトの例

次のスクリプトは、指定したディレクトリの内容を圧縮してバックアップします。

ShellScript
#!/bin/bash

backup_dir="/path/to/backup"
target_dir="/path/to/target"

# バックアップファイル名
backup_file="backup_$(date +%Y%m%d).tar.gz"

# バックアップ作成
tar -czf $backup_file $target_dir

# バックアップファイルをターゲットディレクトリに移動
mv $backup_file $target_dir

echo "Backup completed! Backup file moved to $target_dir"

注意点とベストプラクティス

  1. コメントを追加:スクリプトの各部分に説明を加えて可読性を高める。
  2. エラー処理を実装
    if [ $? -ne 0 ]; then echo "Error occurred!" exit 1 fi
  3. 絶対パスを使用:相対パスを避け、スクリプトがどこでも動作するようにします。

次に学ぶべきこと

  1. 高度な構文:関数や配列、サブプロセスの使い方を学ぶ。
  2. 他のシェル言語ZshFishを試す。
  3. 自動化ツールcronAnsibleを使ったタスクスケジューリング。

まとめ

シェルスクリプトは、ターミナルの操作を効率化し、日々の作業を簡単にしてくれる強力なツールです。この入門記事を参考に、まずは簡単なスクリプトから試してみましょう。そして、繰り返し練習することで、より複雑なタスクも自動化できるようになります!

コメント

タイトルとURLをコピーしました