だてブログ

ねことテクと趣味のブログ

UNIXシェルスクリプトコマンドブック第3版メモ

シエルの基本機能

  • 変数
    • 変数は変数名=値
    • その変数は「$変数名」で利用
  • リダイレクション
>&m 標準出力をファイルディスクリプタm版に向ける 2>file|標準エラー出力の内容をfileに書き込む
>&- 標準出力を閉じる 2>>file|標準エラー出力の内容をfileに追加
n>file ファイルディスクリプタn版の指す対象への出力をfileに書き込む 2>&1|標準エラー出力を標準出力へ
n>&m ファイルディスクリプタn版の指す出力先をファイルディスクリプタm版のサス対象へ向ける 1<&2|標準出力を標準エラー出力
n<file fileの内容をファイルディスクリプタn版の指す対象の入力とする n<&m|ファイルディスクリプタがm版の指す入力元をファイルでぃクリプタn版の指す対象へ向ける| |n>&-|出力用のファイルディスクリプタn版を閉じる|n<&-|入力用のファイルディスクリプタn版を閉じる
  • 標準出力&エラー出力を同じログへ -> $ command > log 2>&1
    • * ... 0~の任意
    • ? ... 1個の任意
bash 意味 sh
[^0-9] 数字以外 [!0-9]
  • ヒアドキュメント
 << 大文字 内容 大文字  <<- 大文字 内容 大文字  <<- \大文字 内容 大文字  <<- '大文字' 内容 大文字
 内容を標準入力へ  内容を標準入力へ。内容の各行のタブ無視  内容を標準入力へ。内容の内部変数は未展開  内容を標準入力へ。左に同じ
  • パイプ...左側のコマンドの標準出力を受け取ってそのまま右のコマンドの標準入力へ渡す
  • $ コマンド & ... バックで動かす。jobsコマンド(-l)で確認
  • () / {} ... サブシェルで/カレントシェルでグルーピング(同時処理)
  • コマンドヒストリの参照:$history, $!! ... 直前, $!数...数前のコマンド
  • 位置パラメータ
$o シェルスクリプトの名前 $*, $@|スクリプトに指定された引数全て
$n スクリプトに指定された第n引数の値 “$*”|スクリプトに指定された引数全てを一つとして扱う
$# スクリプトに指定された引数の数 “$@”|スクリプトに指定された引数全てをそれぞれ個別に扱う

制御文とtestコマンド

 if 条件 then 真の処理 elif 条件 then 2真の処理 else 偽の処理 fi  for 変数 in リスト do 処理 done for ( ; ; ;) do 処理 done while 条件 do 処理 done
 case 要素 in パターン1 ) 処理;; パターン2 ) 処理;; *) 処理 ;; esac select 変数 in メニューリスト do    commands done until  条件 do 処理 done

シェルの組み込みコマンド

  • コマンド ... カレントシェルでのシェルスクリプトの展開/実行。環境変数やシェル関数の設定を書き込んだスクリプトファイルをカレントシェルに読み込ませ、カレントシェルの環境変数や関数として利用できるようにします。
  • ($ : 明示的に何もしない)
 declare 明示的な変数、関数の宣言 typeset 型セット
 eval  引数をシェルコマンドとして実行。複数の時よく利用。''を使うと少し変化 getopts  オプション処理 (例) while getopts optstring OPTION do case $option in optflag 1) 処理;; optflag 2) 処理;; \? ) 処理 ;; exac done shift `expr $OPTIOND -l`
 exec  カレントシェルの置き換え  export  シェル変数のエクスポート
 wait  環境変数となる  hash  コマンドのハッシュテーブルの操作
 kill  プロセスへのシグナルの送出  let  変数の算術式による数値計算
 local  ローカルの変数の生成  printf  文字列の整形
 pwd  ワーキングディレクトリの表示  read  キーボードからの入力を変数に代入
 readonly  変数の読み出し専用化  set/unset  位置パラメータのセット、変数の値の一覧表示
 shift  位置パラメータの順に移動  trap  シグナルを受けたときの処理
 type  組み込みか外部コマンドかチェック  umask  ファイル作成時のファイルモードのデフォルト決定

変数と関数

  • ${変数名 ; - 要素} ... 変数が定義されていれば中身を、何もなければ'要素'を返す
  • ${変数名 ; ? 要素} ... 何もなければ'要素'を出力。変数あ定義されていれば'要素'を代入
  • ${変数名 ; =要素} ... 何もなければ'要素'を代入する
  • ${変数名 ; + 要素} ... 何もなけば何もしない
  • bashで追加された拡張変数展開
${変数:オフセット:長さ} 変数のオフセットから長さ分を取り出す $?|直前のコマンドの終了コード
${!変数名*} ‘変数名'で始まる全ての変数名を拾う $$|カレントシェルのプロセスID
${#変数} 変数の値の文字数を出力 $!|直前のバックグラウンドジョブのプロセスID
${変数#文字列} 変数の値の先頭から、文字列までを削除 $-|カレントシェルの動作オプション
${変数%文字列} 変数の値の末尾から、文字列までを削除 $*/$@|位置パラメータ全て
${変数/パターン/文字列} 変数のパターンに合致する部分を文字列を置き換え “$*”|位置パラメータを展開しスペースでつなぐ
“$@”|位置パラメータを個別に展開
  • 組み込み変数
HOME ユーザのホームディレクト MAIL|メール受信ファイル、そのファイルにメール追加されると通知
PATH コマンドを検索するサーチパス MAILCHECK|
COPATH cdコマンドのサーチパス MAILPATH|複数のときのMAIL
IFS デフォルトフィールドセパレータ OPTARG|getoptsか利用する変数、オプションに該当する引数の値が代入される
LANG デフォルトランゲージ OPTIND|getoptsか利用する変数、次に処理するオプションの場所を位置パラメータの番号で確保
LC_ALL LC*, LANGの値の全て PS1|シェルのコマンドプロンプト($)
LC_TYPE 文字分数やマルチバイトの大きさ PS2|シェルの2次コマンドプロンプト(>)
SHACCT 設定したファイルにアカウント情報を書き込む TERM|画面を出力する際の端末の種類
SHELL シェルプログラムの実態を絶対パスで表す TZ|タイムゾーン
PPID 親プロセスのプロセスID HISTSIZE|コマンドヒストリを残す個数
PWD HISTFILE|コマンドヒストリを保存しておくファイル名
OLDPWD 一つ前のカレントワーキングディレクト HISTFILESIZE|ヒストファイルに残す最大数
REPLY readコマンドで引数を指定しなかった時、この変数に読み込みの行の値が代入 HOSTNAME|ホスト名
UID ユーザのユーザID PS3|シェルの3次コマンドプロンプト(#$)
GROUPS グループのグループID PS4|シェルの4次コマンドプロンプト(+)
BASH シェルプログラムの実態を絶対パスで表示 IGNOREEOF|何個連続して'Ctrl + d'を入力すればログインシェルを落とすかを決める
RANDOM 任意の数を返す TMOUT|ログイン後設定された秒数、入力がなかったらログインシェルを自動終了
LINENO ログインし絵tから実行したコマンドの個数 FIGNORE|このリスト鬼あるサフィックスを持つファイルは、ファイル保管の対象外にする
HISTCMD 次に実行するコマンドに割当られるヒストリ番号 HOSTFILE|ファイル'/etc/hosts'の代替として利用するファイル名

シェルスクリプトデバッグ

  • sh -x ... 実行するコマンドの内容を表示する
  • sh -v ... 実行はせず、構文チェックだけを行う
  • sh -b ... 次に実行するコマンド行を表示する
  • sh -i ... 対話的モードを処理する

参照:

UNIXシェルスクリプトコマンドブック 第3版 https://www.amazon.co.jp/UNIX%E3%82%B7%E3%82%A7%E3%83%AB%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%83%96%E3%83%83%E3%82%AF-%E7%AC%AC3%E7%89%88-%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%83%96%E3%83%83%E3%82%AF%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA-%E5%B1%B1%E4%B8%8B-%E5%93%B2%E5%85%B8/dp/4797383577