1 名前:1様 [2009/04/03(金) 22:17:43 ID:0qFlvOW9] UNIX板のスレを見ている方も多数おられるかと思いますが、 まあそれはそれとして、BASHウゼーとか言われる心配なく 平和にLINUX的スクリプト談義しましょうよ。 初めての自作スクリプト、自信ないから見てください。な初心者から トリッキーな技を駆使した作品を披露したい、蘊蓄を語りたい上級者まで いろいろな人に参加して頂けると嬉しいです。 perlやらPythonやらの話が混ざっても良いんでない? Part4 : pc11.2ch.net/test/read.cgi/linux/1210999497/ Part3 : pc11.2ch.net/test/read.cgi/linux/1184077033/ Part2 : pc11.2ch.net/test/read.cgi/linux/1154578200/ Part1 : pc8.2ch.net/test/read.cgi/linux/1121994321/ >>2-5 あたりに色々と。
554 名前:sage [2010/02/08(月) 17:06:29 ID:kDoV0MXx] 宿題は自分でやろうね。
555 名前:login:Penguin mailto:sage [2010/02/08(月) 20:38:54 ID:Wyshj96C] 後から読んで526にワロタ カワイソスw
556 名前:login:Penguin mailto:sage [2010/02/19(金) 00:14:13 ID:c2ocdmWw] df -h /tmp | sed 's/.*\([0-9][0-9]*\)%.*/\1/'
557 名前:login:Penguin [2010/02/20(土) 23:34:54 ID:vDEbYPUT] 以下の結果を出力するシェルを,bashスクリプトで書け. (基本仕様) ・コマンドとして実行できる.(シェルコマンドである.) ・ユーザーが10000以上99999以下の5桁の数字を入力する. ・その数字を7で割って1余り,かつ13で割って2余った場合は Daikichiと表示する. ・それ以外で,13で割って2余った場合は Chuukichiと表示する. ・それ以外で,7で割って1余った場合は Shoukichiと表示する. ・それ以外の場合は Hazureと表示する. ・入力した文字が10000以上99999以下の数字以外の場合はエラーメッセージを表示する. ・できる人は,コマンドライン引数でDaikichiなどの文字を変更できるようにする. (ポイント) ☆シェルコマンドにするには,スクリプトの最初に(#!で始まる)おまじないを書く. ☆標準入力から文字列を入力するには read を用いる. ☆コマンドラインの引数は,$@に格納されている.(その要素は $1 $2 ...) ☆四則演算には $(( )) コマンドが使用できる.(ただし,整数しか扱えない.) 誰かわかるひとお願いします
558 名前:login:Penguin mailto:sage [2010/02/20(土) 23:37:36 ID:8qh4FPc7] >>557 > 誰かわかるひとお願いします まぁ、Linux使える人ならば、誰でも分かる "学校" の課題ですわな(w # "学校" は 大学 でない。
559 名前:login:Penguin mailto:sage [2010/02/20(土) 23:46:16 ID:WE3Utbg7] シェルスクリプトの課題を出す学校ってあるんだね。 ふつーは、CとかJavaを中心にやるものだと思ってた。
560 名前:login:Penguin [2010/02/21(日) 00:00:05 ID:WDiWxw8N] #!/bin/bash read read echo $((read%3))`echo 5p$(echo e$(echo l5b$(echo 6M5)q2)744$(echo GsCg$(echo =$(echo =))))|base64 -d`
561 名前:login:Penguin mailto:sage [2010/02/21(日) 00:16:12 ID:FUNRtF1w] 死ねばいいのに
562 名前:login:Penguin mailto:sage [2010/02/21(日) 00:27:29 ID:R8eJDQx8] 何をお願いされているのだろう。アンケートかな? 回答「わかります」 上から2桁目で四捨五入したい(例: 15 -> 20, 312 -> 300, 9432 -> 9000) どうやるのが一番簡単かな?
563 名前:login:Penguin [2010/02/21(日) 00:39:34 ID:y6fTjKHz] 10を底とした対数とって 1.5*10^1 3.12*10^2 9.432*10^3 仮数部を小数点以下で四捨五入する
564 名前:login:Penguin [2010/02/21(日) 01:05:26 ID:y6fTjKHz] 全然対数じゃないや
565 名前:login:Penguin mailto:sage [2010/02/21(日) 01:20:23 ID:mOFZBUIZ] >>557 お前UNIX板のシェルスクリプトスレでも宿題は自分でやれって言われてただろ マジで死ね
566 名前:login:Penguin [2010/02/21(日) 02:00:25 ID:y6fTjKHz] $ echo 'x=9432; beki=l(x)/l(10.0); scale=0; beki/=1; scale=10; y=x/(10^beki); y+=0.5; scale=0; y/=1; y*=(10^beki); scale=0; y/=1; y;' | bc -l 9000 一応、15, 312, 9432 については期待の値になった。
567 名前:login:Penguin mailto:sage [2010/02/21(日) 02:38:10 ID:ymcnTK5S] >>566 しかし4432613で矛盾が出た。
568 名前:login:Penguin [2010/02/21(日) 08:29:04 ID:y6fTjKHz] 違うかね? 4432613 = 4.432613 * 10^6 → 4.4*10^6 → 4.0*10^6 = 4000000 >>562 さんに聞いてみようか。 入力4432613での期待値は、 上から2桁目の"4"で四捨五入して、4000000 でよろし? 3桁目の"3"でして、4400000 ではなくて。
569 名前:login:Penguin [2010/02/21(日) 09:26:12 ID:y6fTjKHz] 少しコメント入れました。ダメな場所はどなたか直してください。 echo 'x=4432613; # x=y * 10^d 表現にする d=l(x)/l(10); scale=0; d/=1; scale=1; y=x/(10^d); # yの小数点第一位を四捨五入して整数に。 y+=0.5; scale=0; y/=1; # 元の桁数に戻す。 z=y*(10^d); z; ' | bc -l
570 名前:login:Penguin [2010/02/21(日) 11:49:45 ID:y6fTjKHz] アプローチを変えて文字列処理にしてみた $ echo 4432613 | perl -npe 's/^(\d)(\d)(\d+)/$1+($2>4) . 0 . 0 x length($3)/e;'
571 名前:login:Penguin [2010/02/21(日) 12:23:46 ID:y6fTjKHz] $ echo 15 | perl -npe 's/^(\d)(\d)(\d*)/$1+($2>4) . 0 . 0 x length($3)/e;'
572 名前:login:Penguin [2010/02/21(日) 13:04:19 ID:y6fTjKHz] #!/bin/ksh v="$1" a=${v:0:1} b=${v:1:1} c=${v:2} [ $b -gt 4 ] && a=$((a+1)) b=0 c=$(echo $c | tr 0-9 0) echo "$a$b$c"
573 名前:login:Penguin mailto:sage [2010/02/21(日) 13:09:12 ID:7QPAwQGI] ん、よくわからんけど…… 乙 w
574 名前:562 mailto:sage [2010/02/21(日) 19:12:39 ID:R8eJDQx8] なんかすごいものがw >>568 >入力4432613での期待値は、 >上から2桁目の"4"で四捨五入して、4000000 でよろし? よろしです。 パッと見で>>571 がスマートですね シェルからこいつを呼ばせて貰おうと思います ありがとうございましたm(_ _)m
575 名前:login:Penguin [2010/02/21(日) 20:33:49 ID:y6fTjKHz] >>507 ttp://sourceforge.jp/projects/sfnet_pipestatus/ ど根性に脱帽
576 名前:login:Penguin mailto:sage [2010/02/26(金) 00:26:14 ID:DYTaEvQS] 自分自身(ファイル)をサーバにuploadするシェルスクリプトって可能ですか? 具体的には、ちょこちょこ定期的にレンタルサーバにuploadしたいファイル群があるのでシェルスクリプトを書きたいのですが、 そのシェルスクリプトファイル自身もuploadしたいのです。
577 名前:login:Penguin mailto:sage [2010/02/26(金) 00:29:09 ID:C/OfvsKM] まず、なぜ不可能だと考えたのか、そこから聞こうか。
578 名前:login:Penguin mailto:sage [2010/02/26(金) 00:37:26 ID:DYTaEvQS] 今実行中のファイルを操作するってのがいけないことなのかなぁと…
579 名前:login:Penguin mailto:sage [2010/02/26(金) 00:39:36 ID:dGd2Emr5] 自身のunlinkすら可能だというに
580 名前:login:Penguin mailto:sage [2010/02/26(金) 00:56:31 ID:7suOgZ+f] アップロードどころか実行中のスクリプトを編集することもできるよー
581 名前:login:Penguin [2010/02/26(金) 21:44:10 ID:ZUmR/bTp] 以下の結果を出力するスクリプトを,UNIXシェルで書け. (基本仕様) ・コマンドとして実行できる.(UNIXシェルである.) ・主人公、妹1名、両親、自分の友人数名(うち最低1名は女性、半数以上は男性とする)、妹の友人(女性)数名が登場する. ・主人公、妹、自分の友人、妹の友人はいずれも生徒もしくは学生とする. ・両親のうち、父は総合商社勤務のサラリーマン、母は専業主婦とする. ・主人公の言動やイベントの発生にともない、各キャラのパラメータを変化させる. ・病弱な妹を思いやる兄と妹の交流を中心に、他の登場人物との友情や恋愛を描写する. ・エンディングは妹、もしくは妹の友人のいずれかと深い恋愛関係になるか、誰とも親密に慣れないバッドエンディングになるようにする. ・妹と恋愛関係が深まる場合、病弱な妹への思いやりが徐々に、自然に恋愛感情へ変化するように描写する. ・ゲームの操作方法はコマンド選択式またはコマンド入力式とする. ・すべてUNIXシェル内部で処理し,外部コマンドは呼び出さないこと. (ポイント) ☆UNIXシェルにするには,ファイルの最初に #!/bin/bashというおまじないを書く. ☆コマンド選択方式のゲームにする場合、select文を使用できる。 ☆四則演算には $(( )) コマンドが使用できる.(ただし,整数しか扱えない.) 誰かわかるひとお願いします
582 名前:login:Penguin mailto:sage [2010/02/26(金) 21:49:36 ID:ueeczQLj] さようなら
583 名前:login:Penguin mailto:sage [2010/02/26(金) 22:36:07 ID:PyskErwP] >>581 UNIXシェルってなんだ?
584 名前:login:Penguin mailto:sage [2010/02/26(金) 22:53:51 ID:nq/ujwuR] >>581 いろいろ拡張されてきたなw
585 名前:login:Penguin mailto:sage [2010/02/26(金) 23:01:55 ID:UQaFhRqQ] 自演ウザス
586 名前:login:Penguin mailto:sage [2010/02/27(土) 08:37:06 ID:dxtkbNS9] 素直にワラタ
587 名前:login:Penguin [2010/02/28(日) 01:11:29 ID:oz3AO1O4] シェルスクリプトとVBA、どちらが簡単ですか?
588 名前:login:Penguin mailto:sage [2010/02/28(日) 01:13:35 ID:XA1Dii88] シェルスクリプト
589 名前:login:Penguin mailto:sage [2010/02/28(日) 01:20:34 ID:oz3AO1O4] >>588 シェルスクリプトと比較して、VBAはどこがどんな風に難しいのでしょうか?
590 名前:login:Penguin mailto:sage [2010/02/28(日) 01:37:41 ID:XA1Dii88] 用途が全然違う VBA=MS製品の補助、高度なことやろうと思ったらVBの型とか定数とかメソッドとかプログラミング言語として覚えないといけない シェルスクリプト=普段から使っているコマンド郡の応用、データの流れとアルゴリズムさえ判れば外部プログラム呼び出して何でも出来る
591 名前:login:Penguin mailto:sage [2010/02/28(日) 01:52:34 ID:oz3AO1O4] >>590 疑問なのは、なぜアプリケーションの補助がそんなに難しいのか、 もっと簡単にできなかったのか、それでは普通の人に使えないのではないか、 という点です。 Linuxで表計算っぽいことができる言語というとawkがありますけど、 あれくらい簡単だったら誰でも使えると思うのですが。 マクロ言語がエンドユーザ言語として使われるためには簡単でなければならないはず。 それなのにシェルスクリプトより難しいというのは、その目的にそぐわないような気がするのですが。
592 名前:login:Penguin mailto:sage [2010/02/28(日) 01:55:02 ID:C3UADE41] VBAの質問ならよその板でやっとくれ。
593 名前:login:Penguin mailto:sage [2010/02/28(日) 01:56:36 ID:oz3AO1O4] >>592 VBAについて知りたいというよりも、 シェルスクリプトとVBAの違いというか、 際立った特徴のようなものがあれば、それを知りたいんです。
594 名前:login:Penguin mailto:sage [2010/02/28(日) 02:06:41 ID:B/kw3N2G] >>593 そもそも活用シーンが全然違うのに比較してどうする。根本が間違っている。 比較するならWSHとだろう。
595 名前:login:Penguin mailto:sage [2010/02/28(日) 02:12:43 ID:oz3AO1O4] >>594 WSHもWindows PowerShellも エンドユーザにはあまり受け容れられていないように見受けられます。 Linux/UNIX/MacOSXのエンドユーザでもスクリプトを全く書かない人はいますが、 Windowsよりはそういう人が少ないと思います。 単純にWindowsのほうがヘビーユーザ率が低いというもあるでしょうが、 それだけでなく、Windowsで使われるそれらの言語が そもそもエンドユーザに適さない欠点を有しているからではないのでしょうか? とすると、逆にシェルスクリプトはどういう点でそれらより優れているのでしょうか?
596 名前:login:Penguin mailto:sage [2010/02/28(日) 02:20:34 ID:B/kw3N2G] >>595 だからさー比較する前提条件が間違っている。
597 名前:login:Penguin mailto:sage [2010/02/28(日) 02:24:04 ID:oz3AO1O4] >>596 WSHと比較するようにアドバイスされたので、そうしたのですが。
598 名前:login:Penguin mailto:sage [2010/02/28(日) 02:31:01 ID:v9A/VFIk] シェルスクリプトと比較するべきはバッチファイル。 君の質問は「バッチファイルとVBA、どちらが簡単ですか?」という事になるから この板で聞く事じゃない。
599 名前:login:Penguin mailto:sage [2010/02/28(日) 02:33:03 ID:oz3AO1O4] >>598 バッチファイルなんて論外でしょう。 あれとシェルスクリプトを一緒にするのはやめましょう。
600 名前:login:Penguin mailto:sage [2010/02/28(日) 02:43:10 ID:v9A/VFIk] VBAと一口に言ってもWord、Excel、Access、Outlook…全然違うぞ?
601 名前:login:Penguin mailto:sage [2010/02/28(日) 02:44:34 ID:B/kw3N2G] っていうかスレチ。 いちいちageているし、これ以上続けるならレス乞食とみなしてあぼーんする。 くだ質いけ。
602 名前:login:Penguin mailto:sage [2010/02/28(日) 02:47:24 ID:C3UADE41] くだ質に来られても困るな。 ム板にでも行ってくれ。
603 名前:login:Penguin mailto:sage [2010/02/28(日) 02:52:42 ID:oz3AO1O4] WSH(VBScript)で「C:\TechEzo\Round23.txt」内の「ようこそ」を含む行を表示する Set fso = CreateObject("Scripting.FileSystemObject") Set regEx = New RegExp Set tempFile = fso.OpenTextFile("C:\TechEzo\Round23.txt") regEx.Pattern = "ようこそ" Do Until tempFile.AtEndOfStream tempLine = tempFile.ReadLine If regEx.Test(tempLine) Then WScript.Echo tempLine End If Loop これを見て「オブジェクト指向だから素晴らしい」とか 「シェルスクリプトに比べて簡単」とか思う人はいないでしょう。 管理者や一般のエンドユーザなど、ノンプログラマも使う言語を こんなふうに設計したMSは頭が悪いとしか思えないです。
604 名前:login:Penguin mailto:sage [2010/02/28(日) 03:01:02 ID:SsRM0ruv] マルチ相手によーやるな
605 名前:login:Penguin mailto:sage [2010/02/28(日) 09:04:34 ID:JCw0fVKj] >>603 Window Power Shellもしかり。ちょい使いするには厳格すぎる。 あまりハードルを下げるとMS専門鯖管にスキルが付いてLinuxに行っちゃうからじゃね?
606 名前:login:Penguin mailto:sage [2010/02/28(日) 11:13:46 ID:ZpjvZrys] 指定したディレクトリ以下を再帰的に検索して 同じディレクトリに大文字小文字違いでファイル名が重複して存在してた場合 例) ABC.txt abc.txt abc.TXT どれか一つ(どれでもいい)を残してあと消去するってのをやりたいけどどうやんの
607 名前:login:Penguin mailto:sage [2010/02/28(日) 11:15:22 ID:wBfYi/JJ] >>603 見たら、ハードル高くしたらむしろ出来る奴こそLinuxに行ってしまいそうにオモタ
608 名前:login:Penguin mailto:sage [2010/02/28(日) 11:57:18 ID:C3UADE41] >>606 perl か何かで書いた方が楽じゃないかな。
609 名前:login:Penguin [2010/02/28(日) 11:58:42 ID:qTqfFliX] >>606 $ find /tmp/hoge* -type f /tmp/hoge1/ABC.txt /tmp/hoge1/abc.TXT /tmp/hoge1/abc.txt /tmp/hoge1/a b c.txT /tmp/hoge1/a b c.txt /tmp/hoge2/ABC.TXT /tmp/hoge2/ABC.txt /tmp/hoge2/DEF.txt $ find /tmp -type f | uniq -i -d -D --all-repeated=prepend | perl -00 -a -F'\n' -ne '{foreach $i (1..$#F){print "$F[$i]\n";}}' /tmp/hoge1/abc.TXT /tmp/hoge1/abc.txt /tmp/hoge1/a b c.txt /tmp/hoge2/ABC.txt ディレクトリの大文字小文字違いは考えてない。
610 名前:login:Penguin mailto:sage [2010/02/28(日) 14:28:15 ID:oz3AO1O4] >>609 それって答になってるの? ただ表示させてるだけじゃん。 表示させるだけならもっと楽な方法あるし。 $ ls -R .: ABC.txt Aca.TXT abc.Txt sample.sh test2 ./test2: ABC.txt Aca.TXT abc.Txt test3 ./test2/test3: DDD.TXT aBc.tXt $ find ./* -type f | grep -i 'abc.txt' ./ABC.txt ./abc.Txt ./test2/abc.Txt ./test2/ABC.txt ./test2/test3/aBc.tXt $ find ./* -type f | grep -i 'abc.txt' | uniq -i ./ABC.txt ./test2/abc.Txt ./test2/test3/aBc.tXt
611 名前:login:Penguin [2010/02/28(日) 14:46:18 ID:qTqfFliX] >>609 では、重複を探して、最初のを除いて、2つめ以降を出力してる。 この出方を>>606 の評価基準で見てもらい、不満なければ、 あと xargs rm につなぐ程度で済むべ。 >>610 の例だと、それは全部消していいものなの?
612 名前:login:Penguin [2010/02/28(日) 14:52:31 ID:qTqfFliX] もちろん>>609 が最適解だなんて思ってないんだけど、 >>610 のやり方だと、abc.txt って人が与えてるよね。何百個かある時はどうするの?
613 名前:login:Penguin [2010/02/28(日) 15:10:05 ID:qTqfFliX] ちょっと修正する。 $ find /tmp -type f | sort -f | uniq -i -d --all-repeated=prepend | perl -00 -a -F'\n' -ne '{shift @F; print join("\0",(@F,""));}' | xargs -0 ls -l 大丈夫そうなら最後の ls -l を rm に変更で。
614 名前:login:Penguin mailto:sage [2010/02/28(日) 15:41:09 ID:oz3AO1O4] A="" find . -type f | sort -f \ | while read F; do P=`echo "$F" | tr '[A-Z]' '[a-z]'` Q=`echo "$A" | tr '[A-Z]' '[a-z]'` if [ "$P" == "$Q" ] then echo "${F}を削除" # eval rm "$F" fi A="$F" done
615 名前:login:Penguin mailto:sage [2010/02/28(日) 15:47:27 ID:oz3AO1O4] すまん、evalはなくても動く。
616 名前:login:Penguin mailto:sage [2010/02/28(日) 15:59:45 ID:0w7cauqm] >>606 が良ければなんでもいいでしょうに
617 名前:login:Penguin [2010/02/28(日) 16:00:23 ID:diBS8T6m] >>614 いかにもシェルスクリプトらしい解決法だね perl使うほうがメンドイ
618 名前:login:Penguin [2010/02/28(日) 16:32:44 ID:qTqfFliX] 感心しました。なるほど、うまいですね。 僭越ながら少し手を入れてみました。(sh 対応、外部コマンド実行回数減らす) #!/bin/sh A="" Q="" find . -type f | sort -f \ | while read F; do P=`echo "$F" | tr '[:upper:]' '[:lower:]'` if [ "$P" = "$Q" ]; then echo "${F}を削除" # rm "$F" fi A="$F" Q="$P" done
619 名前:login:Penguin mailto:sage [2010/02/28(日) 19:19:20 ID:ZpjvZrys] 勉強になります
620 名前:login:Penguin mailto:sage [2010/02/28(日) 19:46:12 ID:v9A/VFIk] 別ディレクトリになった時 Q="" しなくていいの?
621 名前:login:Penguin [2010/02/28(日) 20:01:15 ID:qTqfFliX] >>620 >>609 で楽するためディレクトリの大文字小文字は考えないことにしたんだけど、 d/abc.txt と D/abc.txt を同一視しちゃってるので、本当ならダメ、なんでしょう。 find . -type d するループを外側につけるか、 ディレクトリ名見る if をつければ直せそう。改修頼みます >>620
622 名前:login:Penguin mailto:sage [2010/02/28(日) 20:11:12 ID:0w7cauqm] だからそういうのは>>606 が決めることだって。勉強になります、じゃなかろうに
623 名前:login:Penguin mailto:sage [2010/02/28(日) 20:50:11 ID:v9A/VFIk] #!/bin/sh A="." find ./dir -type f | sort -f | \ while read F; do P=`dirname $F`/`basename $F | tr '[A-Z]' '[a-z]'` Q=`dirname $A`/`basename $A | tr '[A-Z]' '[a-z]'` if [ $P = $Q ]; then echo "rm $F" fi A=$F done
624 名前:login:Penguin mailto:sage [2010/02/28(日) 22:25:55 ID:v9A/VFIk] 書き直したので貼り直しますね。 #!/bin/sh B="!" find . -type f | sort -f | \ while read F; do T="`dirname $F`/`basename $F | tr '[A-Z]' '[a-z]'`" if [ $T = $B ]; then echo "rm $F" fi B=$T done
625 名前:login:Penguin mailto:sage [2010/02/28(日) 22:43:51 ID:oz3AO1O4] >>624 スペースを含むディレクトリ作って実行してみ。
626 名前:login:Penguin mailto:sage [2010/02/28(日) 23:06:54 ID:v9A/VFIk] Windowsじゃあるまいし。
627 名前:login:Penguin mailto:sage [2010/02/28(日) 23:09:17 ID:Z6hm/tn2] 空白や日本語を許すかで世代間のギャップが存在するなw
628 名前:login:Penguin mailto:sage [2010/02/28(日) 23:11:07 ID:0w7cauqm] 用件的にsamba絡みと予想してたけどね。知らんけど
629 名前:login:Penguin mailto:sage [2010/02/28(日) 23:13:21 ID:1hHY9Dv5] linuxでフォルダ名に空白入れることはないな、色々面倒だし
630 名前:login:Penguin mailto:sage [2010/02/28(日) 23:15:53 ID:oz3AO1O4] >>626 シェル変数参照の際、値に含まれるスペースや*などの パス名展開の文字が解釈されてしまうのを防ぐため、 ダブルクオートで囲むのは常識。 Windowsじゃないとかいう問題ではなく、 シェルスクリプトを書く際の常識。
631 名前:login:Penguin mailto:sage [2010/02/28(日) 23:50:39 ID:fdN9Zkx+] カラだったときエラーになっちゃうしね
632 名前:login:Penguin mailto:sage [2010/02/28(日) 23:53:35 ID:v9A/VFIk] わかった。わかった。次回からそうするよ。
633 名前:login:Penguin mailto:sage [2010/03/01(月) 00:59:23 ID:IaBmVUuE] >>610 >ただ表示させてるだけじゃん。 findでヒットした結果には任意のコマンドを適用可能。 馬鹿か?
634 名前:login:Penguin mailto:sage [2010/03/01(月) 01:09:07 ID:6uFj7AQh] 俺は>>628 だからそもそもどうでもいいけど、それかなりどーでもいいぞ
635 名前:login:Penguin mailto:sage [2010/03/01(月) 01:09:42 ID:QTdHsVxq] >>606 ファイル名を全部小文字に変えて、重複してたら上書きされて結果的に一つ残る。 ってやり方でも出来ると思う。(効率は良くない) こんなスクリプト書いて /home/hoge/script/RENAME_lower.sh とか名前付けて chmod +x しておく。 #!/bin/bash START_DIR="`pwd`" while (test -n "${1}") ; do if [ -d "${1}" ] ; then cd "${1}" && ( pwd ; ls for i in *\.[Tt][Xx][Tt] ; do if [ -f "${i}" ] ; then mv "${i}" "`echo ${i} | sed y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/`" fi done ) fi shift cd "${START_DIR}" done ディレクトリを find とかで検索して RENAME_lower.sh で処理。 $ find . -type d -exec /home/hoge/script/RENAME_lower.sh {} \+
636 名前:login:Penguin mailto:sage [2010/03/04(木) 23:43:06 ID:oO8XEq75] #!/bin/shと#!/bin/bashはどちらがおすすめなの?
637 名前:login:Penguin mailto:sage [2010/03/05(金) 00:16:06 ID:IlIr0pSM] #!/bin/bash
638 名前:login:Penguin mailto:sage [2010/03/05(金) 00:19:11 ID:FZm9BOvl] #!/bin/bashだろjk
639 名前:login:Penguin mailto:sage [2010/03/05(金) 00:56:20 ID:GiIL1sMg] 用途次第。以下はsh ・shで書いても機能・速度が許容範囲で簡単に書ける場合 ・shでないといけない場合(busyboxとか)
640 名前:login:Penguin [2010/03/05(金) 08:08:46 ID:CTq7Tclv] >>5
641 名前:login:Penguin mailto:sage [2010/03/05(金) 08:37:14 ID:GiIL1sMg] そいつはこのスレのお約束+α。YOUのオススメを書きなよ
642 名前:login:Penguin mailto:sage [2010/03/05(金) 09:01:18 ID:lZJ9zNnO] 今どきのディストリなら sh -> bash が当たり前だろ
643 名前:login:Penguin mailto:sage [2010/03/05(金) 09:56:40 ID:y7mY4KkL] 使い捨てなら深く考えずどっちでも OK。 別のマシンでも使うならよく考える。
644 名前:login:Penguin mailto:sage [2010/03/05(金) 10:20:23 ID:8QC8E4i2] >>642 Debian、Ubuntuはdash
645 名前:login:Penguin mailto:sage [2010/03/05(金) 12:02:50 ID:kHG21Qzt] ださw
646 名前:login:Penguin mailto:sage [2010/03/05(金) 14:24:04 ID:ixxT+8DA] >>641 それはUNIX板のシェルスクリプトスレと勘違いして貼られたもん このスレのテンプレじゃあない >>5-10 を見ろ
647 名前:login:Penguin mailto:sage [2010/03/05(金) 15:49:37 ID:D7CZBw7a] bashの構文を使ってれば#!/bin/bash、使ってなくても#!/bin/bash
648 名前:login:Penguin mailto:sage [2010/03/05(金) 22:06:54 ID:1xo9OzwV] おとなもこどもも、おねーさんも#!/bin/bash
649 名前:login:Penguin mailto:sage [2010/03/05(金) 22:38:25 ID:t7X9IkaB] BSD系の人たちはどうすれば?
650 名前:login:Penguin mailto:sage [2010/03/05(金) 22:41:37 ID:IlIr0pSM] 板違いです
651 名前:login:Penguin mailto:sage [2010/03/05(金) 23:39:40 ID:GiIL1sMg] $ sudo -i # cd /bin;\rm -f sh;ln -s bash sh
652 名前:login:Penguin mailto:sage [2010/03/06(土) 00:07:36 ID:z+KgTZo4] >>651 sudo ln -fs bash /bin/sh でいいんじゃね。
653 名前:login:Penguin mailto:sage [2010/03/06(土) 00:53:02 ID:zGIcPUED] コピペはできないようにしたかったから二行 ln -f は嫌い rm -f が好き
654 名前:login:Penguin [2010/03/06(土) 11:13:20 ID:8ckQdz96] ・sh では、while中で代入した変数は、ループから抜けると使えなくなりますか? ・それがPOSIX仕様なら、一時ファイルを作る以外に、よい回避方法はありますか? $ date | while read line; do last="$line"; done; echo "THE LAST: $last" を Debian lenny の dash, bash, ksh で実行した場合、ksh 以外では値が残りません。