【まとめ】シェルスクリプト
シェルスクリプト関連記事のまとめになります。
プログラム記事全般はこちらのリンク先にあります。
目次
コマンド別
- `(バッククォート):構文やコマンド引数内でコマンド実施
- ‘(シングルクォーテーション):1文字列指定(そのまま表示)
- ”(ダブルクォーテーション):1文字列指定
- :(コロン):明示的に「何もしない」
- ;(セミコロン):1行で複数処理を行う
- ||(パイプパイプ):異常終了時のみ続けてコマンドを実行する
- >:実行結果をファイル出力(標準出力/上書き)
- > filename 2>&1:実行結果(標準出力&標準エラー出力)をファイル出力(同一ファイルへ上書き)
- >>:実行結果をファイル出力(標準出力/追記)
- >> filename 2>&1:実行結果(標準出力&標準エラー出力)をファイル出力(同一ファイルへ追記)
- &(アンパサンド):バックグラウンド実行
- &&(アンパサンドアンパサンド):正常終了時のみ続けてコマンド実行
- #:コメントアウト
- #:変数前方トリム
- #!/bin/bash:使用するシェルを明示する
- $$:プロセスID表示
- $?:コマンドの終了ステータスを表示
- ${!aaa} の動作【変数の中にエクスクラメーションマーク】
- ${XXX[N]}:配列の使用方法(超基本)
- ${XXX[@]}:配列の全要素を表示
- ${#XXX[@]}:配列の要素数を表示
- $IFS:区切り文字
- $XXX:変数の使用方法
- %:変数後方トリム
- += (xxx):配列の要素を追加
- 2>:実行結果をファイル出力(標準エラー出力/上書き)
- 2>>:実行結果をファイル出力(標準エラー出力/追記)
- awkを学ぶならこのページ【お勧めサイト紹介】
- awk -F ‘,’ ‘{print NF}’:列数を確認する
- awk + printfでパラメータを変数で渡す
- basename:指定パスのファイル名だけ表示
- BASH_REMATCH:正規表現な条件文&文字抽出
- break:ループ中止
- cat:ファイル内容を表示
- cat AAA.txt BBB.txt CCC.txt:複数のファイルを行方向に連結
- cat << EOF:複数行表示
- cd:カレントディレクトリを移動する
- cd ~:ホームディレクトリに移動
- continue:次のループ処理に移動
- cp:ファイルをコピーする
- cp -p:タイムスタンプを保持しつつコピーする
- cut -f:該当列(フィールド)を抽出
- date:現在時刻を表示
- date ‘+%Y/%m/%d %H:%M:%S’:現在時刻を「20xx/xx/xx xx:xx:xx」形式で表示
- diff:ファイル差分表示
- dirname:指定パスのディレクトリ名だけ表示
- du:ディレクトリ容量を一覧表示
- du -a:ファイル名を子ディレクトリ含めて再帰的表示〈実用〉
- du -h:ディレクトリ容量を一覧表示(サイズを単位付きで分かりやすく表示)
- du -s:ディレクトリ容量を一覧表示(再帰的でなく指定のみ表示)
- echo:指定文字を表示
- echo -n XXX:改行なしでecho表示させる
- eval:文字列の内容をコマンドとして解釈し実行する
- expr:四則演算、余り
- false:異常応答を返すだけ
- for:ループ処理
- grep:該当行を抽出
- grep -E:該当行を抽出/正規表現利用
- grep -v:該当行を除外
- grepコマンドの終了ステータス
- groups:自身のグループ名を表示
- head -n:先頭から指定行数分出力
- if文【テンプレ用】
- if [ xxx -a xxx ]:if文でのAND判定
- if [ xxx -o xxx ]:if文でのOR判定
- kill -9 (PID):プロセスを強制終了させる
- locate:ファイル/検索
- ls:ファイルリストを表示
- ls -a:隠しファイルを表示
- ls -l:ファイル詳細情報表示のパーミッションについて
- ls -lh:ファイル詳細情報(サイズを単位付きで分かりやすく表示)
- ls -ltr:ファイルリストを逆更新順に表示〈実用〉
- ls -r:ファイルリストを逆順に表示
- ls -t:ファイルリストを更新順に表示
- man:コマンドマニュアルを参照する
- man 7 signal:シグナルの意味を調べる
- mkdir:ディレクトリ作成
- mv:ファイルを移動する
- mv:ファイル移動(複数ファイル)
- passwd:パスワード変更
- paste:複数のファイルを列方向に連結
- printf “%05d\n”, $VAR:0埋め
- printf “%5d\n”, $VAR:数字桁合わせ
- ps:自コンソールで動作中のプロセスを表示
- ps -a:端末で動作中の全てのプロセスを表示
- ps -e:全てのプロセスを表示
- ps -f:完全なフォーマットでプロセスを表示
- ps -u:自ユーザのプロセスを表示
- pwd:現在の位置を表示
- read:実行中にコンソール画面からパラメータを与える
- rm:ファイル削除
- rm -f:ファイル削除/削除直前の確認を行わない
- rmdir:空ディレクトリを削除する
- sedによる置換まとめ【外部リンク】
- sed ‘s/xxx/yyy/g’:置換(基本)
- sed ‘s/ */ /g’:連続スペースを単一スペースに置換
- sed -n ‘2p’:指定行(2行目)を表示
- sed -n ‘2,4p’:指定行(2~4行目)を表示
- sed -n ‘s/bbb/zzz/gp’:変換行のみ表示
- sleep (秒数):指定時間処理を停止(遅延)させる
- sort:ソート
- sort -k:ソート(フィールド指定)
- sort -k:ソート(フィールド指定/複数ソート)
- sort -n:ソート(数値ソート)
- sort -r:ソート(降順表示)
- tac:ファイル内容を逆順で表示(行単位)
- tar:【注意点】オプションはハイフン不要と覚える
- tar cvf:アーカイブファイル(tarファイル)を作成する
- tar tvf:アーカイブファイル(tarファイル)を展開せずに一覧表示
- tar xvf:アーカイブファイル(tarファイル)を展開する
- tar zオプション:アーカイブ+gzip圧縮
- tail -n:末尾から指定行数分出力
- test:評価(比較・判定)コマンド
- time:実行時間を測定
- touch:空ファイルの作成
- touch:ファイルのタイムスタンプ更新
- tr -d “\n”:行末の改行コードを取り除く
- trap (cmd) (PID):シグナル受信時の動作を設定
- true:正常応答を返すだけ
- uniq:重複排除
- unzip:zipファイルを展開する
- wc -l:行数を調べる
- which:コマンドのフルパスを表示する
- while:ループ処理
- while read:コマンド結果を1行ずつ読み込む
- while read:ファイル内容を1行ずつ読み込む
- whoami:自身のユーザー名を表示
- xargs:パイプでコマンドの引数に渡す
- zip:ファイルをzip圧縮する
逆引き
- 1行で複数処理を行う:;(セミコロン)
- 1文字列指定:”(ダブルクォーテーション)
- 1文字列指定(そのまま表示):'(シングルクォーテーション)
- 値を変数として扱う:${!aaa}
- 異常応答を返すだけ:false
- 異常終了時のみ続けてコマンドを実行する:||(パイプパイプ)
- 改行なしでecho表示させる:echo -n XXX
- 該当行を抽出:grep
- 該当行を抽出/正規表現利用:grep -E
- 該当行を除外:grep -v
- 該当列(フィールド)を抽出:cut -f
- 空ファイルの作成:touch
- カレントディレクトリを移動:cd
- カレントディレクトリを表示:pwd
- 行数を調べる:wc -l
- 行末の改行コードを取り除く:tr -d “\n”
- 区切り文字:$IFS
- 現在時刻を表示:date
- 現在時刻を「20xx/xx/xx xx:xx:xx」形式で表示:date ‘+%Y/%m/%d %H:%M:%S’
- 構文やコマンド引数内でコマンド実施:`(バッククォート)
- コマンド結果を1行ずつ読み込む:while read
- コマンドの終了ステータスを表示:$?
- コマンドのフルパスを表示する:which
- コマンドマニュアルを参照する:man
- コメントアウト:#
- シグナル受信時の動作を設定:trap (cmd) (PID)
- シグナルの意味を調べる:man 7 signal
- 自身のユーザー名を表示:whoami
- 自身のグループ名を表示:groups
- 四則演算、余り:expr
- 実行時間を測定:time
- 実行中にコンソール画面からパラメータを与える:read
- 指定行(2行目)を表示:sed -n ‘2p’
- 指定行(2~4行目)を表示:sed -n ‘2,4p’
- 指定時間処理を停止(遅延)させる:sleep (秒数)
- 指定文字を表示:echo
- 条件文:if【テンプレ用】
- 条件文:if文でのAND判定方法:-a
- 条件文:if文でのOR判定方法:-o
- 条件を満たさない事を判定:!
- 使用するシェルを明示する:#!/bin/bash
- 数値比較演算子(等しい):-eq
- 数値比較演算子(異なる):-ne
- 数値比較演算子(より大きい):-gt
- 数値比較演算子(以上):-ge
- 数値比較演算子(より小さい):-lt
- 数値比較演算子(以下):-le
- 正規表現な条件文&文字抽出:BASH_REMATCH
- 正常応答を返すだけ:true
- 正常終了時のみ続けてコマンド実行:&&(アンパサンドアンパサンド)
- 先頭から指定行数分出力:head -n
- 相対パスについて
- ソート:sort
- ソート(降順表示):sort -r
- ソート(数値ソート):sort -n
- ソート(フィールド指定):sort -k
- ソート(フィールド指定/複数ソート):sort -k
- 置換まとめ:sed【外部リンク】
- 置換/基本:sed ‘s/xxx/yyy/g’
- 置換/連続スペース → 単一スペース:sed ‘s/ */ /g’
- 重複排除:uniq
- ディレクトリ作成:mkdir
- ディレクトリ削除(空ディレクトリ):rmdir
- ディレクトリ容量を一覧表示:du
- ディレクトリ容量を一覧表示(サイズを単位付きで分かりやすく表示):du -h
- ディレクトリ容量を一覧表示(再帰的でなく指定のみ表示):du -s
- パイプでコマンドの引数に渡す:xargs
- パスのディレクトリ名だけ表示:dirname
- パスのファイル名だけ表示:basename
- 配列の使用方法(超基本):${XXX[N]}
- 配列の全要素を表示:${XXX[@]}
- 配列の要素を追加:+= (xxx)
- パスワード変更:passwd
- バックグラウンド実行:&(アンパサンド)
- 評価(比較・判定)コマンド:test
- 表示形式/0埋め:printf “%05d\n”, $VAR
- 表示形式/数字桁合わせ:printf “%5d\n”, $VAR
- ファイル/アーカイブ(tar):【注意点】オプションはハイフン不要と覚える
- ファイル/アーカイブ(tar)作成:tar cvf
- ファイル/アーカイブ(tar)展開:tar xvf
- ファイル/アーカイブ(tar)展開せずに一覧表示:tar tvf
- ファイル/アーカイブ(tar)+gzip圧縮:tar zオプション
- ファイル/アーカイブ(zip圧縮)作成:zip
- ファイル/アーカイブ(zip圧縮)展開:unzip
- ファイル/移動:mv
- ファイル/移動(複数ファイル):mv
- ファイル/検索:locate
- ファイル/コピー:cp
- ファイル/コピー(タイムスタンプを保持):cp -p
- ファイル/削除:rm
- ファイル/削除/削除直前の確認を行わない:rm -f
- ファイル/差分表示:diff
- ファイル/実行結果をファイル出力(標準出力/上書き):>
- ファイル/実行結果をファイル出力(標準出力/追記):>>
- ファイル/実行結果をファイル出力(標準エラー出力/上書き):2>
- ファイル/実行結果をファイル出力(標準エラー出力/追記):2>>
- ファイル/実行結果をファイル出力(標準出力&標準エラー出力/上書き):> filename 2>&1
- ファイル/実行結果をファイル出力(標準出力&標準エラー出力/追記):>> filename 2>&1
- ファイル/存在判定:-e
- ファイル/タイムスタンプ更新:touch
- ファイル/内容表示:cat
- ファイル/内容逆順表示(行単位):tac
- ファイル/内容を1行ずつ読み込む:while read
- ファイル/リスト表示:ls
- ファイル/リスト表示/隠しファイルを表示:ls -a
- ファイル/リスト表示/逆順に表示:ls -r
- ファイル/リスト表示/更新順に表示:ls -t
- ファイル/リスト表示/逆更新順に表示〈実用〉:ls -ltr
- ファイル/リスト表示/サイズを単位付きで分かりやすく表示:ls -lh
- ファイル/リスト表示/子ディレクトリ含め再帰的表示〈実用〉:du -a
- ファイル/詳細情報表示/パーミッション:ls -l
- 複数行表示(cat << EOF)
- 複数のファイルを行方向に連結:cat AAA.txt BBB.txt CCC.txt
- 複数のファイルを列方向に連結:paste
- プロセス強制終了:kill -9 (PID)
- プロセス表示/完全フォーマット表示:ps -f
- プロセス表示/自コンソールプロセス:ps
- プロセス表示/自ユーザのプロセスを表示
- プロセス表示/実行中シェルのプロセスID:$$
- プロセス表示/端末動作中プロセス:ps -a
- プロセス表示/全てのプロセス:ps -e
- 変換行のみ表示:sed -n ‘s/bbb/zzz/gp’
- 変数前方トリム:#
- 変数後方トリム:%
- 変数の使用方法:$XXX
- ホームディレクトリに移動:cd ~
- 文字列の内容をコマンドとして解釈し実行する:eval
- 末尾から指定行数分出力:tail -n
- 明示的に「何もしない」:-(コロン)
- 文字列比較演算子(0文字):-z
- 文字列比較演算子(1文字以上):-n
- 文字列比較演算子(等しい):=
- 文字列比較演算子(等しくない):!=
- ループ処理:for
- ループ処理:while
- ループ/中止:break
- ループ/次のループ処理に移動:continue
- 列数を確認する:awk -F ‘,’ ‘{print NF}’