💻 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 | cmd2 | cmd1の出力をcmd2の入力へ |
cmd > file | 標準出力をfileへ上書き |
cmd >> file | 標準出力をfileへ追記 |
cmd 2> err.log | 標準エラーをファイルへ |
cmd 2>&1 | 標準エラーを標準出力にマージ |
cmd < file | fileを標準入力として渡す |
cmd1 && cmd2 | cmd1成功時のみcmd2実行 |
cmd1 || cmd2 | cmd1失敗時のみcmd2実行 |
💡 よく使うコマンド
| コマンド | 用途 |
|---|---|
grep -rn pattern dir/ | ディレクトリ再帰検索 |
sed 's/old/new/g' file | 文字列置換 |
awk '{print $1}' file | 列抽出 |
find . -name "*.log" -mtime -7 | 7日以内に更新されたlogファイル |
xargs rm < list.txt | ファイル一覧を引数に渡してrm |
sort -k2 -n file | 2列目を数値昇順でソート |
uniq -c | 重複行カウント |
cut -d',' -f2 | CSV 2列目を取得 |
tr -d '\r' | Windows改行コード除去 |
wc -l file | 行数カウント |