| ページ一覧 | ブログ | twitter |  書式 | 書式(表) |

MyMemoWiki

「シェルプログラミング」の版間の差分

提供: MyMemoWiki
ナビゲーションに移動 検索に移動
 
(同じ利用者による、間の12版が非表示)
1行目: 1行目:
==シェルプログラミング==
+
| [[Programming C]] | [[Linux]] | [[Cygwin]] | [[Linux コマンド]] |
[[Programming C]] | [[Linux]] | [[Cygwin]] |  
+
==[[シェルプログラミング]]==
  
 
これらの本からの覚書。
 
これらの本からの覚書。
6行目: 6行目:
 
{{amazon|4873112672}}
 
{{amazon|4873112672}}
  
==基本==
+
==ソフトウェアツールの開発理念==
===[シェルプログラミング 基本] [基本]===
+
[https://www.amazon.co.jp/exec/obidos/ASIN/4873112672/typea09-22 詳解シェルスクリプト] イントロダクション
*[シェルプログラミング 基本] [基本]
+
*一つのことをしっかりやる
===[シェルプログラミング 変数] [変数]===
+
*バイナリデータではなく文字列を扱う
*[シェルプログラミング 変数] [変数]
+
*正規表現を使う
===[シェルプログラミング 条件] [条件]===
+
*特に指定がなければ標準入力と標準出力を使う
*[シェルプログラミング 条件] [条件]
+
*余計な出力は行わない
===[シェルプログラミング 制御] [制御]===
+
*入力データと同じ形式で処理結果を出力する
*[シェルプログラミング 制御] [制御]
+
*一つのプログラムで全てをこなそうと思わない
===[シェルプログラミング リスト] [リスト]===
+
*ツールをどんどん作る
*[シェルプログラミング リスト] [リスト]
 
===[シェルプログラミング 関数] [関数]===
 
*[シェルプログラミング 関数] [関数]
 
===[シェルプログラミング コマンド] [コマンド]===
 
*[シェルプログラミング コマンド] [コマンド]
 
  
 +
==[[シェルプログラミング 基本|基本]]==
 +
*[[シェルプログラミング 基本]]
  
==Tips==
+
===リダイレクトとパイプ===
 +
* < を使って標準入力を変更する
 +
* > を使って標準出力を変更する
 +
* >> を使ってファイルに追記する
 +
* | を使ってパイプラインを作る
 +
 
 +
===特殊ファイル===
 +
====/dev/null====
 +
*ビットバケツ(bit bucket) と呼ばれる
 +
*このファイルに送られるデータは全て削除される
 +
*データを読み込むと、常にファイル終端文字が返される
 +
====/dev/tty====
 +
*プログラムが実行された端末にリダイレクトされる
 +
*パスワードなど必ず手入力して欲しい場合などに便利
 +
===文字列の検索と置換===
 +
*当初から存在していた、grep(POSIXのBRE:Basic Regular Expressionsに対応)、拡張された、egrep(ERE:Extended Regular Expressionsに対応)、正規表現に対応しない代わりに、高速な固定検索をおこなう、fgrepが、歴史的な経緯で存在しているが、1992年のPOSIX標準で、grepに統合され、オプションで切り替えられるようになった(現実的には削除されずに残っている)
 +
====[[正規表現]]====
 +
 
 +
==[[シェルプログラミング 変数|変数]]==
 +
*[[シェルプログラミング 変数|変数]]
 +
==[[シェルプログラミング 条件|条件]]==
 +
*[[シェルプログラミング 条件|条件]]
 +
==[[シェルプログラミング 制御|制御]]==
 +
*[[シェルプログラミング 制御|制御]]
 +
==[[シェルプログラミング リスト|リスト]]==
 +
*[[シェルプログラミング リスト|リスト]]
 +
==[[シェルプログラミング 関数|関数]]==
 +
*[[シェルプログラミング 関数|関数]]
 +
==[[シェルプログラミング コマンド|コマンド]]==
 +
*[[シェルプログラミング コマンド|コマンド]]
 +
 
 +
==[[Tips]]==
 +
===grepで対象のファイル数が多く argument list too longとなる場合===
 +
*NG
 +
<pre>
 +
$ grep "hoge" *
 +
-bash: /usr/bin/grep: Argument list too long
 +
</pre>
 +
*書き換え
 +
<pre>
 +
$ echo * | xargs grep "hoge"
 +
</pre>
 
===複数ファイルを処理===
 
===複数ファイルを処理===
 
*ディレクトリのファイルをまとめて解凍
 
*ディレクトリのファイルをまとめて解凍
41行目: 79行目:
  
 
----
 
----
*Programming C
+
*[[Programming C]]
 
*{{ref shellprog.zip}}
 
*{{ref shellprog.zip}}

2020年10月29日 (木) 14:09時点における最新版

| Programming C | Linux | Cygwin | Linux コマンド |

シェルプログラミング

これらの本からの覚書。

ソフトウェアツールの開発理念

詳解シェルスクリプト イントロダクション

  • 一つのことをしっかりやる
  • バイナリデータではなく文字列を扱う
  • 正規表現を使う
  • 特に指定がなければ標準入力と標準出力を使う
  • 余計な出力は行わない
  • 入力データと同じ形式で処理結果を出力する
  • 一つのプログラムで全てをこなそうと思わない
  • ツールをどんどん作る

基本

リダイレクトとパイプ

  • < を使って標準入力を変更する
  • > を使って標準出力を変更する
  • >> を使ってファイルに追記する
  • | を使ってパイプラインを作る

特殊ファイル

/dev/null

  • ビットバケツ(bit bucket) と呼ばれる
  • このファイルに送られるデータは全て削除される
  • データを読み込むと、常にファイル終端文字が返される

/dev/tty

  • プログラムが実行された端末にリダイレクトされる
  • パスワードなど必ず手入力して欲しい場合などに便利

文字列の検索と置換

  • 当初から存在していた、grep(POSIXのBRE:Basic Regular Expressionsに対応)、拡張された、egrep(ERE:Extended Regular Expressionsに対応)、正規表現に対応しない代わりに、高速な固定検索をおこなう、fgrepが、歴史的な経緯で存在しているが、1992年のPOSIX標準で、grepに統合され、オプションで切り替えられるようになった(現実的には削除されずに残っている)

正規表現

変数

条件

制御

リスト

関数

コマンド

Tips

grepで対象のファイル数が多く argument list too longとなる場合

  • NG
$ grep "hoge" *
-bash: /usr/bin/grep: Argument list too long
  • 書き換え
$ echo * | xargs grep "hoge"

複数ファイルを処理

  • ディレクトリのファイルをまとめて解凍
#!/bin/sh
for f in `ls *.zip`
do
unzip $f
done

日付

書式

+で書式設定
# date +%Y%m%d%H%M%S
20130817093545
スクリプト中で使う
sufix=`date +%Y%m%d%H%M%S`
echo $sufix