シェルスクリプト総合 その16
レス数が1000を超えています。これ以上書き込みはできません。
0001名無しさん@お腹いっぱい。
2010/02/20(土) 14:10:05スクリプトのお勉強・自慢・腕試しなどにどうぞ。
まずは注意点、リンク、地鎮祭など(>>1-6くらい)をご覧ください。
□お約束
・特記なき場合はBourne Shell(/bin/sh)がデフォルトです。
bash/zsh/ksh/ashなどに依存する場合は明示しましょう。
Linuxユーザは/bin/shの正体がbashなので特に注意。
FreeBSDユーザは/bin/shの正体がashなので注意。
v7 shに一番近くて、現役のshは、OpenSolaris由来のheirloom sh。
http://src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/cmd/sh/
http://heirloom.sourceforge.net/sh.html
・csh/tcshのシェルスクリプトは推奨されません。
(理由は「csh-whynot」でググれ)
・UNIXにはシェルスクリプトに便利な小さなコマンドがいろいろあります。
manや参考リンクを見ましょう。
aproposないしはman -kでそれらしい単語による簡単な検索もできます。
・シェルスクリプトのことをシェルってゆーな
・シェルで使えるワイルドカード等は正規表現ではありません。
正規表現の話題はスレ違い(正規表現スレへ)
□初心者へのアドバイス:
・適した道具を判断するのも頭の重要な使い方。シェルスクリプトよりも
RubyやPerlの方が適した仕事には素直にそちらを使いましょう。
・知らないコマンドが出てきたらmanを引きましょう。
・思い通りに動かないときは、まずは sh -x でトレースしましょう。
前スレ
シェルスクリプト総合 その15
http://pc12.2ch.net/test/read.cgi/unix/1246408968/l50
0969名無しさん@お腹いっぱい。
2010/11/05(金) 12:07:10for i in host1 host2 host3; do ssh $i /bin/shutdown; done
0970名無しさん@お腹いっぱい。
2010/11/05(金) 12:11:33それだと host1 が落ちてた時に host2 移行が再起動できません。
あと、shutdown で、再起動できるんですか?
0971名無しさん@お腹いっぱい。
2010/11/05(金) 12:29:13for i in host1 host2 host3; do ssh $i /bin/shutdown& done
0972名無しさん@お腹いっぱい。
2010/11/05(金) 13:13:170973名無しさん@お腹いっぱい。
2010/11/05(金) 13:21:570974名無しさん@お腹いっぱい。
2010/11/17(水) 02:00:10date 20000101
のYMD形式は可能だけど
date 20000101000000
のYMDHMSになるとエラーになるので困っています。
なにかオプションが必要ですか?
0975名無しさん@お腹いっぱい。
2010/11/17(水) 06:30:38それ、ksh関係ない。dateコマンドの話。
で、そもそも指定が間違ってる。
date mmddHHMMYYYY.SS が正しい。
2000年01月01日00時00分00秒なら、
date 010100002000.00
0976名無しさん@お腹いっぱい。
2010/11/17(水) 07:13:58まさか.SSとは…いらないよってオプションはないんですかね?
なんかスッキリしないなぁ…
0977名無しさん@お腹いっぱい。
2010/11/17(水) 07:18:120978名無しさん@お腹いっぱい。
2010/11/17(水) 07:30:100979名無しさん@お腹いっぱい。
2010/11/17(水) 07:42:24質問のように「date 20000101」とか実行したら「設定」される。
「表示させたい」って書いてあるのは、設定した結果、以降OS時刻として
その時刻で表示させたいという意味だろ。
0980名無しさん@お腹いっぱい。
2010/11/17(水) 08:13:22バックグランドと解釈されてしまいます。
\でエスケープしてもダメだったのですが、
どうすれば渡せるのでしょうか?
0981名無しさん@お腹いっぱい。
2010/11/17(水) 10:46:17自分の環境では出来るな。
$ cat hoge.sh
#!/bin/sh
echo $*
$ ./hoge.sh ¥&
&
$
0982974
2010/11/17(水) 10:46:18実際に行いたい動作は
引数として渡されたYMDHMS形式の文字列が日時として妥当であるかチェックする
です
実装として
date "+%Y%m%d%H%M%S" -d 引数文字列
の結果と引数文字列が一致するかチェックするロジックを組みました。
ですが肝心の
date -d 20000101000000
がエラーを吐いてしまうため上手く行かず…
(-dは記述が漏れてました。すいません)
何か方法はありませんかね?
0983名無しさん@お腹いっぱい。
2010/11/17(水) 11:35:26date -d で食える書式が書いてある。
0984名無しさん@お腹いっぱい。
2010/11/17(水) 11:37:16perlか何かで書いた方がいいんじゃね。
0985名無しさん@お腹いっぱい。
2010/11/17(水) 11:54:23GNU dateってことは bash限定でいいよな。
ほらよ
↓
TIME=20000101000000
date +%Y%m%d%H%M%S -d "${TIME:0:8} ${TIME:8:2}:${TIME:10:2}:${TIME:12:2}"
0986名無しさん@お腹いっぱい。
2010/11/17(水) 12:03:370987名無しさん@お腹いっぱい。
2010/11/17(水) 12:31:22やはりロジック上でフォーマット変換をしないといけないようですね
フォーマット変換すれば実現可能なのはわかっていたのですが、直感的にdateの使い方で対処出来ると思っていました
ご提示頂いたスクリプトも参考に対処したいと思います
0988名無しさん@お腹いっぱい。
2010/11/17(水) 18:47:42BSDのdateなら楽勝なのに
0989名無しさん@お腹いっぱい。
2010/11/18(木) 07:53:37「方程式を使えば解けたのに」
と負け惜しみを言ってるみたいだな
0990名無しさん@お腹いっぱい。
2010/11/18(木) 09:28:13やりにくいよね。 低レベルでそれらを扱える便利なコマンドが無い。
0991名無しさん@お腹いっぱい。
2010/11/18(木) 13:56:300992名無しさん@お腹いっぱい。
2010/11/18(木) 14:24:41どう扱うかってけっこう場面場面で違うから
「便利なコマンド」を作りにくいんじゃないかな。
LLでやっちゃった方がてっとり早いと思うよ。
0993名無しさん@お腹いっぱい。
2010/11/18(木) 14:36:18シェルの話題は出尽くしたので、
次スレはナシでいいよ。
0994名無しさん@お腹いっぱい。
2010/11/18(木) 15:02:590995名無しさん@お腹いっぱい。
2010/11/18(木) 15:07:45http://ja.wikipedia.org/wiki/%E8%BB%BD%E9%87%8F%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E
0996名無しさん@お腹いっぱい。
2010/11/18(木) 20:35:230997名無しさん@お腹いっぱい。
2010/11/18(木) 21:59:27が、日時の扱いがめっちゃ楽。
0998名無しさん@お腹いっぱい。
2010/11/19(金) 09:27:00ありがとう。
0999名無しさん@お腹いっぱい。
2010/11/20(土) 00:00:481000名無しさん@お腹いっぱい。
2010/11/20(土) 00:01:34http://hibari.2ch.net/test/read.cgi/unix/1127388574/
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。