1 名前:名無しさん@お腹いっぱい。 [2007/02/15(木) 14:28:44 ] シェルスクリプトの総合スレです。 スクリプトのお勉強・自慢・腕試しなどにどうぞ。 まずは注意点、リンク、地鎮祭など(>>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 でトレースしましょう。 前スレ シェルスクリプト総合 その7 pc10.2ch.net/test/read.cgi/unix/1157601611/
7 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/02/15(木) 15:50:29 ] >>1 乙
8 名前:名無しさん@お腹いっぱい。 [2007/02/15(木) 16:34:15 ] 3秒間のウエイトっていれる方法ありますか?
9 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/02/15(木) 16:35:58 ] >>8 sleep 3
10 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/02/15(木) 16:36:49 ] sleep 3 じゃダメなんか?
11 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/02/15(木) 16:41:00 ] sleep 3
12 名前:8 mailto:sage [2007/02/15(木) 17:35:57 ] >>9-11 ありがとう
13 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/02/15(木) 19:50:58 ] www.linux.or.jp/JM/html/tcsh/man1/tcsh.1.html
14 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/02/15(木) 21:08:02 ] >>1 乙 > □最近のシェルスクリプト本(1) なんかダブってるけど、これの(2)ってのはあるの?
15 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/02/15(木) 21:29:48 ] >>14 ! ダブリは1のミス (2)は(まだ)ない
16 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/02/15(木) 22:41:49 ] ________ ,r'´:.:.:.:.:.:.:.:`.、 ,r'/:.:.:.:.:.:.:.:.、ヽ;,:.ヽ l:.i:.:.i:Mヽヽl:.:i:ヽ;,;,;l !:l:i.:トl レレVレ!:.:!-、! ヽトl:f_! '´i_,トl:.:.!_,ノ シエルスクリプトって l.ヽ '__, l.:.:!/ なんですか? l:.:| `iー‐'´l:.;!`! /!;!´ヽ,! -l;!´`ヽ、 ,r'´! 人 ,r''ヽ !::;;l /:::;ヽ ,r';;;r':::ヽ l:;;/´:::::::::::::;ヽ,r';;/;;:::::::::ヽ .l;;i:::::::::::::::::::::::::;;;;;;ヽ;::::::::::ヽ
17 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/02/15(木) 22:47:32 ] (||)
18 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/02/15(木) 22:54:41 ] 今度シェルスクリプトを覚えなければならなくなったのですが、 私のマシンにはシェルがインストールされていないようです (メニューにそれらしいものがない) シェルを追加インストールするには、どこをクイックすればいいですか? OSはKDE3.5です。
19 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/02/15(木) 23:02:42 ] catの無駄遣いなんかに関する すごい説得力がある スライド ttp://www.netmeister.org/misc/useless_use.pdf
20 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/02/15(木) 23:08:35 ] >>19 面白いから順に見たけどこれ長いよ!
21 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/02/15(木) 23:09:38 ] てかおもしろすぎる
22 名前:名無しさん@お腹いっぱい。 [2007/02/15(木) 23:11:51 ] FTP に複数コマンドを渡す際に、複数行を「+」で囲んで FTP のコマンドを記述しています。この方法は他のシェルスクリプトからのコピーです。 一応意図した動作をしているのですが、仕様を知らずに使っているため不安です。 この方法の仕様が説明されているサイト等を教えて頂けませんか?man で sh と ftp を見ましたが、該当の記述はありませんでした。 よろしくお願いします。
23 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/02/15(木) 23:49:48 ] >>18 シェルがないと起動プロセスがまともに進行しないので、 ないってことはあり得ない。 また、KDEはOSではなくて、デスクトップ環境の一種。 あなたが必要なのはKonsoleというKDEのアプリケーションと、 エディタ。
24 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/02/15(木) 23:52:19 ] 瓶詰めぬこカワユス。
25 名前:名無しさん@お腹いっぱい。 [2007/02/16(金) 00:42:36 ] lsの結果を配列に入れるにはどうすればいいでしょうか?そもそもできますでしょうか?
26 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/02/16(金) 00:52:10 ] headでアレかよ!
27 名前:名無しさん@お腹いっぱい。 [2007/02/16(金) 02:00:22 ] >>22 ftp<<EOF コマンド EOF じゃダメなの?
28 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/02/16(金) 02:55:27 ] >>19 みて awk 覚えようと思った
29 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/02/16(金) 03:56:04 ] 最後の三ページを忘れるなよ。 catの無駄遣いも可愛いからいいじゃないか。
30 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/02/16(金) 07:22:48 ] >>25 sh$ set `ls` sh$ echo "$1" sh$ echo "$2" : bash$ hairetsu=(`ls`) bash$ echo ${hairetsu[0]} bash$ echo ${hairetsu[1]} :
31 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/02/16(金) 13:31:32 ] ここはネタスレと解釈してもいいですか?
32 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/02/16(金) 15:03:09 ] >>28 cutもたまには使ってあげようと思った
33 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/02/16(金) 15:58:55 ] たまにはぬこの蚤とりしようとおもた
34 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/02/16(金) 17:25:28 ] たまにはK.I.S.Sの格好もしてみようと思った。
35 名前:名無しさん@お腹いっぱい。 [2007/02/16(金) 20:24:12 ] 大至急、BourneとBASHを覚えなければならなくなったのですが、 手っとり早いお勧めの方法は何ですか? はっきり言って、理論的なことはどうでもいいです。 最小限の努力で、最大限、見ためだけ高スキルに見えればいいです。 よろしくお願いします。
36 名前:名無しさん@お腹いっぱい。 [2007/02/16(金) 20:24:38 ] ちょっと思ったのですが、シェルスクリプトでC言語の#ifdefマクロみたいなことって 出来ますか?
37 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/02/16(金) 20:26:07 ] >>36 Yes.
38 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/02/16(金) 20:43:20 ] >>35 スクリプトは一日にして成らず、だ だがあなたの要求だけを見ると高スキルのスクリプトを真似て作ればいいと思われ 問題は努力もしないで中身が理解できれば・・・だが
39 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/02/16(金) 20:48:59 ] あのTシャツ欲しいと思った
40 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/02/16(金) 20:50:49 ] >>35 英語でのコミニュケーション能力と、pythonとperlはいいのかい?
41 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/02/16(金) 20:51:33 ] >>39 つくればいいじゃん
42 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/02/16(金) 20:52:54 ] >>40 はい。そっちの方は無問題です。
43 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/02/16(金) 20:53:38 ] じゃあとりあえず突撃してみたら?
44 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/02/16(金) 21:01:02 ] www.thinkgeek.com/tshirts/ 探せばあるかも。
45 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/02/16(金) 21:07:28 ] ワロタ Looking For A Japanese Girlfriend www.thinkgeek.com/tshirts/japanese/74a3/ で、 Go away or I will replace you with a very small shell script www.thinkgeek.com/tshirts/frustrations/374d/
46 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/02/17(土) 00:40:46 ] そこ結構面白いな。 鬼畜米英じゃなく鬼畜米兵になっとるw www.thinkgeek.com/tshirts/japanese/74b1/
47 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/02/17(土) 01:05:58 ] >>28 複数の grep が一つにまとまるのがいい感じだな。
48 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/02/17(土) 01:34:50 ] 著書なんかには if [ i = y ] then echo aaa fi とかあるのだが、実際やってもErrorがでて・・・ if [[ i = y ]] then echo aaa fi みたいに2重括弧にしないといけないのはなぜなんでしょうか?
49 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/02/17(土) 01:35:53 ] ググったり本で調べたりしてどーしてもわからないことがあるので質問させてください。 ksh で 文字コードで grep するエレガントな方法が分かりません。 bash なら、 grep $'\011' hoge.txt で可能だということは分かっています。 ksh だと、 grep "`echo '\011\c'`" hoge.txt で同じことが可能だということは分かっていますが、bash ほど簡潔ではありません。 (いずれも Linux 上で確認) 昔、Solaris 8 上の ksh スクリプトで bash での記述例くらいに簡潔に書かれたコードを見た記憶があるのですが…。 分かる方がいらっしゃったらご教授ください。お願いします。 できれば ksh88 でお願いします。
50 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/02/17(土) 02:51:41 ] >>48 [ はコマンドで、[[ は bash の構文の一つ。 /bin/sh で書くなら [[ は使えない。 あと、比較演算子の書き方やその解釈がちょっと違う。 [ 1 -gt 0 ] と [[ 1 > 0 ]] とか [ "1+1" -ge 2 ] と [[ "1+1" >= 2 ]] とか 詳細は man bash ね。
51 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/02/17(土) 10:33:59 ] >>48 if [ i = y ] then echo aaa fi ↑でエラー出ないよ。 もしエラーが出たんなら、[ や ] や = の前後のスペースを忘れたとか、 そういう問題だと思う。([ ]か [[ ]]かの問題とは違う) [[ ]] は Bourneでは使えないので、できる限り [ ] で書くのがお勧め。
52 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/02/17(土) 10:58:27 ] すいません、 名前にスペースの入ったファイル名のリストを for とか foreach に渡すときは どうしたらいいでしょうか。 for f in `find なんたらこうたら`; do ほげ "$f"; done; みたいなことをしたいのですが find の結果のファイル名にスペースがある場合、スペースのとこで割られるようです。
53 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/02/17(土) 11:10:46 ] >>52 IFS=' ' for f in `find なんたらこうたら`; do ほげ "$f"; done; IFSに改行コードを入れて、それを区切り文字にする。
54 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/02/17(土) 11:13:56 ] >>52 find の部分をコマンド置換すると、ファイル名のデリミタとしての半角空白なのか、ファイル名中の半角空白なのがシェルから見ると区別がつきません。 上手く動かない原因はこれです。 よってコマンド置換で実現するのは諦めましょう。 - start -------------------- find . -type f | while read f do echo $f done - end ---------------------- 自分がパッと思いつくのはこれ。 ただ、read コマンドは遅いので、もっとエレガントを考える余地があるかもしれません。 ところで、sh に foreach ってありましたっけ?
55 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/02/17(土) 11:15:41 ] #!/bin/sh IFS=\ for a in `find . -type f`;do echo "$a";done これでも、名前に改行が含まれるとダメなのでfind -execをおすすめする。
56 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/02/17(土) 11:20:18 ] >>53 その方法、いいですね! でも環境変数を触るのって、どうなのでしょう? 触るとしても、 - start -------------------- OLD_IFS=$IFS IFS=' ' for f in `find . -type f` do echo $f done IFS=$OLD_IFS - end ---------------------- を推奨すべきかと。
57 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/02/17(土) 11:27:22 ] いろいろ条件が許せば、find -print0とxargs -0のコンビにお任せする。
58 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/02/17(土) 11:29:43 ] >>55 >>57 ああ、本当だ。改行がファイル名に入るとアウトですな。 for や while だと完全ではないですね…。
59 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/02/17(土) 12:20:55 ] >>56 なんでそんなことする必要があるんだ? >>53 のスクリプト作って、実行した後の $IFS 見てみた方がいいよ。
60 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/02/17(土) 13:11:12 ] 続きがあるとは想像できないのだろうか?
61 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/02/17(土) 13:18:38 ] >>60 続きがあっても関係ない。 ↓これ試してみろ。 HOGE=hoge command echo $HOGE
62 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/02/17(土) 14:04:31 ] $ cat hoge IFS=' ' for f in `find -type f`; do echo "$f"; done; $ sh hoge sh hoge for: not found hoge: 2: Syntax error: ";" unexpected
63 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/02/17(土) 14:09:59 ] $ cat hoge IFS=' ' for f in `find . -type f`; do echo "$f"; done; だった。
64 名前:名無し募集中。。。 mailto:sage [2007/02/17(土) 21:45:40 ] 変数=値 command ( IFS='改行コード' for ... ) で実行した際 IFSの変更に対して安全かどうなかなんて元のお題には意味なくないか? 元のお題だとそもそもfindで引っかかる数(吐き出す文字数)が予測不能なんだし tabやspaceのことも含めて for はやめて find | xargs か while の方が安全なんだが あとファイル名に改行コードが含まれる場合は?とかこの板的には重要かもしれん けど、そこまで考えるとどうしたら処理できるか?より、そんなファイルが作られないように するにはどうしたらいいか?という問題になる気がする その上でそういうファイルをリネームや削除するスクリプトを組みたいっていうなら 環境や状況に合わせたものを組めばいい、動くことが重要で エレガントな一般的解法なんて考えても無駄だし必要もないはず
65 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/02/17(土) 22:54:12 ] もとのお題に対してはどうでもいいが、if, for, while, caseといった フロー制御コマンドは変数=値 command形式では使えないという事実は、 このスレ的には重要。
66 名前:52 mailto:sage [2007/02/18(日) 09:45:52 ] 皆さん、どうもありがとうございました。なるほど、IFS とか while ですか。 自分の環境では改行がファイル名に入ることはとりあえずないんですが、 より厳密には find -print0 として IFS に NUL をセットすればいいんですかね? と思ったんですが... あれ、IFSにNULをセットって、どうやればいいんでしょう? たびたびすいません。
67 名前:名無しさん@お腹いっぱい。 [2007/02/18(日) 11:30:58 ] grep -e 'foo (\w+?) bar' file とした場合、 perl などでは \1 で (\w+?) の内容を 参照できるのですが、 grep (sed, awk など) でそうする方法はありますか?
68 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/02/18(日) 12:52:25 ] >>52 厳密にやりたかったら 1 find -print0を使ってNULLをレコードの区切りと認識できるコマンドで 処理する(shのwhileやforは使用できない) 2 find -execで1個づつ処理する。 3 perlで全部やる >>67 sedにはある。awkは知らん。マニュアル嫁。
69 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/02/18(日) 13:03:35 ] 自分が知らんならマニュアル嫁とかほざくな。
70 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/02/18(日) 13:29:37 ] マニュアル嫁よ>>69
71 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/02/18(日) 14:30:15 ] 言うこと無くなると何度も前と同じ事を 繰り返してほざく知恵遅れが小学校の時にいたんだが、 >>68 =70 でそいつを思い出した. もしかするとそいつかもw
72 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/02/18(日) 15:13:28 ] 何度諭されてもしつこく絡んでくる >>69 =>71 みたいなアフォもいたなぁ。 まあ、諭されてることすら理解できてないんだろうけど。
73 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/02/18(日) 15:32:02 ] 72 が必死すぎる件
74 名前:69!=71 mailto:sage [2007/02/18(日) 15:33:37 ] おっと俺はこっちだ。 他人に煽られたからってお前がその煽り文句を真似して効果があるとは限らんぞ。
75 名前:68 mailto:sage [2007/02/18(日) 15:50:25 ] いくら煽っても>>67 は回答を得られないという事実。 >>71 残念ながら>>70 は俺じゃない。>>69 のような糞蝿は煽るほどの価値もない。
76 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/02/18(日) 15:59:07 ] クスクスクス
77 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/02/18(日) 17:00:23 ] (・∀・)ニヤニヤ
78 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/02/18(日) 23:20:22 ] >>67 どっちでもできる。 man に載っているよ。
79 名前:64 mailto:sage [2007/02/19(月) 05:56:44 ] >>65 お、仰るとおりですな >>52 普通?は find コマンドと IFS 変数は関係ないよ いや余程特殊な環境があるなら分からんけど IFS 変数は Bourne Shell 系 ( sh, ksh, bash など) で区切り文字の定義に使われる で find コマンド自体はこの環境変数を参照しないから関係ない find -print0 は出力する各ファイル名にヌル文字を付加する で find -print0 が使える環境なら xargs -0 も使えるんじゃない? >>57 さんが既に言ってるけどね >>67 , >>78 sed, grep はあるけど awk はなかったような
80 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/02/19(月) 06:11:10 ] >>79 grep ではどうやんの?
81 名前:名無し募集中。。。 mailto:sage [2007/02/19(月) 06:55:03 ] >>80 環境によっては使えないかもね manでもネットでも調べれば?
82 名前:64 mailto:sage [2007/02/19(月) 07:03:11 ] >>52 あ、find -print0 と IFS を弄って while を組合わせたいって意味なら駄目だよ >>68 さんの言ってる方法で それより -print0 オプションが使えない環境もあるから まずはそっちを調べた方がいいよ
83 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/02/19(月) 07:57:15 ] >>79 findコマンド自体では IFSは当然関係ないが、 findの結果を ` ` で取り込んで forの引数にする際に IFSが参照される。(IFSの影響を受ける) なので、スペース入りファイル名の問題なら、 IFSの内容を改行コードのみにして for f in `find ...` を実行すればOK なことは既に上に書かれている。
84 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/02/19(月) 17:57:07 ] >>68 ちなみに NULL じゃなくて NUL ですね。
85 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/02/19(月) 22:58:23 ] >>84 頭ではわかっているが、指が憶えてしまっているのでしょうがない。
86 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/02/20(火) 02:12:08 ] >>79 man awk の文字列関数の項を参照してみな。 もしかしたら gawk だけかもしれないけど。
87 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/02/20(火) 10:40:49 ] gawk 3.0 以上の拡張機能でございます。
88 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/02/20(火) 11:31:38 ] 大嘘つき
89 名前:64 mailto:sage [2007/02/20(火) 17:58:58 ] いつから正規表現板に?あと自分の環境が全ての人しか居ないの? 素のAIXじゃ、grep '\(a\)\1' はできたが egrep, grep -E は無理みたい 拡張正規表現だと \1 は使えなさそうあとawkも gawk は知らんけどgawkは無い環境も多いからawkとgawkを一緒にするな awkと言えば昔ながらの素のawkのことだよ linuxでshを語るアホウ(そりゃashだ)と同じやね
90 名前:64 mailto:sage [2007/02/20(火) 19:15:33 ] 最後だけ削除 shについては、Cygwinもash、今時の素のAIX、HP-UXなら実はkshだったりするから Solaris、FreeBSDは知らんけど例としてはかなり不適切やね、無視してくれ
91 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/02/20(火) 21:12:01 ] kshはねーよ。デフォルトでは使いにくい。 set -o emacs set -o vi どっち?
92 名前:osuga [2007/02/20(火) 22:49:15 ] >>90 HP-UXのデフォルトがkshかよ
93 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/02/20(火) 22:58:23 ] >>64 は面白いな
94 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/02/20(火) 23:48:35 ] >>89 > 素のAIXじゃ、grep '\(a\)\1' はできた 参考までに grep のバージョン教えてくれ。 >>90 > Cygwinもash それいつの話? 手元の環境だと ash は入れてあるけど、sh の実体は bash になってるよ? $ uname -r 1.5.24(0.156/4/2) $ /bin/sh --version GNU bash, version 3.2.9(11)-release (i686-pc-cygwin) Copyright (C) 2005 Free Software Foundation, Inc.
95 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/02/21(水) 02:37:28 ] >>89 POSIX的には拡張正規表現(ERE))でbackrefernceが使えるということは 一言も書いていないので、grep -E でbackrefernceが使えるGNU grep なんかが拡張しているということなんだろう。多分。
96 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/02/21(水) 04:14:13 ] それにしてもネタないね 叩きはすぐ集まってくるけど grep '\(a\)\1' は実際できるし(AIX5.3、SFU)、基本正規表現(BRE)にあるんで linuxやHP-UXのgrepでも出来た記憶がある、まぁ昔の事なんで自信はない 拡張正規表現(ERE)にはBREの\( \)にあたるものが無いようで >>95 はフォローしてくれたんだろうけど 実際にやってみたが egrep, grep -E じゃできなさそう(AIX5.3)と既に書いている HP-UXのshについては昔、といっても11iなんだが 純粋なshでは使えないはずの [[ ]] や alias なんかが使えたんで調べたら sh-posix とか書かれていて、sh->kshで拡張されたものがほぼ?まんま拡張されてた なんでHP-UXのshはksh、って位の認識だったんだが POSIX の sh いうんやから [[ ]] や alias が使えるのが今時の純粋な sh ということかもしれんね
97 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/02/21(水) 09:12:36 ] おまえら >>1 読め 正規表現については以降はこちらへ ↓ 正規表現 pc10.2ch.net/test/read.cgi/unix/1039165754/
98 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/02/21(水) 10:35:28 ] sh-posix ってのがあるんですよ奥さん
99 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/02/21(水) 10:37:51 ] >>98 だから、sh-posixの部分だけ書けばいい。 正規表現の部分はスレ違い。
100 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/02/21(水) 10:57:54 ] 本当にそういうものはあるのかな? solaris においては /bin/sh は sh-posixではなく /usr/xpg4/bin/sh が ごにょごにょ FreeBSD では /bin/sh は IEEE Std 1003.2 (``POSIX.2'') に対応する途上 NetBSD では /bin/sh は POSIX 1003.2 and 1003.2a に対応する途上 OpenBSDでは (ry HP-UX では
101 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/02/21(水) 10:59:10 ] あ、きみ宛というよりは>>96 宛てかな?
102 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/02/21(水) 12:16:07 ] docs.hp.com/ja/B2355-60104-02/sh-posix.1.html でも嫁 現在のHP-UXの/bin/shはsh-posixであって、古いbourne shellは存在しない sh-posixはkshによく似ているが別物 >>90 は間違いだらけ
103 名前:95 mailto:sage [2007/02/21(水) 12:40:01 ] >>96 すまん。寝る直前に書いたせいか フォローのつもりがわけのわからんものになってた。 GNU のツールでそうだからといって、 それがUNIX全般でいえるかというと違うよね。 というのを補足したかった(awkとgawkとか)
104 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/02/21(水) 13:49:30 ] >>102 以前は /usr/old/bin/sh に Bourne shell があったんだけど今はもうないの? 手元に実機がないので確認できない。
105 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/02/21(水) 14:03:34 ] >>104 実機がなくても参照できちゃうんだなこれが docs.hp.com/ja/B2355-60104-02/sh.1.html - 注記 : B シェル (/usr/old/bin/sh) は、HP-UX 11i Version 1.5 以降、削除されました。 代りに、POSIX シェル (/usr/bin/sh) を使ってください。 - 本当に実機がこうであるかは確認していないけどね〜
106 名前:ksh [2007/02/21(水) 19:49:50 ] こんばんわ ペソです。 シェル初心者ですが教えてください。 「ディレクトリの中にあるファイルで、実行権限のないファイルを読み込み そのファイルに実行権限を付与するシェルが必要なのですがどうすればいいのかわかりません。 OS: AIX shell: ksh #!/bin/ksh for filename in ${1:+$1/}* ; do newfilname=$(print $filename |tr [A-Z] [a-z]) newfilename=$newfilename%.} print "$filename -> $newfilename" mv $filename $newfilename done とりあえず自宅のfedora core5 のkshで実行したら、 ' unexpectedtax error: ` と表示されて困ってます。 どうか教えてください。お願いします。
107 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/02/21(水) 19:56:52 ] >>106 質問が支離滅裂。実行権限を付けたいといっているのに、 スクリプトではファイル名の大文字を小文字にリネームしようとしている。 あと、クォートが正しくないので、スペース入りファイル名とかでコケるだろう。 釣りじゃないならもう一度よくまとめてから質問し直せ。