はじめに
シェルスクリプトは、LinuxやMacでのターミナル操作を自動化し、効率的に作業を進めるための強力なツールです。この入門記事では、シェルスクリプトの基礎を学び、簡単な自動化タスクを実際に試せるように解説します。
シェルスクリプトとは?
シェルとは?
シェルは、コンピュータとやり取りをするためのインターフェースです。コマンドを入力すると、シェルがそれを解釈して実行します。
- 例:LinuxやMacで使われる「Bash」や「Zsh」が代表的なシェルです。
シェルスクリプトとは?
シェルスクリプトは、シェルで実行できるコマンドをスクリプト形式(テキストファイル)でまとめたものです。これにより、手動で入力していた操作を自動化できます。
環境の準備
シェルスクリプトを使うには、LinuxやMacのターミナル環境が必要です(Windowsの場合は、WSLまたはGit Bashをインストールしてください)。
Bashが使えるか確認
- ターミナルを開く。
- 以下のコマンドを実行:
bash --version
- Bashのバージョンが表示されればOK!
テキストエディタを用意
スクリプトを作成するためのエディタを用意します。
- 例:
nano
,vim
,VSCode
など。
シェルスクリプトの基本構造
シェルスクリプトは、次のような基本構造で書かれます。
スクリプトの例
bash ファイル名.sh
で実行できます。
ShellScript
#!/bin/bash
# これはコメントです
echo "Hello, World!" # メッセージを表示
ポイント
#!/bin/bash
スクリプトがBashで実行されることを示します(シバン)。- コメント
#
から始まる行はコメントです。スクリプトの説明やメモに使います。 - コマンド
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
case 値 in
パターン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"
注意点とベストプラクティス
- コメントを追加:スクリプトの各部分に説明を加えて可読性を高める。
- エラー処理を実装
if [ $? -ne 0 ]; then echo "Error occurred!" exit 1 fi
- 絶対パスを使用:相対パスを避け、スクリプトがどこでも動作するようにします。
次に学ぶべきこと
- 高度な構文:関数や配列、サブプロセスの使い方を学ぶ。
- 他のシェル言語:
Zsh
やFish
を試す。 - 自動化ツール:
cron
やAnsible
を使ったタスクスケジューリング。
まとめ
シェルスクリプトは、ターミナルの操作を効率化し、日々の作業を簡単にしてくれる強力なツールです。この入門記事を参考に、まずは簡単なスクリプトから試してみましょう。そして、繰り返し練習することで、より複雑なタスクも自動化できるようになります!
コメント