シェルスクリプト総合 その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 でトレースしましょう。
0048名無しさん@お腹いっぱい。
2006/03/29(水) 11:43:34repeat 2 あるコマンド
0049名無しさん@お腹いっぱい。
2006/03/29(水) 12:13:07それだと「構文」になっちゃうから、「手軽」にならない。
しかも、(t)cshの文法はタブー。
「構文」使ってもいいなら↓
for i in 1 2; do あるコマンド; done
0050名無しさん@お腹いっぱい。
2006/03/29(水) 12:16:05#!/bin/csh
あるコマンド
!!
で桶。
なんたる糞Cシェル。
副作用として、
echo 'Hello !!'
が、シングルクォートで囲んでいるのに !!が展開されてしまう。
なんたる糞Cシェル。
0051名無しさん@お腹いっぱい。
2006/03/29(水) 12:36:44解ってるなら
不利益になるコマンドは使わなければ良いんだろ
0052名無しさん@お腹いっぱい。
2006/03/29(水) 15:02:37お願いだから糞スレを立てないでくれるかな?
俺からのお願いだよ
分かったら削除依頼よろしく
0053名無しさん@お腹いっぱい。
2006/03/29(水) 15:13:43飽きた
0054名無しさん@お腹いっぱい。
2006/03/29(水) 16:01:480055名無しさん@お腹いっぱい。
2006/03/29(水) 16:08:200056名無しさん@お腹いっぱい。
2006/03/29(水) 16:08:34んなもんやることによって違うに決まってるでしょ
0057名無しさん@お腹いっぱい。
2006/03/29(水) 16:09:09もちろん sed。(sedで書けるものはなるべくsedで)
0058名無しさん@お腹いっぱい。
2006/03/29(水) 16:41:08バイナリサイズは sed < awk で4倍も差があったので、基本は sed で、
sed ではすっきりしないAVアホですっきりしたい時は awk って事にします。
0059名無しさん@お腹いっぱい。
2006/03/29(水) 17:44:30バイナリサイズの時間への影響なんて誤差の範囲だし、
メモリに載ってるかどうかで逆転する。つまり気にする意味がない。
速度が気になるなら57を鵜飲みにせず自分で2通り書いてはかってみれ。
0060名無しさん@お腹いっぱい。
2006/03/29(水) 18:24:45と、
awk '{ gsub(/hoge/, "hage"); print }'
とで比較すると、
sedの方が約2倍速いなぁ。
>>59
「バイナリサイズの時間への影響はメモリに載ってるかどうかで逆転する」
というのは同意だが、それはsed/awkの起動時のオーバーヘッドであって、
起動中の文字列処理速度とは別の話。
sedでもできる処理をawkにやらせると、やっぱりawkの方が遅くなるよ。
0061名無しさん@お腹いっぱい。
2006/03/29(水) 18:27:210062名無しさん@お腹いっぱい。
2006/03/29(水) 18:28:21sedは↓
http://pc8.2ch.net/test/read.cgi/unix/1085730992/l50
awkはスレがないけど、必要なら誰か立てて。
0063名無しさん@お腹いっぱい。
2006/03/29(水) 18:32:49http://pc8.2ch.net/test/read.cgi/tech/1023556171/
でも比較の話は中立な所でするほうが良いような。
0064名無しさん@お腹いっぱい。
2006/03/29(水) 19:19:34お願いだから糞スレを立てないでくれるかな?
俺からのお願いだよ
分かったら削除依頼よろしく
0065名無しさん@お腹いっぱい。
2006/03/30(木) 00:53:43なにいってんだハゲ
帰れ
0066名無しさん@お腹いっぱい。
2006/03/30(木) 01:53:10お願いだから糞スレを立てないでくれるかな?
俺からのお願いだよ
分かったら削除依頼よろしく
0067名無しさん@お腹いっぱい。
2006/03/30(木) 02:29:52これスクリプトで書き込んでいるんじゃないのか?w
0068名無しさん@お腹いっぱい。
2006/03/30(木) 08:42:51>find / -print > find.txt
>ls -l find.txt
-rw-r--r-- 1 root whell 27679632 Mar 30 07:39 find.txt
>time awk -F / '{print $1"/"$2"/"$3}' < find.txt >> /dev/null
17.871u 0.569s 0:18.57 99.2% 148+277k 0+0io 0pf+0w
>time sed -ne 's|^\([^/]*/[^/]*/*[^/]*\).*|\1|p' < find.txt >> /dev/null
770.721u 4.670s 13:00.62 99.3% 35+235k 0+0io 0pf+0w
>time sed -ne 's|^\([^/]*\)/*\([^/]*\)/*\([^/]*\).*|\1/\2/\3|p' < find.txt >>/dev/null
1616.450u 8.887s 27:16.78 99.3% 35+235k 0+0io 0pf+0w
sedに問題がありそうですが、そこはsedスレに行きましょう。
0069名無しさん@お腹いっぱい。
2006/03/30(木) 10:00:03sed -ne 's|^\([^/]*/[^/]*/*[^/]*\).*|\1|p'
↑じゃなくて、
↓じゃないの?
sed -ne 's|^\([^/]*/[^/]*/[^/]*\).*|\1|p'
(上だとアスタリスクが1個余分だから、無駄な処理が行なわれている)
下の方でawkと比較すると、
やはりsedの方が速かったよ。
0070名無しさん@お腹いっぱい。
2006/03/30(木) 10:03:15お願いだから糞スレを立てないでくれるかな?
俺からのお願いだよ
分かったら削除依頼よろしく
0071名無しさん@お腹いっぱい。
2006/03/30(木) 11:33:43うーん。クロック4倍で。
>time awk -F / '{print $1"/"$2"/"$3}' < find.txt >> /dev/null
4.194u 0.070s 0:04.27 99.7% 147+275k 0+0io 0pf+0w
>time sed -ne 's|^\([^/]*\)/*\([^/]*\)/*\([^/]*\).*|\1/\2/\3|p' < find.txt >> /dev/null
378.530u 0.515s 6:19.73 99.8% 35+235k 0+0io 0pf+0w
>time sed -ne 's|^\([^/]*/[^/]*/[^/]*\).*|\1|p' < find.txt >> /dev/null
156.079u 0.249s 2:36.65 99.7% 35+235k 0+0io 0pf+0w
やっぱりうちではsedが遅い。ちなみに結果が異なるというのは、
>awk -F / '{print $1"/"$2"/"$3}' < find.txt | head -3
//
/.snap/
/dev/
>sed -ne 's|^\([^/]*\)/*\([^/]*\)/*\([^/]*\).*|\1/\2/\3|p' < find.txt | head -3
//
/.snap/
/dev/
>sed -ne 's|^\([^/]*/[^/]*/[^/]*\).*|\1|p' < find.txt |head -3
/dev/network
/dev/geom.ctl
/dev/devctl
こんな感じ。awkの結果が必要なものだとすると、sedはプロンプトが返ってこないのに
心配になるくらいうちでは遅い。
Windows Meを入れて売ってた頃のメーカーPCってのがだめなのかなぁ。
0072名無しさん@お腹いっぱい。
2006/03/30(木) 11:39:58内部で-3を-n3に書き換えてるのか。
0073名無しさん@お腹いっぱい。
2006/03/30(木) 11:46:20出力が違うことについては、
sed -ne 's|^\([^/]*/[^/]*/[^/]*\).*|\1|p'
じゃなくて、
sed -e 's|^\([^/]*/[^/]*/[^/]*\).*|\1|'
の方がいいかも。
0074名無しさん@お腹いっぱい。
2006/03/30(木) 11:47:44head -3 のほうが一般的だよ。
head -n3 だと動かないバージョン(OS)があるはず。
0075名無しさん@お腹いっぱい。
2006/03/30(木) 12:41:17>time sed -e 's|^\([^/]*/[^/]*/[^/]*\).*|\1|' < find.txt >> /dev/null
156.072u 0.218s 2:36.66 99.7% 35+235k 0+0io 0pf+0w
となりました。しかし
>sed -e 's|^\([^/]*/[^/]*/[^/]*\).*|\1|' < find.txt > sed.txt
>awk -F / '{print $1"/"$2"/"$3}' < find.txt > awk.txt
>diff -q sed.txt awk.txt
Files sed.txt and awk.txt differ
と、結果が違うようです。
> sed -ne 's|^\([^/]*\)/*\([^/]*\)/*\([^/]*\).*|\1/\2/\3|p' < find.txt > sed.txt
>diff -q sed.txt awk.txt
こっちは同じになってるらしい。圧倒的に遅いけど。
0076名無しさん@お腹いっぱい。
2006/03/30(木) 14:00:48お願いだから糞スレを立てないでくれるかな?
俺からのお願いだよ
分かったら削除依頼よろしく
0077名無しさん@お腹いっぱい。
2006/03/30(木) 14:09:15てのは流行ってるの?
なんでああ言う書式なんだろWinブラウザだと何か特殊に見えるの?
0078名無しさん@お腹いっぱい。
2006/03/30(木) 15:11:14ウィルスでは?
0079名無しさん@お腹いっぱい。
2006/03/30(木) 15:50:040080名無しさん@お腹いっぱい。
2006/03/30(木) 15:54:210081名無しさん@お腹いっぱい。
2006/03/31(金) 00:48:49確かに -n3 より -3 の方が一般的だと思うけど、
GNU textutils 2.1 の man には -LINES は
推奨されないオプションで -n LINES か
--lines=LINES を使えと書いてあるね。
0082名無しさん@お腹いっぱい。
2006/03/31(金) 02:34:08迫害される時期にあるのね。head だけじゃなくて sort のオプ
ションも同様な状況。
それがいいことか悪いことかは分からないが…
俺は相変わらず head でも sort でも古い形式を使ってる。
0083名無しさん@お腹いっぱい。
2006/03/31(金) 06:52:30int
main(int argc, char *argv[])
{
:
obsolete(argv);
while ((ch = getopt(argc, argv, "n:c:")) != -1)
:
static void
obsolete(char *argv[])
{
:
/* Return if "--" or not "-[0-9]*". */
:
2バイト大きいメモリを確保して"-n"と"-[0-9]*の"-"を取った文字列同士をくっつける処理
:
}
0084名無しさん@お腹いっぱい。
2006/03/31(金) 08:42:16使ってていいんじゃない?
0085名無しさん@お腹いっぱい。
2006/03/31(金) 09:02:45未だに改善される気配すらないよね。
dd if=/dev/zero of=tmpfile bs=1024k count=1024
じゃなくて、
dd -i /dev/zero -o tmpfile -b 1024k -c 1024
の方が、今から設計するなら然るべきと思うんだが。
特に、ファイル名(デバイス名)の左側に = がくっついてるから、
シェルでワイルドカードの展開とかができない。
headのオプションに拘るより、こういうのを改善するべきだ。
0086名無しさん@お腹いっぱい。
2006/03/31(金) 09:17:150087名無しさん@お腹いっぱい。
2006/03/31(金) 10:04:31Copy and Convert で cc になる予定が cc はすでにコンパイラで使われて
いたので dd にした。ちなみに dd は JCL の data definition の省略形
なんで, シャレで JCL の構文に合わせてみた(反省はしていない)。
ってのを, どっかで読んだ。
Unix に合わせるんだったら別のコマンドにするべきじゃねぇの?
0088名無しさん@お腹いっぱい。
2006/03/31(金) 11:16:38不便なオプション形式が推奨されるのって、なんか間違ってる気がする。
dd じゃなくて head の話ね。
0089名無しさん@お腹いっぱい。
2006/03/31(金) 11:32:03なぁ
お願いだから糞スレを立てないでくれるかな?
俺からのお願いだよ
分かったら削除依頼よろしく
0090名無しさん@お腹いっぱい。
2006/03/31(金) 11:33:28お願いだから糞スレを立てないでくれるかな?
俺からのお願いだよ
分かったら削除依頼よろしく
0091名無しさん@お腹いっぱい。
2006/03/31(金) 16:51:270092名無しさん@お腹いっぱい。
2006/03/31(金) 17:42:570093名無しさん@お腹いっぱい。
2006/03/31(金) 19:09:340094名無しさん@お腹いっぱい。
2006/03/31(金) 19:23:05findは変態だが、tarは別に変態じゃないぞ。
tar ztvf hoge.tar.gz
の代わりに、
tar -z -t -v -f hoge.tar.gz
とも打てるわけだし。
0095名無しさん@お腹いっぱい。
2006/03/31(金) 19:31:370096名無しさん@お腹いっぱい。
2006/03/31(金) 20:12:170097名無しさん@お腹いっぱい。
2006/03/31(金) 20:43:3685のどこに犬依存の記述があるんだい???
0098名無しさん@お腹いっぱい。
2006/03/31(金) 22:24:42「Linuxのddではdd -i /dev/zero -o tmpfile -b 1024k -c 1024という記述ができる」
と勘違いしたようだ。
しかも、>>85 が、「Linuxのddの書式をUNIXのddでも使えるようにしろ」と
主張しているものと勘違いしたようだ。
0099名無しさん@お腹いっぱい。
2006/03/31(金) 23:40:3385は「こんなのも使えるようになりゃいいな」って話じゃなくて、
headやsortのオプションがGNU getoptに合わないので色々
迫害されてるねえって話題の中で、「ddも改善されるべきだ」
という意見を出している。今の話の流れだと、改善されるべきだ=
旧来のオプションは消えちまえだからな。
>98
妄想たくましすぎw
0100名無しさん@お腹いっぱい。
2006/03/32(土) 01:06:240101名無しさん@お腹いっぱい。
2006/03/32(土) 01:36:590102名無しさん@お腹いっぱい。
2006/03/32(土) 01:40:484.3BSD の時代から getopt はありますよ。
0103名無しさん@お腹いっぱい。
2006/03/32(土) 03:58:500104名無しさん@お腹いっぱい。
2006/03/32(土) 03:59:480105前スレのクラッカー
2006/03/32(土) 04:06:04それとクラッキング与太話はするつもりは無いよ僕、リスクが上昇してしまうからね、
まああの時はカナダ、ドイツ、インド、アメリカ、中国、韓国、イスラエル、ルーマニア、イタリア、オーストラリア、アイルランド、アフリカ、チェチェン、バチカン、アイスランド
とこんな感じで超・多段串を刺してクラッキングしたねw
まぁ君らみたいな低脳には到底不可能な芸当だよw
僕を崇めろw
0106名無しさん@お腹いっぱい。
2006/03/32(土) 04:27:25頭悪いなお前
ぷぷぷ
0107名無しさん@お腹いっぱい。
2006/03/32(土) 09:17:13お前国語能力ないな。
>>85 は、headのオプションを、-3形式の、互換性のあるものから、
-n3の、新しいけど互換性のない形式にするなら、
ddだって変えてしまってもいいことになるが、
実際にはその気配はない。
だからこういった基本コマンドのオプションは安易に変えるべきではない。
(head -3の方が良い)
と、反語的に主張しているんだよ。
0108名無しさん@お腹いっぱい。
2006/03/32(土) 09:28:01いや違うだろ。>>85 はそんなこと言ってないだろ
0110名無しさん@お腹いっぱい。
2006/03/32(土) 10:25:420111前スレのクラッカー
2006/03/32(土) 10:26:54おい 屑共
0112名無しさん@お腹いっぱい。
2006/03/32(土) 10:44:21ストレートな表現ばかりに慣れ過ぎて、
ちょっと捻った文章の読解能力が低下して、
>>96 >>99 >>108 >>110 みたいな香具師が登場することになるわな。
0113名無しさん@お腹いっぱい。
2006/03/32(土) 10:47:37>まあ、manとか技術文書ばかり読んでると、
>ストレートな表現ばかりに慣れ過ぎて、
>ちょっと捻った文章の読解能力が低下して、
>>>96 >>99 >>108 >>110 みたいな香具師が登場することになるわ
>な。
ぎゃはは
ばっかじゃねーのこいつ
0114名無しさん@お腹いっぱい。
2006/03/32(土) 11:15:260115名無しさん@お腹いっぱい。
2006/03/32(土) 11:58:23褒め殺しをするとか、そういうサインを入れとか無いと駄目ですよって学校で習わなかった?
ひねった文章ってのは、ひねったことが読者に分かって初めて意味があるんだがなあ。
まあ、煽り文句は煽った本人のコンプレックスの現れという定理に基づくと、
「国語能力低いな」と煽った107=85は…(ry
0116名無しさん@お腹いっぱい。
2006/03/32(土) 12:53:27それを言うなら「定理」じゃなくて「法則」だなw
「国語能力低いな」
0117名無しさん@お腹いっぱい。
2006/03/32(土) 13:09:35たとえば、↓「エスパーきぼんぬ」のレスを貰う八ヶ条。
http://pc8.2ch.net/test/read.cgi/unix/1142379262/4
は、反語的表現として良くできていて面白いと思う。
しかし、ここに「などと言えるのではなかろうか」みたいな文章が入っていると、
せっかくの反語的表現が白けてしまって面白くなくなる。
(以前は補足みたいなのが付いてたけど、削除されたようだし、
そもそも補足が必要な国語能力低い香具師は居ないと言う前提で桶だろ)
0118名無しさん@お腹いっぱい。
2006/03/32(土) 16:29:54命題がサインになっている。国語力低いな。
0119名無しさん@お腹いっぱい。
2006/03/32(土) 16:42:52>>85 の文章は「ddも改善されるべきだ」とも取れるのはその通りだとしても、
そこから、>>96 の「犬は帰れ。」のところで理論の飛躍があると思う。
どうして犬だと思ったのか、もっとちゃんとした説明が欲しいな。
0120115
2006/03/32(土) 16:44:37ああ、法則のほうがあってるね。わりいな。
>117
ああいう褒め殺しの典型みたいな文章をもってきて、
なにがいいたいのやら。85でももうちょっと技法を使って
他人に反語的表現だと理解してもらえる文章にしないと、
それができないならせめて補足を入れないと駄目だぞ。
0121名無しさん@お腹いっぱい。
2006/03/32(土) 16:57:20横レススマソ。「法則」の方が合ってる(程度問題)じゃなく、
「定理」だと間違い。
定理なら証明して導かないといけない。
0122名無しさん@お腹いっぱい。
2006/03/32(土) 17:07:40つべこべ言わずにコード書け
0123名無しさん@お腹いっぱい。
2006/03/32(土) 17:12:07何でもかんでも犬にこじつけて排除しようとするから、
スレが荒れるなぁ・・
0124名無しさん@お腹いっぱい。
2006/03/32(土) 17:36:54今の話題は反語的表現。
0125前スレのクラッカー
2006/03/32(土) 17:54:42なぁ屑共 お前らに話がある
大切な話だ
0126名無しさん@お腹いっぱい。
2006/03/32(土) 18:13:04来て良さそうなカキコはあったのにね。
>>103,104,111,125 みたいな、自動カキコのシェルを書いてる人本人なのかなぁ。
0127名無しさん@お腹いっぱい。
2006/03/32(土) 18:14:430128前スレのクラッカー
2006/03/32(土) 18:15:45ところでお前らに大切な話があるよ屑共。
0129名無しさん@お腹いっぱい。
2006/03/32(土) 18:26:460130名無しさん@お腹いっぱい。
2006/03/32(土) 18:52:360131前スレのクラッカー
2006/03/32(土) 19:07:440132前スレのクラッカー
2006/03/32(土) 19:10:22・・・なんてったって遅いからだよ。
シェルスクリプトに限らず俺はインタプリタ型言語が大ッッッッッ嫌いでね。
悪いが当分の間このスレに居座り、荒らし行為をさせて貰うよ。
因みに俺の好きな言語はアセンブラ。
0133名無しさん@お腹いっぱい。
2006/03/32(土) 19:14:28> 俺の好きな言語はアセンブラ。
wwwww ワロス
0134名無しさん@お腹いっぱい。
2006/03/32(土) 19:25:19俺には大切な話なんかないぞ。屑は帰れ。
0135前スレのクラッカー
2006/03/32(土) 19:43:19どちらかと言うとお前らの方が屑だと思うぞ。
0136名無しさん@お腹いっぱい。
2006/03/32(土) 20:02:550137前スレのクラッカー
2006/03/32(土) 20:07:57同意。
お前も含まれるがな。
0138名無しさん@お腹いっぱい。
2006/03/32(土) 20:22:480139名無しさん@お腹いっぱい。
2006/03/32(土) 20:24:050140名無しさん@お腹いっぱい。
2006/03/32(土) 20:26:160141名無しさん@お腹いっぱい。
2006/03/32(土) 20:29:51お大事に。
0142名無しさん@お腹いっぱい。
2006/03/32(土) 20:33:09速度以外の点でメリットがあるからシェルスクリプトを使うわけで。
0143前スレのクラッカー
2006/03/32(土) 20:35:59よく分からないけど俺の世代にはアセンブラ言語と言う人間が大多数存在しているから、
間違いじゃないぞ。
あぁ〜自称プログラマーの使えないクズでしたか。すまんすまん。
>>139
お前のせいだ
>>140
意味が分からんよ全く、屑のホザくことは
>>141
実際遅いんだから、事実だろ?
俺が何年PCやプログラムに触れていると思っているんだ?
舐めるなよ。
0144名無しさん@お腹いっぱい。
2006/03/32(土) 20:36:35コンパイルしてもたいして速くならなかったりするよ。
0145名無しさん@お腹いっぱい。
2006/03/32(土) 20:40:56えーと、歳いくつ?
世代全員そんな馬鹿だとは思えないから、たぶん君と君の友達だけだよ。
google で検索
アセンブラ言語 の検索結果 約 43,400 件
アセンブリ言語 の検索結果 約 168,000 件
43400/(43400+168000) ≒ 0.2
∴ 人類の下位 20% に属するバカ
なるほど。
φ(..)メモメモ...
0146名無しさん@お腹いっぱい。
2006/03/32(土) 20:41:37アセンブリー言語のことを慣習的に「アセンブラ」と呼ぶのは一般的だが、
「アセンブラ言語」という言い方は初めて聞いたな。
「言語」がくっつくと確かにおかしく感じる。
0147名無しさん@お腹いっぱい。
2006/03/32(土) 20:42:570148名無しさん@お腹いっぱい。
2006/03/32(土) 20:44:05コンパイル型言語(というかC言語)でも、インタプリタ以上に遅いコードはざら。
sscanf 一発な簡単な文字列処理でも、strxxxでコピーしてコピーしてとごちゃごちゃやってたり
■ このスレッドは過去ログ倉庫に格納されています