シェルスクリプト総合 その5
■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。
2006/01/21(土) 09:00:29スクリプトのお勉強・自慢・腕試しなどにどうぞ。
まずは注意点、リンク、地鎮祭など(>>1-6くらい)をご覧ください。
□お約束
・特記なき場合はbourne shがデフォルトです。
bash/csh/tcsh/zsh/ksh/ashなどに依存する場合は明示しましょう。
Linuxユーザは/bin/shの正体がbashなので特に注意。
・UNIXにはシェルスクリプトに便利な小さなコマンドがいろいろあります。
manや参考リンクを見ましょう。
aproposないしはman -kでそれらしい単語による簡単な検索もできます。
・シェルスクリプトのことをシェルってゆーな
・シェルで使えるワイルドカード等は正規表現ではありません。
正規表現の話題はスレ違い(正規表現スレへ)
□初心者へのアドバイス:
・適した道具を判断するのも頭の重要な使い方。シェルスクリプトよりも
RubyやPerlの方が適した仕事には素直にそちらを使いましょう。
・知らないコマンドが出てきたらmanを引きましょう。
・思い通りに動かないときは、まずは sh -x でトレースしましょう。
0659名無しさん@お腹いっぱい。
2006/03/15(水) 04:17:58sed一つで済むところを3つもプロセス使うなんて馬鹿げたことはやめてくれよな。
0660名無しさん@お腹いっぱい。
2006/03/15(水) 09:28:26俺が決める
0661名無しさん@お腹いっぱい。
2006/03/15(水) 10:45:13お前、スライム一匹にイオナズン使うタイプだろ。
0662名無しさん@お腹いっぱい。
2006/03/15(水) 10:54:20アセンブラ? なに軟弱なことを言ってんの?
0663名無しさん@お腹いっぱい。
2006/03/15(水) 11:41:00ハッカーぽい響きがあるせいか?
0664名無しさん@お腹いっぱい。
2006/03/15(水) 11:49:32というわけで、レベルが低い、といっている人はどーぞ、そのレベルの高さを示してください。
そのレベルの低さを示すのが関の山だと思うけど(w
0665名無しさん@お腹いっぱい。
2006/03/15(水) 12:11:160666名無しさん@お腹いっぱい。
2006/03/15(水) 12:12:41レベルの意味が違いすぎ
0667名無しさん@お腹いっぱい。
2006/03/15(水) 14:00:210668名無しさん@お腹いっぱい。
2006/03/15(水) 14:09:23あとから外部コマンド(sed/tr)を複数使った解を出してきても
エレガントではない。
0669名無しさん@お腹いっぱい。
2006/03/15(水) 14:11:530670名無しさん@お腹いっぱい。
2006/03/15(水) 14:33:13いいんじゃないか。この程度なら。
0671名無しさん@お腹いっぱい。
2006/03/15(水) 15:10:370672名無しさん@お腹いっぱい。
2006/03/15(水) 16:19:54内部コマンドだけでできればどんなに複雑でもエレガントとか言いはじめるやつとは議論にならんな
0673名無しさん@お腹いっぱい。
2006/03/15(水) 17:11:310674名無しさん@お腹いっぱい。
2006/03/15(水) 17:13:14シェルって言うなクズ。
0675名無しさん@お腹いっぱい。
2006/03/15(水) 18:05:21>>651 って動かないわけよ。
sedの中で \( \) とすべきところを ( ) で書いてるから。
動作確認してから書き込むのは最低限の回答者のルールだよ。
確かに、こんなシェル書いてちゃ食えないよな。
(先に言っとくけど「シェルってゆーな」の突っ込みは禁止。そろそろ言葉に慣れろ)
0676名無しさん@お腹いっぱい。
2006/03/15(水) 18:06:00シェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェル
シェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェル
シェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェル
シェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェル
シェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェル
シェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェル
シェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェル
シェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェル
シェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェル
シェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェル
シェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェル
シェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェル
シェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェル
シェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェル
シェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェル
0677名無しさん@お腹いっぱい。
2006/03/15(水) 18:07:550678名無しさん@お腹いっぱい。
2006/03/15(水) 18:13:52思うこともあるね。sed,awk,grep,findあたりを良く使いまわすんだけど、
重くてしょうがなくなる。まあ高速化は二の次になっちゃうんだけど、
RubyかPerlあたりのスクリプト言語を使うことを、最初に検討した方がいいかも
知れん。
0679名無しさん@お腹いっぱい。
2006/03/15(水) 18:58:310680名無しさん@お腹いっぱい。
2006/03/15(水) 19:02:06すべて小文字のファイル名に直したいのですが、
どういうUNIXを打てばいいでしょうか?
0681名無しさん@お腹いっぱい。
2006/03/15(水) 19:03:270682名無しさん@お腹いっぱい。
2006/03/15(水) 19:11:180683名無しさん@お腹いっぱい。
2006/03/15(水) 19:30:44宿題は自分で考えろ。
0684名無しさん@お腹いっぱい。
2006/03/15(水) 19:38:080685名無しさん@お腹いっぱい。
2006/03/15(水) 19:51:03OS名を書かないと、答えられる人は誰もいないと思います。
0686名無しさん@お腹いっぱい。
2006/03/15(水) 19:52:500687名無しさん@お腹いっぱい。
2006/03/15(水) 20:08:51で前スレでこの板公認の略称が決まらなかったっけ?
0688名無しさん@お腹いっぱい。
2006/03/15(水) 20:26:180689名無しさん@お腹いっぱい。
2006/03/15(水) 20:33:440690名無しさん@お腹いっぱい。
2006/03/15(水) 20:49:26…………とかくにシェルは書きにくい。」
0691642
2006/03/15(水) 21:35:03趣味でか触ってないのでいつまで経っても初級者から成長しないんですよね。
で、
sed 's/$/ /g' L1 | tr -d "\n" | sed 's/\([0-9]+\)[^0-9]/\1\n/g'
で★キマリッ★
0692名無しさん@お腹いっぱい。
2006/03/15(水) 22:43:250693名無しさん@お腹いっぱい。
2006/03/15(水) 23:04:30シェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェル
シェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェル
シェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェル
シェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェル
シェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェル
シェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェル
シェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェル
シェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェル
シェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェル
シェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェル
シェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェル
シェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェル
シェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェル
シェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェル
シェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェルシェル
0694名無しさん@お腹いっぱい。
2006/03/15(水) 23:27:450695名無しさん@お腹いっぱい。
2006/03/16(木) 03:04:28…… … …… ……………… … …… … … …シェ… …
0696名無しさん@お腹いっぱい。
2006/03/16(木) 03:15:05シェイシェイ
0697名無しさん@お腹いっぱい。
2006/03/16(木) 12:52:44馬鹿回答をしているのが馬鹿学生じゃなくて馬鹿社会人だからだろうな。
0698名無しさん@お腹いっぱい。
2006/03/16(木) 13:35:340699名無しさん@お腹いっぱい。
2006/03/16(木) 13:48:35どうやるのか判りません。
yyyymmddの8桁日付なら`date +%Y%m%d`で設定できるのですが、
yymmddで6桁日付だとどうやるのでしょうか?
awkのsubstrという関数を上手く使えればできそうなのですが、
awkの使い方をいまいち理解できてないので・・・・
申し訳ありませんがよろしくお願いします。
0700名無しさん@お腹いっぱい。
2006/03/16(木) 13:53:02man strftime
0701名無しさん@お腹いっぱい。
2006/03/16(木) 14:07:40date +%y%m%d でできるよ。yは小文字。
ただし、%yは2000年問題の関係で推奨されない。
>>700
質問欲嫁。この場合 man strftimeしても解決しないだろ。
0702699
2006/03/16(木) 15:08:28ありがとうございました。
できました。
すごく単純なコマンドで出来たんですね(汗)
0703名無しさん@お腹いっぱい。
2006/03/16(木) 15:50:11そんなの用途しだいでしょ。
昔のデータなんか扱わないようなところとか。
>質問欲嫁。この場合 man strftimeしても解決しないだろ。
man date するとたいてい strftime(3) を参照と書いてないか?
0704名無しさん@お腹いっぱい。
2006/03/16(木) 15:58:12man dateしたなら、すでに %y のことは書いてある。
strftime(3)のことは書かれていなかった。
0705名無しさん@お腹いっぱい。
2006/03/16(木) 15:58:44誰だよ,解決しないとか言ってる奴
0706名無しさん@お腹いっぱい。
2006/03/16(木) 16:02:45strftimeはC言語の関数。
そっちに載っていたとしても、回答としては不適切。
もっとそのものズバリのman dateがあるのだから。
なんでわざわざ遠い回答するの?
0707名無しさん@お腹いっぱい。
2006/03/16(木) 16:03:270708名無しさん@お腹いっぱい。
2006/03/16(木) 16:06:310709名無しさん@お腹いっぱい。
2006/03/16(木) 16:07:43そういうことがやりたいなら strftime() を使って、
C言語でプログラムを書け、と言いたかったんじゃないかな。
それが、実は date +%y で簡単にできてしまうことがわかり、
突っ込まれたので暴れているわけだ。
0710名無しさん@お腹いっぱい。
2006/03/16(木) 16:08:24FreeBSD で man date を確認すると
% を使った詳細の書式は載っていない。
man strftime ならたぶんどの OS でも載ってるっしょ。
0711名無しさん@お腹いっぱい。
2006/03/16(木) 16:09:06>>703
0713名無しさん@お腹いっぱい。
2006/03/16(木) 16:14:58いきなり man strftimeしても、質問者にとっては、
それがdateで使えるとはわからない。
載っているのはC言語なので、最初の数行読んで「違う」「ガセネタだ」と
思うだろう。
man strftimeとか言わずに、
>>701 みたいに date +%y%m%d と、直接回答するのが
もっとも価値が高い回答ではないだろうか。
0714名無しさん@お腹いっぱい。
2006/03/16(木) 16:21:42回答控えようかな。
0715名無しさん@お腹いっぱい。
2006/03/16(木) 16:47:32--------------------------------
yy 西暦の省略表現です。西暦の 10 の位と 1 の位です (1989 年なら 89、06 なら 2006)。
〜中略〜
使用例
以下のコマンド:
date "+DATE: %Y-%m-%d%nTIME: %H:%M:%S"
は、下のような表示を行ないます。
DATE: 1987-11-21
TIME: 13:36:16
0716名無しさん@お腹いっぱい。
2006/03/16(木) 16:52:510717名無しさん@お腹いっぱい。
2006/03/16(木) 16:59:42遠回しなman書いてるFreeBSDはクズ。
0718名無しさん@お腹いっぱい。
2006/03/16(木) 17:01:550719名無しさん@お腹いっぱい。
2006/03/16(木) 17:06:55て書いてあるけど。strftime(3)は遠回りでもなんでも
なく、直球だと思う。まぁ、date(1)にstrftime(3)を
見ろと載っていると一言あってもいいけど。
An operand with a leading plus (`+') sign signals a user-defined format
string which specifies the format in which to display the date and time.
The format string may contain any of the conversion specifications
described in the strftime(3) manual page, as well as any arbitrary text.
つーか、質問者以外が難癖つけすぎ。
0720名無しさん@お腹いっぱい。
2006/03/16(木) 17:08:10Solarisスレでは二言めには docs.sun.com読め、なので、manは標準じゃないのだろう。
0721名無しさん@お腹いっぱい。
2006/03/16(木) 17:10:52だからぁ、それはFreeBSDの場合なんだって。
そもそも、dateコマンドで行けるかどうかの情報すらない段階で、
man strftimeでは意味が通じないよ。
元が「dateの書式が知りたい」という質問なら
man strftimeでもわかるけど。
実際にはそうじゃない。
0722名無しさん@お腹いっぱい。
2006/03/16(木) 17:21:47これを、6桁にしようと、awkのsubstr関数を使うことを考えていた。
この段階で、質問者は「dateコマンドだけではできない」と
考えていたと推定できる。
すると回答としては、まず、「dateだけでできるんだよ」ということを
教えてやらないといけない。
ところが、ここで「man strftime」などと回答すると、
「dateの出力をstrftimeというコマンド(←実際にはない)で加工する」
あるいはawkを考えているため「awkにstrftimeという関数がある?」
などと、誤った方向に誘導してしまう。
だから、manなどで回答するのではなく、
`date +%y%m%d`
と一言いえば済むことだったのだ。
0723名無しさん@お腹いっぱい。
2006/03/16(木) 17:33:12直接、答えを教えるのは良くないよ。
0724名無しさん@お腹いっぱい。
2006/03/16(木) 17:38:09オレはその点が気になる。
シェルスクリプトとして動作確認してるなら、
回答は直接のコマンドラインになるはず。
直接答を書くというか、動作確認のためにそれは必要なこと。
0725名無しさん@お腹いっぱい。
2006/03/16(木) 17:38:450726名無しさん@お腹いっぱい。
2006/03/16(木) 17:43:37元々モマエは役に立ってないから
イエローで首括って良いよ
0727名無しさん@お腹いっぱい。
2006/03/16(木) 17:52:51仮に動作確認のために動かしても、マニュアルに載ってることは答えを
直接書くべきじゃない。回答者の学ぶ機会を奪うのか?
0728名無しさん@お腹いっぱい。
2006/03/16(木) 17:54:15>などと、誤った方向に誘導してしまう。
GNU awk にはあるよ。その man でもちゃんと strftime(3) に誘導してる。
0729名無しさん@お腹いっぱい。
2006/03/16(木) 17:56:39awkにstrftimeがあるのは知ってるよ。
だからこそ紛らわしいと言ってるんだ。
dateでできるのにわざわざawkでやると無駄だろ。
しかも、awkのstrftimeでdateみたいに表示させるの、
結構記述量多くなるよ。
0730名無しさん@お腹いっぱい。
2006/03/16(木) 18:00:42awk 'BEGIN { print strftime("%y%m%d") }'
だね。
確かに、こんなこと書くより、
date +%y%m%d
の方がエレガントだね。
0731名無しさん@お腹いっぱい。
2006/03/16(木) 18:06:32>回答者の学ぶ機会を奪うのか?
確かに、「回答者」こそいい回答方法を学んで欲しいよねw
man回答は最低。
0733名無しさん@お腹いっぱい。
2006/03/16(木) 21:19:53sh -c 'for i in *; do mv $i `echo $i | tr a-z A-Z`; done'
0734名無しさん@お腹いっぱい。
2006/03/16(木) 21:24:16逆に大文字に変換してるのはわざと?
あと、sh -c が無駄。
cshユーザーは居ないという大前提があるので、
sh -c する必要なし。
0735名無しさん@お腹いっぱい。
2006/03/16(木) 21:33:23> 逆に大文字に変換してるのはわざと?
素でまちがえただけよ
0736名無しさん@お腹いっぱい。
2006/03/16(木) 21:35:480737680
2006/03/16(木) 21:41:44ありがとうございます。733のUNIXを打つと途中まで行けるんですが、
My Document.txt というファイルがあるところでエラーになります。
こういうファイルも対応できるUNIXの打ち方はありませんか?
0738名無しさん@お腹いっぱい。
2006/03/16(木) 21:50:220739名無しさん@お腹いっぱい。
2006/03/16(木) 21:53:02あれ?
[]がいるんじゃね?
0740名無しさん@お腹いっぱい。
2006/03/16(木) 21:55:12man tr
[]はいらねーよ。正規表現じゃないんだから。
0741名無しさん@お腹いっぱい。
2006/03/16(木) 21:59:52それとも手元のPCがWinで、すぐにUNIXが打てないのかな?
0742名無しさん@お腹いっぱい。
2006/03/16(木) 22:13:04でも、Solarisの tr でも [ ] なしで動くので
[ ] はもう要らないのだろう。
0743名無しさん@お腹いっぱい。
2006/03/16(木) 22:25:26/usr/bin/trの場合は、[]がいるみたいだぞ。
/usr/xpg4/bin/trの場合はいらんみたいだが。
0744名無しさん@お腹いっぱい。
2006/03/16(木) 22:35:09manはインスコしてないので未確認。
manってうぜー。
現物確認が一番。
0745名無しさん@お腹いっぱい。
2006/03/16(木) 23:01:050746名無しさん@お腹いっぱい。
2006/03/16(木) 23:04:52何年か前に見たから、インスコしないことにしている。
LinuxのmanをNFSマウントしてそれを読んでるが、
それでだいたい間に合ってしまうんだよ。
0747名無しさん@お腹いっぱい。
2006/03/16(木) 23:20:24Solarisのmanの方が全然いいぞ
例えばThread-SafeかどうかSolarisのは全部書いてあるし
0748名無しさん@お腹いっぱい。
2006/03/16(木) 23:21:34聞いたことないなあ。"troff形式のマニュアルページ"もしくは
AnswerBook(もうリリースされてないけど)の間違いじゃないの?
ttp://docs.sun.com/app/docs/doc/819-0305/6n2o826je?a=view
ここにも載ってないし。
0749名無しさん@お腹いっぱい。
2006/03/16(木) 23:59:48> Linuxのmanって、なんか古い記述が残ってたり、テキトーなのが多くないか?
日本語の man はそういうの多いね。
--help オプションとかがあるコマンドなら
そっちで確認した方が確実だね。
0750名無しさん@お腹いっぱい。
2006/03/17(金) 00:33:46manも--helpオプションも間違ってて、
ソース読まざるをえないことが数度あった。
bashとかのでかいmanはよみにくいな。
0751名無しさん@お腹いっぱい。
2006/03/17(金) 00:37:040752名無しさん@お腹いっぱい。
2006/03/17(金) 00:43:180753名無しさん@お腹いっぱい。
2006/03/17(金) 00:52:25ああいうのなら info の方がいい。
0754名無しさん@お腹いっぱい。
2006/03/17(金) 01:18:200755名無しさん@お腹いっぱい。
2006/03/17(金) 01:20:07Solarisのmanは、docs.sun.comと同じソースで、
かなり前からSGMLドキュメントがオリジナルになっている。
アンサーブックの時代にそうなった。
/usr/man/sman*
0756名無しさん@お腹いっぱい。
2006/03/17(金) 06:56:130757名無しさん@お腹いっぱい。
2006/03/17(金) 07:16:05for i in *; do mv "$i" "`echo "$i" | tr a-z A-Z`"; done
0758名無しさん@お腹いっぱい。
2006/03/17(金) 07:18:36■ このスレッドは過去ログ倉庫に格納されています