3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【備忘録】シェルスクリプト

Posted at

シェルスクリプトとは?

シェル

シェル(Shell) は、私たちがコンピュータとやり取りするためのインターフェースです。具体的には、コマンドを入力して実行する黒い画面(ターミナル)で使っているのがシェルです。

よく使われるシェルには以下のようなものがあります:

  • Bash (Bourne Again Shell) - 最も一般的
  • Zsh (Z Shell) - macOSのデフォルト
  • Fish (Friendly Interactive Shell) - 初心者に優しい

シェルスクリプトの正体

シェルスクリプトは、シェルで実行するコマンドをファイルにまとめて書いたものです。
複雑な作業をの自動化や簡略化ができます。

基本的な書き方

シバン(Shebang)

ファイルの最初の行にはシバンを書きます。これは「どのシェルで実行するか」を指定するものです。
コメントのように見えますが、どのシェルスクリプトにも書かれている大切なものです。

sample.sh
#!/bin/bash

実際のスクリプトを書く

sample.sh
#!/bin/bash

echo "Hello, World!"
echo "今日の日付: $(date)"
echo "現在のディレクトリ: $(pwd)"

実行

terminal
./sample.sh

変数の使い方

変数の定義と使用

variables.sh
#!/bin/bash

# 変数の定義(=の前後にスペースを入れない!)
NAME="太郎"
AGE=25

# 変数の使用
echo "こんにちは、${NAME}さん!"
echo "年齢は${AGE}歳ですね。"

環境変数

システムに設定されている環境変数も使えます:

env_variables.sh
#!/bin/bash

echo "ユーザー名: $USER"
echo "ホームディレクトリ: $HOME"
echo "現在のパス: $PATH"

コマンドの結果を変数に格納

command_substitution.sh
#!/bin/bash

# コマンドの実行結果を変数に格納
CURRENT_DATE=$(date +%Y-%m-%d)
FILE_COUNT=$(ls -1 | wc -l)

echo "今日は${CURRENT_DATE}です"
echo "このディレクトリには${FILE_COUNT}個のファイルがあります"

条件分岐(if文)

基本的なif文

age_check.sh
#!/bin/bash

AGE=20

if [ $AGE -ge 18 ]; then
    echo "成人です"
else
    echo "未成年です"
fi

ファイルの存在確認

file_check.sh
#!/bin/bash

FILENAME="test.txt"

if [ -f "$FILENAME" ]; then
    echo "$FILENAME は存在します"
else
    echo "$FILENAME は存在しません"
fi

繰り返し処理(ループ)

for文

for_loop.sh
#!/bin/bash

# 1から5まで繰り返し
for i in {1..5}; do
    echo "回数: $i"
done

# ファイルに対する繰り返し
for FILE in *.txt; do
    echo "処理中: $FILE"
    # ここでファイルに対する処理を書く
done

while文

while_loop.sh
#!/bin/bash

COUNT=1

while [ $COUNT -le 5 ]; do
    echo "カウント: $COUNT"
    COUNT=$((COUNT + 1))
done

エラーハンドリング

error_handling.sh
#!/bin/bash

# エラーが発生したら即座に終了
set -e

# 未定義の変数使用でエラー
set -u

# パイプ処理でのエラーも検知
set -o pipefail

echo "安全なスクリプトの実行中..."

# コマンドの実行結果をチェック
if ! cp source.txt destination.txt; then
    echo "ファイルのコピーに失敗しました"
    exit 1
fi

echo "処理が正常に完了しました"

よく使うテクニック

1. 対話的な入力

interactive_input.sh
#!/bin/bash

read -p "お名前を入力してください: " NAME

echo "こんにちは、${NAME}さん!"

2. 色付きの出力

color_output.sh
#!/bin/bash

# 色の定義
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'

echo "${RED}赤"
echo "${GREEN}緑"
echo "${YELLOW}黄色"
3
1
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
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?