シェルスクリプト総合 その6
■ このスレッドは過去ログ倉庫に格納されています
0001うはwwwww
2006/03/26(日) 00:56:22スクリプトのお勉強・自慢・腕試しなどにどうぞ。
まずは注意点、リンク、地鎮祭など(>>1-6くらい)をご覧ください。
□お約束
・特記なき場合はBourne Shell(/bin/sh)がデフォルトです。
bash/zsh/ksh/ashなどに依存する場合は明示しましょう。
Linuxユーザは/bin/shの正体がbashなので特に注意。
・csh/tcshのシェルスクリプトは推奨されません。
(理由は「csh-whynot」でググれ)
・UNIXにはシェルスクリプトに便利な小さなコマンドがいろいろあります。
manや参考リンクを見ましょう。
aproposないしはman -kでそれらしい単語による簡単な検索もできます。
・シェルスクリプトのことをシェルってゆーな
・シェルで使えるワイルドカード等は正規表現ではありません。
正規表現の話題はスレ違い(正規表現スレへ)
□初心者へのアドバイス:
・適した道具を判断するのも頭の重要な使い方。シェルスクリプトよりも
RubyやPerlの方が適した仕事には素直にそちらを使いましょう。
・知らないコマンドが出てきたらmanを引きましょう。
・思い通りに動かないときは、まずは sh -x でトレースしましょう。
0407名無しさん@お腹いっぱい。
2006/05/14(日) 13:56:39とはいえ、「任意の日からN日後の日付」「任意の日どうしの間隔」
「任意の日の曜日」あたりを調べるのは確かに頭痛いな。
GNU date, env TZ=... dateを使うのが定番だろうけど、どっちもイマイチな気がする。
修正ユリウス日をうまく使ってすっぱりと実装できそうなんだが。
0408407
2006/05/14(日) 15:03:08bash厨は$(())に置き換えたいだろうが、自分のマシンで勝手にやってくれ。
to_mjd() {
if [ "$2" -lt 3 ]; then
yy=`expr "$1" - 1`; mm=`expr "$2" + 12`; dd=$3
else
yy="$1"; mm="$2"; dd=$3
fi
expr $yy \* 1461 / 4 + $yy / 400 - $yy / 100 + \( 3059 \* $mm - 6118 \) / 100 + $dd - 678912
}
dayofweek() {
# Sun=0, Mon=1, Tue=2, Wed=3, Thu=4, Fri=5, Sat=6
expr \( "$1" + 3 \) % 7
}
from_mjd() {
yy=`expr \( $mjd \* 100 - 1507820 \) / 36525`
m2=`expr $yy \* 1461 / 4`
mm=`expr \( \( $mjd - $m2 \) \* 10000 - 149561000 \) / 306001`
d2=`expr $mm \* 306001 / 10000`
dd=`expr $mjd - 14956 - $m2 - $d2`
if [ $mm -gt 13 ]; then
yy=`expr $yy + 1901`; mm=`expr $mm - 13`
else
yy=`expr $yy + 1900`; mm=`expr $mm - 1`
fi
echo "$yy $mm $dd"
}
mjd=`to_mjd 2004 1 1`
echo "mjd: $mjd"# => 53005
echo "dayofweek: `dayofweek $mjd`"# => 4 (Thu)
echo "gregorian: `from_mjd $mjd`"# => 2004 1 1
0409402
2006/05/14(日) 16:45:14printf便利ですね。
caseも勉強になりました
エロ画像の生理に使います。
0410名無しさん@お腹いっぱい。
2006/05/14(日) 18:21:33どうでもいいことだが mjd って何の略?
「マジで」としか変換できないバカに教えてくれ。
0411名無しさん@お腹いっぱい。
2006/05/14(日) 18:22:01だったらrenameの使い方も覚えとけ。
0412名無しさん@お腹いっぱい。
2006/05/14(日) 18:23:55Modified Julian Day
0413407
2006/05/14(日) 22:06:16行数制限にひっかかったので、いろいろやってるうちに消してしまった… スマヌ
■ このスレッドは過去ログ倉庫に格納されています