UNIXシェルスクリプト逆引き大全 333の極意

概 要

本書は、4つのUNIX OS(Linux,FreeBSD,Solaris,MacOS X)に対応したシェルスクリプトの逆引き解説書です。文法や機能について丁寧に解説していますので、これからシェルスクリプトを学ぼうとする初心者の方にも、また実用的なシェルスクリプトを作成したいという中級者以上の方にも役立つ一冊です。本書で解説しているサンプルスクリプトはすべてダウンロードすることができるので実際に動作しながら学べます。

著者 中橋一朗
価格 本体2400円(税別)
ISBN 4-7980-0884-2
発売日 2004/09/30
判型 A5
色数 2色
ページ数 464
CD/DVD
対象読者 中級
シリーズ 逆引き大全
表紙イメージ
購入 アマゾンで購入する

※リンク先によっては、販売ページが用意されていないことがあります。 あらかじめご了承ください。

新しいウィンドウで開く 書籍購入のご案内

サポート

サポート情報は以下からご参照下さい。

サポート情報へのリンク

目次

■第1章 シェルスクリプト基本の極意

◆1-1 スクリプトを設計する

001 何故シェルスクリプトを使うのか

002 シェルスクリプトに向いた作業・向かない作業

003 コマンドの使い方を調べる

004 目的に合ったコマンドを探す

◆1-2 スクリプトを作成する

005 スクリプトを作成する

006 スクリプトをコマンドとして実行できるようにする

007 スクリプトを実行する

008 スクリプトをデバッグする

■第2章 コマンド実行の極意

◆2-1 色々な実行方法

009 コマンドを実行する

010 組み込みコマンドと同じ名前の外部コマンドを実行する

011 関数名と同じ名前の組み込みコマンドを実行する

012 空白を含む引数をコマンドに渡す

013 コマンドの実行が成功したかどうかを調べる

014 パイプでつないだ各コマンドの終了コードを調べる

015 コマンドをバックグラウンドで実行する

016 複数のコマンドを続けて実行する

017 コマンドの実行が成功した時だけ、次のコマンドを実行する

018 コマンドがエラーになった時だけ、次のコマンドを実行する

019 ログオフした後もバックグラウンドでの実行を継続する(デーモンとして動作させる)

020 サブシェルを使って実行する

021 グルーピング({ ... })を使って実行する

022 変数の内容をコマンドとして実行する

023 コマンドの実行結果をコマンドとして実行する

024 対話型コマンドを決められた手順通りに動かす

025 コマンドが出力するメッセージの言語を変更する

◆2-2 標準入出力の使い方

026 標準入出力を使う

027 コマンドの実行結果を別のコマンドの入力にする(パイプ)

028 コマンドの実行結果をファイルに書き込む

029 コマンドの実行結果を画面とファイルの両方に出力する(tee)

030 コマンドの実行結果を変数に取り込む(コマンド置換)

031 ファイルの内容をコマンドの入力にする

032 変数の内容をコマンドの入力にする

033 標準入力に渡すデータをスクリプトに埋め込む(ヒアドキュメント)

034 2つ以上のファイルを入力に取るコマンド(diffなど)に、コマンドの実行結果を渡す(bash編)

035 標準入出力を使うオプションのないコマンドで、標準入出力を使う(標準編)

036 標準入出力を使うオプションのないコマンドで、標準入出力を使う(bash編)

037 エラーメッセージをファイルに書き込む

038 エラーメッセージと標準出力のメッセージの両方を取り込む

039 エラーメッセージを表示しないようにする

040 複数のコマンドにわたって標準入出力を切り替えたままにする

◆2-3 関数を使う

041 関数を定義する

042 関数の定義を取り消す

043 関数を呼び出す

044 関数の途中で処理を終え、呼び出し元に戻る

045 関数呼び出しにおいて、引数を受け渡す

046 関数呼び出しにおいて、結果を受け渡す

047 関数内でローカル変数を使う

048 再帰処理を行う

049 別のファイル中に定義した関数をスクリプトに読み込む

■第3章 変数・文字列の極意

◆3-1 変数を使う

050 変数とは何か

051 シェル変数を使う

052 環境変数を使う

053 変数の定義を取り消す

054 スクリプトや関数に与えられた引数を受け取る

055 「$*」と「$@」の違い

056 変数の内容をファイルに書き込む

057 ファイルの内容を変数に読み込む

058 変数が定義されているかどうかを調べる

059 変数が定義されていない場合、デフォルトの値を使う

060 変数が定義されていない場合、エラーメッセージを表示して終了する

061 環境変数を一時的に変更する

062 初期設定ファイルの内容を一度に読み込み、変数にセットする(初級編)

063 初期設定ファイルの内容を一度に読み込み、変数にセットする(上級編)

064 変数の値を書き換えられないようにする

◆3-2 文字列を扱う

065 文字列を変数に代入する

066 単語の扱い

067 ""...""と'...'の違い"

068 文字列の中に変数の値を展開する

069 複数行に渡る文字列を書く

070 メタキャラクタの使い方

071 制御文字(改行・タブなど)を含む文字列を作成する

072 入れ子になった文字列

073 文字列を比較する

074 文字列のn番目の単語を取り出す

075 文字列のm文字目からn文字目までを取り出す(標準編)

076 文字列のm文字目からn文字目までを取り出す(bash編)

077 文字列に別の文字列が含まれているかどうかを調べる(検索する)(grep編)

078 文字列に別の文字列が含まれているかどうかを調べる(検索する)(expr編)

079 文字列の一部を置換する(標準編)

080 文字列の一部を置換する(bash編)

081 文字列から正規表現に一致する部分を抜き出す

082 文字列の大文字・小文字を変換する

083 文字列の長さを調べる

084 文字列を指定した区切り文字で分割する(シェル変数IFS)

◆3-3 その他のデータを扱う

085 整数の演算を行う(標準編)

086 整数の演算を行う(bash編)

087 数値の比較を行う

088 乱数を得る(標準編)

089 乱数を得る(bash編)

090 文字列が整数かどうかを調べる

091 変数を整数変数として宣言する(bash編)

092 浮動小数点の演算を行う

093 日付や時刻を指定した書式で得る

094 日付や時刻の計算をする(Linux/GNU date編)

095 日付や時刻の計算をする(FreeBSD編)

096 時刻を指定したタイムゾーンで表記する

097 配列を扱う(標準編)

098 配列を扱う(bash編)

099 配列変数の要素数を調べる(bash編)

100 配列変数に一度に値をセットする(bash編)

101 配列変数のすべての要素を一度に表示する(bash編)

102 辞書(連想配列)を扱う

103 配列のデータを整列させる(ソートする)(bash編)

104 片方の配列にはあって、もう片方にはないデータを見つける(bash編)

■第4章 制御構文の極意

◆4-1 制御構文の基本

105 条件に応じて実行を分岐する(if~then~else~fi)

106 if文にたくさんの条件を書く(elif)

107 if文の条件を逆にする

108 条件が成立している間、繰り返す(while~do~done)

109 条件が成立するまでの間、繰り返す(until~do~done)

110 いくつかの項目について繰り返す(for~in~do~done)

111 文字列のパターンに応じて分岐する(case~in~esac)

112 次の繰り返しに進む(continue)

113 繰り返しを中断して(ループを抜けて)次の処理に進む(break)

◆4-2 様々な繰り返し処理

114 引数に与えられた項目に対して繰り返し処理を行う

115 コマンドの出力結果に対して繰り返し処理をする

116 ファイル名の一覧に対して繰り返し処理をする

117 繰り返し処理をバックグラウンドで行う

118 繰り返し処理の入出力をリダイレクトする

119 繰り返し処理の入出力をパイプに流す

■第5章 ファイル操作の極意

◆5-1 ファイル名の操作

120 パス名からディレクトリ名を取り出す

121 パス名からファイル名を取り出す

122 ファイル名から拡張子を取り除く(拡張子が決まっている場合)

123 ファイル名から拡張子を取り除く(拡張子が不定の場合)

124 ファイル名の拡張子を調べる

125 ファイル名の拡張子を変更する

126 相対パスから絶対パスを得る

127 絶対パスから相対パスを得る

128 正規表現を使ってファイル名を変更する(sed編)

129 正規表現を使ってファイル名を変更する(ruby編)

130 「-」で始まるファイル名の扱い

131 「*」や「?」などの記号を含むファイル名の扱い

◆5-2 ファイルの作成・変更

132 空のファイルを作成する

133 ファイルの更新日付を変更する

134 深いディレクトリを一気に作成する

135 所有者や権限を指定してファイルをコピー(インストール)する

136 一時ファイル(テンポラリファイル)を作成する

137 ファイルの所有者を変更する

138 ファイルのアクセス権を設定する

139 ファイルが新規に作成される場合の、デフォルトのアクセス権を設定する

140 所有権やアクセス権、更新日付などを保ったままファイルをコピーする

141 アクセス権等に加え、シンボリックリンクを保ったままファイルをコピーする

142 ファイルやディレクトリのバックアップを作成する

143 tarでバックアップしたファイルを展開する

144 条件に合うファイルだけをバックアップする

145 cpioでバックアップしたファイルを展開する

146 指定した容量のファイルを作成する

◆5-3 ファイルの状態を調べる

147 ファイルが存在するかどうかを調べる

148 ディレクトリが存在するかどうかを調べる

149 ファイルの大きさを調べる

150 ディレクトリの大きさ(ディスク使用量)を調べる

151 指定されたパスがファイルなのかディレクトリなのかを調べる

152 ファイルの種類を調べる

153 ファイルの更新日付を調べる(標準編)

154 ファイルの更新日付を調べる(Linux編)

155 2つのファイルの新旧を比較する

156 ファイルがシンボリック・リンクかどうかを調べる

157 ファイルの所有者を調べる

158 ファイルのアクセス権を調べる

159 ファイルのiノード番号を調べる

160 ホームディレクトリの場所を調べる

161 自分以外のユーザーのホームディレクトリの場所を調べる

162 カレント・ディレクトリを調べる

163 テンポラリ・ディレクトリ(一時ファイルを作成するディレクトリ)の場所を調べる

164 コマンドのある場所を調べる

◆5-4 ファイルの検索

165 ディレクトリ内のファイルの一覧を得る

166 ファイルの内容で検索する

167 ファイル名から検索する

168 パターン(ワイルドカード)に一致する名前のファイルを探す

169 正規表現に一致する名前のファイルを探す

170 更新日付からファイルを検索する(初級編)

171 更新日付からファイルを検索する(上級編)

172 検索で見つかったファイルに対してコマンドを実行する

173 複雑な条件でファイルを検索する

◆5-5 テキストファイルの操作

174 テキストファイルの内容を検索する

175 テキストファイルの内容を検索置換する

176 複数のテキストファイルを連結する

177 テキストファイルを一定の大きさに分割する

178 テキストファイルの最初のn行を取り出す

179 テキストファイルの最後のn行を取り出す

180 テキストファイルのn行目からm行目を取り出す

181 テキストファイルをソート(並べ替え)する

182 テキストファイルを特定のフィールドでソート(並べ替え)する

183 重複する行だけを抽出する

184 重複する行を削除する

185 テキストファイルから特定のフィールドを取り出す(例えば、/etc/passwdからログイン名だけを取り出す)

186 テキストファイルに新たなフィールドを追加する

187 2つのテキストファイルの違いを調べる

188 テキストファイルの行数を調べる

189 テキストファイルの文字数を調べる

190 文字コードを変換する

191 タブをスペースに変換する

192 スペースをタブに変換する

193 テキストを1行ずつ読み込む

194 テキストファイルを配列に読み込む(bash編)

195 各行の一部の桁だけを取り出す

196 CSV/TSV形式のファイルを処理する

197 テキストファイルをエディタで開く

198 長いテキストファイルを1ページずつ表示する

◆5-6 その他のファイル操作

199 バイナリファイルを一定の大きさに分割する

200 複数のバイナリファイルを連結する

201 バイナリファイルの一部を取り出す

202 バイナリファイルの一部を書き換える

203 バイナリファイルに含まれる文字列を抽出する

204 2つのバイナリファイルの違いを調べる

205 ファイルの後ろに0を付け加えて、指定したサイズに拡大する

206 ファイルのチェックサム(ハッシュ値)を得る

207 ファイルをアーカイブする・圧縮する

208 ファイルを展開する(解凍する)

209 ファイルを暗号化する

210 ファイルを複号する(暗号化を解除する)

211 カレントディレクトリを一時的に変更する

■第6章 ユーザーインタフェースの極意

◆6-1 コマンドラインでのユーザーインタフェース

212 コマンドラインオプションを解析する

213 自分自身のファイル名に応じてスクリプトの動作を変える

214 メッセージを画面に表示する

215 書式を設定してメッセージを表示する

216 標準エラー出力にメッセージを出力する

217 最後に改行せずにメッセージを表示する

218 1行入力を得る

219 Yes/Noを問い合わせる

220 複数の項目から選択する(bash編)

221 端末から1文字だけ読み込む

222 画面をクリアする

223 カーソル位置などを制御する(tput)

224 文字の色を変える

225 タイプした文字を画面に表示しないようにする(エコーバックを禁止する)

226 端末をリセットする(文字色やエコーバックの状態を標準に戻す)

227 実行中のスクリプトの現在の行番号を調べる(bash編)

228 シェルが対話モードかどうかを調べる(標準入力が端末かどうかを調べる)

229 標準出力が端末かどうかを調べる

◆6-2 テキストダイアログを使ったユーザーインタフェース

230 端末にダイアログボックスを表示する

231 テキストダイアログでメッセージを表示する

232 テキストダイアログでYes/Noを問い合わせる

233 テキストダイアログで1行入力を得る

234 テキストダイアログで複数の項目から選択する

235 テキストダイアログでファイルを選択する

◆6-3 GUIのユーザーインタフェース

236 X Window Systemを使用してダイアログボックスを表示する

237 GUIでメッセージを表示する

238 GUIでYes/Noを問い合わせる

239 GUIで1行入力を得る

240 GUIで長いテキストを編集する

241 GUIで複数の項目から選択する

242 GUIでファイルを選択する

■第7章 プロセス管理の極意

◆7-1 プロセスを操作する

243 特定のコマンドが実行されているかどうかを調べる

244 コマンド実行の所要時間を調べる

245 プロセスを強制終了させる

246 サーバ・プロセスを再起動する

247 特定のコマンドのプロセスを全て終了させる

248 プロセスが終了するのを待つ

249 プロセス優先度を指定してコマンドを実行する

250 実行中のコマンドのプロセス優先度を変更する

251 スクリプトの実行を一時中断する

252 スクリプトが中断された時に後始末をする

253 スクリプトを中断できないようにする

254 スクリプトが使用する計算機資源(メモリ使用量など)を制限する

255 計算機資源の制限状況(ulimitの設定値)を表示する

◆7-2 プロセス間通信

256 スクリプトの終了コードを指定する

257 名前付パイプを使って他のプロセスと通信する

258 シグナルを使って他のプロセスと通信する

259 ロックファイルを用いて排他制御を行う

■第8章 ネットワーク操作の極意

◆8-1 LANを利用する

260 リモートホストでコマンドを実行する

261 標準入出力を使ってリモートホストにデータを送る・受け取る

262 リモートホストのHDDにファイルをバックアップする

263 リモートホストのCD-Rにデータを書き込む

264 scpでファイルを転送する

265 リモートホストが動作しているかどうかを監視する

266 IPアドレスからホスト名を調べる

267 ホスト名からIPアドレスを調べる

268 自分のホストの名前を調べる

269 自分のホストの完全修飾名(ドメイン名を含んだホスト名)を調べる

270 自分のホストのIPアドレスを調べる

271 Windowsマシンの共有フォルダにファイルをアップロードする

272 Windowsマシンの共有フォルダからファイルをダウンロードする

273 TCP/UDPソケットにアクセスする

274 TCP/UDPソケットを作成する(待ち受けする)

275 簡単なネットワーク・サーバを作成する

◆8-2 インターネットを利用する

276 webやftpでファイルをダウンロードする

277 ftpでファイルをアップロードする

278 未読のメールがあるかどうかを調べる

279 電子メールを送信する

280 電子メールを受信し、スクリプトで処理する

281 添付ファイル付きの電子メールを送信する

282 電子メールから添付ファイルを取り出す

283 CGIスクリプトを書く

■第9章 システム管理の極意

◆9-1 セキュリティー

284 suコマンドで管理者権限を得る

285 sudoコマンドで管理者権限を得る

286 パスワードを入力せずに管理者権限を得る

287 自分がrootかどうかを調べる

288 自分のユーザー名や所属グループを調べる

289 スクリプトを特定のユーザー以外は実行できないようにする

290 ファイルの中身を他のユーザーが読めないようにする

291 ディレクトリへのアクセスは許可するが、ファイルの一覧は許可しない

292 ディレクトリに新規ファイルを作成することは許可するが、一覧は許可しない

◆9-2 システムを管理する

293 スクリプトを定期的に実行する

294 コマンドを決められた時刻に一回だけ実行する

295 atコマンドで実行待ちになっている項目を表示する

296 atコマンドで実行待ちになっている項目を取り消す

297 起動時・シャットダウン時にスクリプトを実行する(RedHat系Linux編)

298 起動時・シャットダウン時にスクリプトを実行する(Debian編)

299 起動時・シャットダウン時にスクリプトを実行する(FreeBSD編)

300 起動時・シャットダウン時にスクリプトを実行する(Solaris編)

301 起動時にスクリプトを実行する(Mac OS X編)

302 シャットダウン時にスクリプトを実行する(Mac OS X編)

303 ログイン時にスクリプトを実行する(テキスト端末編)

304 ログイン時にスクリプトを実行する(X編)

305 ログアウト時にスクリプトを実行する(テキスト端末・標準sh編)

306 ログアウト時にスクリプトを実行する(テキスト端末・bash編)

307 ログアウト時にスクリプトを実行する(X編)

308 ログイン時・ログアウト時にスクリプトを実行する(Mac OS X編)

309 システムログを監視して、条件に応じてコマンドを実行する

310 メッセージをシステムログに記録する(syslogに送る)

311 全ての端末にメッセージを表示する

312 古いログファイルを整理する

313 OSの種類やバージョンを調べる

314 ユーザーを登録する(Linux編)

315 ユーザーを登録する(FreeBSD編)

316 ユーザーを登録する(Solaris編)

317 ユーザーを削除する

318 ユーザーを登録・削除する(Mac OS X編)

319 ユーザーのパスワードを変更する

320 グループを登録・削除する

◆9-3 ハードウェアを管理する

321 システムをシャットダウン・再起動する

322 ディスクの空き容量を調べる

■第10章 マルチメディアの極意

◆10-1 画像を操作する

323 画像を表示する

324 画像の形式を変換する

325 画像のサイズを変更する

326 画像の一部を切り取る

327 画像の情報を得る

328 シェルスクリプトで画像を作成する

◆10-2 音声・動画を操作する

329 動画を再生する

330 音声を再生する

331 動画ファイルの形式を変換する

332 音声ファイルの形式を変換する

333 動画・音声の情報を得る

■付録

付録A 簡易リファレンス

A.1 シェルの特殊変数

A.2 シェルの定義済み変数

A.3 シェルのワイルドカード

A.4 シェルの変数展開

A.5 シェルの制御構文

A.6 正規表現リファレンス

付録B 各ソフトウェアのインストール方法

B.1 GNU Coreutils

B.2 dialog

B.3 fetchmail

B.4 GNU Findutils

B.5 GnuPG

B.6 mimekit

B.7 mktemp

B.8 mpack

B.9 mplayer

B.10 netcat

B.11 nkf

B.12 ucspi-tcp

B.13 Xdialog

B.14 wget

PR

秀和システム