「Shell」の編集履歴(バックアップ)一覧に戻る
Shell」を以下のとおり復元します。
シェルプログラムのTips&サンプルプログラム
#contents

*拡張子の一括変更
>#!/bin/sh
>
>while [ -n $1 ]; do  #第一引数$1がゼロでない(-n)なら実行
> ${1/pnm/png}       #pnmをpngで置換する
> shift              #引数をずらす
>done                 #終了

>for old in *.pnm; do new=`echo $old | sed "s/pnm/png/g"`; mv $old $new; done 

*bashでログインしても.bashrcが反映されない
.bash_profileで設定する必要がある。(詳細はbashのマニュアル)
具体的には、.bash_profile内に
> . ~/.bashrc
を(もしくは同様の記述、source .bashrcなどを)書く。

*シェル中で数値を扱いたい
普通に宣言するだけではシェルスクリプトは全て文字として判断する。例えば、
>$ a=1
>$ b=$a+1
>$ echo $b
>1+1
みたいになる。これを解決するためには、declare -iで宣言してやる必要がある。[[参照ページ>http://www.ne.jp/asahi/yokohama/juk/bash-script.html]]
>$ declare -i a=1 b=0
>$ b=$a+1
>$ echo $b
>2

*整数・小数演算
もっとも有名なのは expr で、これは引数に演算式を与えると演算してくれる。
>$ expr 1 + 1
>2
ただし、expr は、演算子の前後にスペースを入れないとエラーになる(スペース区切りで構文解析をしているため)。
>$ expr 1+1
>1+1
使える演算は、四則演算+剰余と、その他文字列とか論理和・積など。(&html(http://www.linux.or.jp/JM/html/gnumaniak/man1/expr.1.html)参照)


*日付の自動表示
これは結構色んなとこでも書いているが、実際使ったから記述。
シェルスクリプト内で日付を入れたものを作りたいときはdateコマンドを利用する。
例えば、
>mkdir `date +%Y%m%d`
とかすると今日の年月日のフォルダを作ることができる。
よく使う実験用シェルスクリプトとかに入れておくと勝手に日付管理してくれて便利。

*複数文字列のor指定
結構記述がなかったのでメモ。
例えば、 file_a.txt file_b.txt の両方を指定したい場合は
>ls file_[ab].txt
みたいに書く。では、file_one.txt file_two.txtの両方を指定する場合はどうするか。
>ls file_{one,two}.txt
みたいに{}を使って書く。
ただし、[]は好意的に(あれば含めるし、なければ無視)とってくれるが、{}は両方必ず指定される。つまり、上の例では file_b.txt がなくてもエラーはでないが、 file_two.txt がないと
>ls: file_two.txt: そのようなファイルやディレクトリはありません
と怒られる。

*第n行を表示する
ファイルの第N行目だけ、もしくはM-N行目を表示したいってとき、ありますよね?
>sed -ne Np hoge
で、N行目だけ出る。-nはpで出力しなければ出力しないという引数で、sedはN行目だけマッチしてpで出力する。他の行は無視される。

同様に、
>sed -ne M,Np hoge
でM-N行目が出力される。

*連番を表示(seq)
>seq M N
でMからNまでが連番で出力される。

1-10みたいなときに桁数を揃えたい場合は
>seq -w 1 10
にすると 01 02 03 04 05 06 07 08 09 10 となる。

また、
>seq -f %03g 1 5
みたいにすると 001 002 003 004 005 みたいに形式を揃えることができる。デフォルトは %g を使用。基本はprintfと同じ。

復元してよろしいですか?

目安箱バナー