「Shell」の編集履歴(バックアップ)一覧はこちら

Shell」(2007/05/24 (木) 10:09:34) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

シェルプログラムの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と同じ。
シェルプログラムの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 使える演算は、四則演算+剰余と、その他文字列とか論理和・積など。[[参照ページ>http://www.linux.or.jp/JM/html/gnumaniak/man1/expr.1.html]] 小数演算をしたい場合は bc を使う。ただし、こっちは引数ではとってくれないため、 echo を使って流し込む必要がある。 >$ echo "1.1 + 2.2" | bc -l >3.3 *日付の自動表示 これは結構色んなとこでも書いているが、実際使ったから記述。 シェルスクリプト内で日付を入れたものを作りたいときは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と同じ。

表示オプション

横に並べて表示:
変化行の前後のみ表示:
目安箱バナー