← 学習トップに戻る

💻 Bash

Linux/Unix 環境の標準シェル。コマンド自動化・バッチ処理・システム管理に不可欠。

📌 変数と特殊変数

記法意味
VAR=value変数定義(=の前後にスペース不可)
$VAR / ${VAR}変数参照
$0スクリプト自身のファイル名
$1 〜 $9引数1番目〜9番目
$#引数の個数
$@全引数(各引数を個別に展開)
$*全引数(ひとつの文字列として展開)
$?直前のコマンドの終了ステータス
$$現在のシェルのPID
ARR=(a b c)配列定義
${ARR[0]}配列要素参照
${#ARR[@]}配列の要素数

📌 条件分岐

# if / elif / else
if [ "$VAR" = "hello" ]; then
  echo "match"
elif [ $COUNT -gt 5 ]; then
  echo "count > 5"
else
  echo "other"
fi

# 主な比較演算子 (数値)
# -eq -ne -lt -le -gt -ge

# 主な比較演算子 (文字列)
# = != -z(空) -n(非空)

# ファイル判定
# -f(通常ファイル) -d(ディレクトリ) -e(存在) -r(読込可)

# case 文
case "$1" in
  start) echo "starting" ;;
  stop)  echo "stopping" ;;
  *)     echo "unknown" ;;
esac

📌 ループ

# for ループ
for i in 1 2 3 4 5; do
  echo "$i"
done

# C スタイル for
for (( i=0; i<10; i++ )); do
  echo "$i"
done

# while ループ
while [ $COUNT -lt 5 ]; do
  COUNT=$((COUNT + 1))
done

# ファイルを1行ずつ処理
while IFS= read -r line; do
  echo "$line"
done < input.txt

📌 関数

# 関数定義
function greet() {
  local name="$1"   # localでスコープを限定
  echo "Hello, $name!"
  return 0           # 終了ステータス
}

greet "World"        # 呼び出し
echo "exit: $?"      # 終了ステータス確認

📌 パイプ・リダイレクト

記法意味
cmd1 | cmd2cmd1の出力をcmd2の入力へ
cmd > file標準出力をfileへ上書き
cmd >> file標準出力をfileへ追記
cmd 2> err.log標準エラーをファイルへ
cmd 2>&1標準エラーを標準出力にマージ
cmd < filefileを標準入力として渡す
cmd1 && cmd2cmd1成功時のみcmd2実行
cmd1 || cmd2cmd1失敗時のみcmd2実行

💡 よく使うコマンド

コマンド用途
grep -rn pattern dir/ディレクトリ再帰検索
sed 's/old/new/g' file文字列置換
awk '{print $1}' file列抽出
find . -name "*.log" -mtime -77日以内に更新されたlogファイル
xargs rm < list.txtファイル一覧を引数に渡してrm
sort -k2 -n file2列目を数値昇順でソート
uniq -c重複行カウント
cut -d',' -f2CSV 2列目を取得
tr -d '\r'Windows改行コード除去
wc -l file行数カウント

🔗 参考リンク