Bashチートシート

中級 | 15分 で読める | 2025.01.10

公式ドキュメント

このチートシートで確認できること

Bash は、コマンドを組み合わせてファイル操作、検索、集計、自動化を行うためのシェルです。このページでは、日常的に使うコマンド、変数、条件分岐、ループ、関数、パイプ、リダイレクトを確認できます。

最初に覚えるのは、pwdlscdcpmvgrepfind|>&& です。削除や一括処理は便利ですが、対象を間違えると戻せないため、確認コマンドとセットで使います。

基本コマンド

ファイル操作

# 一覧表示
ls # 基本
ls -la # 詳細(隠しファイル含む)
ls -lh # 人間が読みやすいサイズ

# ディレクトリ移動
cd /path/to/dir
cd ~ # ホームディレクトリ
cd - # 前のディレクトリ
cd .. # 親ディレクトリ

# ファイル操作
cp file1 file2 # コピー
cp -r dir1 dir2 # ディレクトリコピー
mv file1 file2 # 移動/リネーム
rm file # 削除
rm -rf dir # ディレクトリ削除(強制)
mkdir dir # ディレクトリ作成
mkdir -p a/b/c # 親ディレクトリも作成

# ファイル内容
cat file # 全表示
head -n 10 file # 先頭10行
tail -n 10 file # 末尾10行
tail -f file # リアルタイム監視
less file # ページャー

ポイント: grep・sed・awkはBashの三大テキスト処理ツール。パイプで組み合わせることで強力なデータ加工ができます。

テキスト処理

# 検索
grep "pattern" file
grep -r "pattern" dir # 再帰検索
grep -i "pattern" file # 大文字小文字無視
grep -n "pattern" file # 行番号表示
grep -v "pattern" file # 除外

# 置換
sed 's/old/new/' file # 最初の1つ
sed 's/old/new/g' file # 全て置換
sed -i 's/old/new/g' file # ファイル直接編集

# カラム抽出
awk '{print $1}' file # 1列目
awk -F: '{print $1}' file # 区切り文字指定
cut -d: -f1 file # 区切り文字と列

# ソート
sort file
sort -n file # 数値ソート
sort -r file # 逆順
sort -u file # 重複除去

# 重複
uniq file # 連続した重複を除去
sort file | uniq # 全重複を除去
uniq -c file # 出現回数カウント

# カウント
wc -l file # 行数
wc -w file # 単語数
wc -c file # バイト数

ファイル検索

# find
find . -name "*.txt" # 名前で検索
find . -type f -name "*.log" # ファイルのみ
find . -type d -name "src" # ディレクトリのみ
find . -mtime -7 # 7日以内に更新
find . -size +100M # 100MB以上
find . -name "*.tmp" -delete # 削除

# locate(インデックス検索)
locate filename

注意: rm -rfは取り消しできません。必ず対象パスを確認してから実行しましょう。特に変数展開と組み合わせる場合は要注意です

変数

# 変数
name="Alice"
echo $name
echo ${name}

# 環境変数
export PATH="$PATH:/new/path"
export NODE_ENV=production

特殊変数

変数説明
$0スクリプト名
$1第1引数
$@全引数(個別)
$*全引数(まとめて)
$#引数の数
$?直前のコマンドの終了ステータス
$$プロセスID
$!最後のバックグラウンドプロセスID

文字列操作

構文説明
${var:-default}未定義ならデフォルト値
${var:=default}未定義なら代入
${#var}文字列長
${var#pattern}先頭からパターン削除(最短)
${var##pattern}先頭からパターン削除(最長)
${var%pattern}末尾からパターン削除(最短)
${var%%pattern}末尾からパターン削除(最長)
${var/old/new}置換(最初の1つ)
${var//old/new}置換(全て)

実践メモ: ${var:-default}構文を使えば、未定義変数にデフォルト値を設定できます。スクリプトの堅牢性が大幅に向上します。

制御構文

条件分岐

# if文
if [ "$name" = "Alice" ]; then
 echo "Hello Alice"
elif [ "$name" = "Bob" ]; then
 echo "Hello Bob"
else
 echo "Hello stranger"
fi

条件演算子

文字列

演算子説明
[ "$a" = "$b" ]等しい
[ "$a" != "$b" ]等しくない
[ -z "$a" ]空文字
[ -n "$a" ]空でない

数値

演算子説明
[ $a -eq $b ]等しい
[ $a -ne $b ]等しくない
[ $a -lt $b ]より小さい
[ $a -le $b ]以下
[ $a -gt $b ]より大きい
[ $a -ge $b ]以上

ファイル

演算子説明
[ -e file ]存在する
[ -f file ]ファイルである
[ -d dir ]ディレクトリである
[ -r file ]読み取り可能
[ -w file ]書き込み可能
[ -x file ]実行可能

論理演算

演算子説明
[ cond1 ] && [ cond2 ]AND
[ cond1 ] || [ cond2 ]OR
! [ cond ]NOT

[[ ]] の使用(拡張テスト)

演算子説明
[[ $name == A* ]]パターンマッチ
[[ $name =~ ^A.*$ ]]正規表現

ループ

# for
for i in 1 2 3 4 5; do
 echo $i
done

for i in {1..10}; do
 echo $i
done

for file in *.txt; do
 echo $file
done

for ((i=0; i<10; i++)); do
 echo $i
done

# while
while [ $count -lt 10 ]; do
 echo $count
 ((count++))
done

# ファイル読み込み
while read line; do
 echo $line
done < file.txt

case

case $option in
 start)
 echo "Starting..."
 ;;
 stop)
 echo "Stopping..."
 ;;
 restart)
 echo "Restarting..."
 ;;
 *)
 echo "Unknown option"
 ;;
esac

関数

# 関数定義
greet() {
 local name=$1
 echo "Hello, $name!"
 return 0
}

# 呼び出し
greet "Alice"

# 戻り値の取得
result=$(greet "Alice")
status=$?

ポイント: パイプ(|)とリダイレクト(>)はBashの最も重要な概念。コマンドを繋げてデータを流す仕組みを理解しましょう

リダイレクト・パイプ

コマンド説明
command > file出力リダイレクト(上書き)
command >> file出力リダイレクト(追記)
command 2> file標準エラーリダイレクト
command &> file両方リダイレクト
command < file入力リダイレクト
command1 | command2パイプ
ls | grep "txt" | wc -lパイプ連結
diff <(command1) <(command2)プロセス置換

Here Document

cat << EOF
複数行の
テキスト
EOF

便利なテクニック

コマンド説明
date=$(date +%Y%m%d)コマンド置換
files=$(ls *.txt)コマンド置換(ファイル一覧)
((result = 5 + 3))算術演算
result=$((5 + 3))算術演算(代入)
command &バックグラウンド実行
nohup command &ログアウト後も継続
command1 && command2成功時のみ次を実行
command1 || command2失敗時のみ次を実行
command1 ; command2常に両方実行
find . -name "*.txt" | xargs grep "pattern"xargs(検索)
find . -name "*.tmp" | xargs rmxargs(削除、実行前に対象確認)
command | tee file画面とファイル両方に出力

注意: [ ][[ ]]は異なります。拡張テストの[[ ]]はBash固有で、パターンマッチや正規表現が使えます。POSIX互換が必要なら[ ]を使いましょう。

実践メモ: xargsとfindの組み合わせは頻出パターンです。削除に使う前に、まず find . -name "*.tmp" -print で対象を確認します。

シェルスクリプト例

#!/bin/bash
set -e # エラーで停止
set -u # 未定義変数でエラー

# 引数チェック
if [ $# -lt 1 ]; then
 echo "Usage: $0 <filename>"
 exit 1
fi

# ファイル存在チェック
if [ ! -f "$1" ]; then
 echo "File not found: $1"
 exit 1
fi

# 処理
echo "Processing $1..."

まとめ

Bash は、単体コマンドよりも「検索して、絞り込み、加工して、別のコマンドへ渡す」流れを覚えると実用的になります。まずは grepfind、パイプ、リダイレクト、終了ステータスを押さえてください。

削除、上書き、変数展開を伴う処理は事故につながりやすいため、先に対象を表示してから実行します。

参考リソース

関連記事

← 一覧に戻る
PR
PR
PR
PR