トップページunix
1001コメント273KB

シェルスクリプト総合 その5

レス数が950を超えています。1000を超えると書き込みができなくなります。
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 でトレースしましょう。
0856名無しさん@お腹いっぱい。2006/03/21(火) 02:41:54
-regex って、OS 依存だから、ポータブルなシェルスクリプトに
したいんだったら、egrep 使った方がいいよ。
OS 依存でいいなら構わんが。
0857名無しさん@お腹いっぱい。2006/03/21(火) 02:53:14
>>856
egrepってOS非依存か?
0858名無しさん@お腹いっぱい。2006/03/21(火) 03:35:45
もちろん非依存だよ。まあ当然 UNIX 系 OS に限るけどね。
0859名無しさん@お腹いっぱい。2006/03/21(火) 03:47:17
>>856
-regex って GNU 拡張だったんだ。
憶えておくよ。

egrep と grep -E ってどっちがポータブルなの?
0860名無しさん@お腹いっぱい。2006/03/21(火) 03:50:09
-regex は 4.4BSD 系 find にもあるから、GNU 拡張というよりは
もう少しポータブルだけどね。4.4BSD 系 OS のマニュアルには、
拡張機能だと明記してあるんだが。

egrep と grep -E では、egrep の方がポータブル。
0861名無しさん@お腹いっぱい。2006/03/21(火) 07:38:29
相変わらずラベル低いなw
0862名無しさん@お腹いっぱい。2006/03/21(火) 09:39:23
>>855,856
findの -regexがダメというなら、パイプで egrepするよりは、
find自身で -name '*.c' -o -name '*.cc' -o -name '*.cpp'
でいいと思う。ちゃんと書き直すと、

find . -type f \( -name '*.c' -o -name '*.cc' -o -name '*.cpp' \) \
| sed 's/.*\.//' | sort | uniq -c | sort -nr
かな。

findの -type fを省略していいなら、その後の \( \) も省略できる。
0863名無しさん@お腹いっぱい。2006/03/21(火) 11:19:30
ここの馬鹿どもはPOSIXとか知らんのか?
0864名無しさん@お腹いっぱい。2006/03/21(火) 11:25:04
>>863
よし、存分に語れ。
0865名無しさん@お腹いっぱい。2006/03/21(火) 11:29:26
>>863
それはそれは…是非ご教授願いたい。
0866名無しさん@お腹いっぱい。2006/03/21(火) 11:40:07
>>863
POSIX!何ですかそれは!是非ご啓示ください!!
0867名無しさん@お腹いっぱい。2006/03/21(火) 11:46:58
POSIXを読むのは有料だし、
実際の各種OSで使われているシェルやコマンドは、
POSIXと同じではない。
だから、そもそもPOSIXと同じではない各種OS間のポータビリティを
考えるなら、POSIX云々ではなく、実際に各種OSでの状況を調べて
対応するのが実践的で現実的。
0868名無しさん@お腹いっぱい。2006/03/21(火) 13:34:46
opengroup.org キタ━━━━━━(゚∀゚)━━━━━━ !!!!!
0869名無しさん@お腹いっぱい。2006/03/21(火) 14:09:32
> POSIXを読むのは有料だし、

登録は必要だけど、無料だよ。
ttp://www.unix.org/version3/online.html
0870名無しさん@お腹いっぱい。2006/03/21(火) 14:38:19
>>867
POSIX新聞?うちは取らないよ。
0871名無しさん@お腹いっぱい。2006/03/21(火) 15:47:04
>□お約束
>・特記なき場合はbourne shがデフォルトです。

今どき、bourne shをデフォルトにしているのなんて、
Solarisくらいしかないじゃん。
0872名無しさん@お腹いっぱい。2006/03/21(火) 15:54:56
>>871 Linux板に帰れ
0873名無しさん@お腹いっぱい。2006/03/21(火) 16:04:46
いや、ゴミが帰ってきても困るんだが。
0874名無しさん@お腹いっぱい。2006/03/21(火) 16:08:57
>>860
> egrep と grep -E では、egrep の方がポータブル。

嘘おっしゃい。
0875名無しさん@お腹いっぱい。2006/03/21(火) 16:09:18
du -a と find . -type f だと、やっぱり find の方が速い?
0876名無しさん@お腹いっぱい。2006/03/21(火) 16:30:18
スクリプトでは難しいけど、カレントディレクトリにあるディレクトリ数分のthreadを作ってパラレルにfind
するようなプログラム作るとめっさ速そうなんだけど。無理?
0877名無しさん@お腹いっぱい。2006/03/21(火) 16:41:16
> 嘘おっしゃい。

Linux とか POSIX の仕様しか知らない最近の人だと、そう思うかも
しれないね。SUSv3 を見ると egrep は載ってなくて grep -E だけ
が書いてあるし。

でも、もともと egrep と grep は別のコマンドで、使っているアル
ゴリズムも egrep は DFA、grep は NFA で異なっていた。10年くらい
前だと、grep に -E オプションがない OS も沢山あったよ。
これに対し、egrep はベル研 UNIX 時代から存在する由緒あるコマンド
で、事実上すべての UNIX に存在するはず。

ttp://www.bookshelf.jp/texi/autoconf-ja/autoconf-ja_10.html
> POSIX 1003.1-2001では,もはやegrepを要求していませんが,より古いホスト
> の多くはまだPOSIXのgrep -Eでの置換をサポートしていません.この問題を回
> 避するため,AC_PROG_EGREP を呼び出し,$EGREPを使用してください
0878名無しさん@お腹いっぱい。2006/03/21(火) 16:48:05
>>877
Solarisだと/usr/xpg4/bin/grepにしか-Eオプションは無くて/usr/bin/grepでは-Eは使えない。
他のOSでも使えるようにgrep -Eをスクリプトに書くのはちょいめんどくさいな。
0879名無しさん@お腹いっぱい。2006/03/21(火) 16:54:26
>>867
まずはPOSIXを読めな? ごたくはそれからだ。
0880名無しさん@お腹いっぱい。2006/03/21(火) 17:01:07
>>876
pthread使ったファイル検索プログラムがButenhofのpthread本に
載ってたような。
0881名無しさん@お腹いっぱい。2006/03/21(火) 18:53:18
POSIXの仕様に合わせると、現実の仕様に合わない罠。
>>877 見ても、POSIXよりも autoconfの方がよほど現実的というところか。
0882名無しさん@お腹いっぱい。2006/03/21(火) 21:15:57





              相変わらず

0883名無しさん@お腹いっぱい。2006/03/21(火) 21:27:27
>>882



        鬱ですねぇ。
08848822006/03/21(火) 22:48:52
>>883
鬱で引きこもりですけど何か?
僕のクラッキング武勇伝でも聞くかい?
0885名無しさん@お腹いっぱい。2006/03/22(水) 02:14:10
スクリプトキディってやつか。語ってみる?
0886名無しさん@お腹いっぱい。2006/03/22(水) 09:40:58
よ、よし、俺のハッキングデビューはWinNuke。
その後は究極のProxy★ガブリエナイで優雅にproxy生活だったさ!!
0887名無しさん@お腹いっぱい。2006/03/22(水) 18:01:04
読み方 : スクリプトキディ
分野 : セキュリティ > ネットワーク


 インターネット上で公開されている操作が簡単なクラックツールを利用して、興味
本位の不正アクセスを試みる「幼稚な」クラッカー。
クラックツールは既に広く知られているセキュリティホールを悪用するように作成されているため、
セキュリティパッチを確実に適用することで、ほとんどのスクリプトキディによる攻撃は防止できる。
クラックツールを使えば深い知識や高度な技術がなくても簡単に攻撃を行なうことができるため、
数の上ではクラッカーのほとんどはスクリプトキディであると言われる。
0888名無しさん@お腹いっぱい。2006/03/23(木) 15:38:21
一番汎用性があるシェルスクリプトは Bourne Shell で書かれたもの
という理解でよろしいでしょうか?
0889名無しさん@お腹いっぱい。2006/03/23(木) 15:39:59
>>884 何気聞きたい
0890名無しさん@お腹いっぱい。2006/03/24(金) 02:30:15
>>888
いえ Korn Shell です。
0891名無しさん@お腹いっぱい。2006/03/24(金) 07:37:06
Debianだと checkbashisms なんてコマンドがあったりするな。
まあそんなに汎用性気にするならPerl使えという気もするが。
08927742006/03/24(金) 07:55:17
【日韓・野球】「ホームラン記録等には八百長疑惑もある王貞治(ワン・ジョンチ)、監督として成功」…韓国紙 ★4 [03/21]
http://news18.2ch.net/test/read.cgi/news4plus/1143149170/
0893名無しさん@お腹いっぱい。2006/03/24(金) 08:08:44
>>888
一番移植性が高いのはBourne Shellということで合ってる。
当たり前過ぎて誰も答えなかっただけ。

>>890
初心者が本気にするかも知れないから、そういう嘘書くのやめろ。
0894名無しさん@お腹いっぱい。2006/03/24(金) 09:31:20
>>893
では移植性の高さを定量的に比較し提示してください。
0895名無しさん@お腹いっぱい。2006/03/24(金) 09:42:42
>>894
誰もが常識として知っていることをあなたに説明して教える筋合いはない。
知りたければ自分で知ろうとする努力をしなさい。
0896名無しさん@お腹いっぱい。2006/03/24(金) 09:45:05
>>895
つまり根拠なき妄言てことですな。自白乙。
0897名無しさん@お腹いっぱい。2006/03/24(金) 09:48:12
>>896
大丈夫。みんな妄想してるから。
0898名無しさん@お腹いっぱい。2006/03/24(金) 10:42:36
まあ、釣りだろうけど、
「kshが移植性が一番高い」などとマジで言ってるなら重症だぞ。
ヨソでそんなこと言って恥かくなよ。
0899名無しさん@お腹いっぱい。2006/03/24(金) 10:50:45
罵り合いで盛り上がっているところ申し訳無いが、
汎用性と移植性は違う気がする。

汎用性は用途の広さだよね。
それならどのシェルもほとんど変わらない気がする。
0900名無しさん@お腹いっぱい。2006/03/24(金) 10:53:40
>>894
$ ssh freebsd-host
freebsd$ ksh
ksh: not found
freebsd$ exit
$ ssh linux-host
linux$ ksh
ksh: not found
linux$ exit

....noway, what more can I say ?
0901名無しさん@お腹いっぱい。2006/03/24(金) 11:18:12
おぃおぃ
お前のマシンに当該シェルがあるかどうかなんて聞いちゃいねー
0902名無しさん@お腹いっぱい。2006/03/24(金) 11:25:36
>>901
そのとおりだが、漏れもpdkshなんて使わんからアンインストールしてるよ。
0903名無しさん@お腹いっぱい。2006/03/24(金) 11:29:27
>>901
はぁ?
どんなホストでも、誰のホストでも、
デフォで動くというのが「移植性」の必須条件なわけだが。
0904名無しさん@お腹いっぱい。2006/03/24(金) 11:31:39
んなこたーない
0905名無しさん@お腹いっぱい。2006/03/24(金) 11:34:37
>>903
そういう標準化の為に色々大人が事情をつくるのよ
どんなUNIX95のホストでもとか
POSIXに準拠したホストでもとか

0906名無しさん@お腹いっぱい。2006/03/24(金) 11:50:29
>>905
だからPOSIXって実際には使えないわけですね。
0907名無しさん@お腹いっぱい。2006/03/24(金) 13:38:49
準拠ってことばを知らないなら辞書でしらべなよ(^_^;)
0908名無しさん@お腹いっぱい。2006/03/24(金) 13:57:13
>>890
たくさん釣れましたね。
確かに、本当にKorn Shellが移植性が高かったら良かったかも知れませんね。
でも現実にはもう遅いですね。
0909名無しさん@お腹いっぱい。2006/03/24(金) 14:24:02
腎虚
0910名無しさん@お腹いっぱい。2006/03/24(金) 21:56:42
言葉遊び乙
0911名無しさん@お腹いっぱい。2006/03/24(金) 22:03:57
打倒米帝
0912名無しさん@お腹いっぱい。2006/03/24(金) 22:21:31
【設問1】
次の各項目を、その可能性が高い順番に並べよ。(10点)

(1) IPv6が普及する
(2) UNIX環境においてUTF8がEUCよりも普及する
(3) kshが最も移植性の高いシェルとして普及する
0913名無しさん@お腹いっぱい。2006/03/24(金) 22:45:38
(2)>>>>>>>>>>>>>>>>(1)>(3)
0914名無しさん@お腹いっぱい。2006/03/24(金) 22:48:19
(4) 俺が童貞を卒業する
0915名無しさん@お腹いっぱい。2006/03/24(金) 22:57:20
>>914
本当にやる気が有ればいつでも捨てれるはずだ
0916名無しさん@お腹いっぱい。2006/03/24(金) 22:58:53
>>912
どれも可能性ほぼゼロ。
よって、どの順に並べても正解。


UTF8は、全角記号の横幅問題が解決しない限り、実際問題使えない。
0917名無しさん@お腹いっぱい。2006/03/24(金) 23:08:27
φ=(2)>>>>>>>>(1)>(3)>>>>>>(4)

でFA?
0918名無しさん@お腹いっぱい。2006/03/24(金) 23:16:50
xterm -cjk_witdh じゃ駄目なの?
0919名無しさん@お腹いっぱい。2006/03/24(金) 23:32:06
そりゃ一番機能が低いのが一番移植性が高いだろ。CPM-80のcommand.comの移植性が一番高いでFA。
0920名無しさん@お腹いっぱい。2006/03/24(金) 23:43:22
それこそがunix philosophyだという話もある
0921名無しさん@お腹いっぱい。2006/03/24(金) 23:55:22
>>919
いい加減なことぬかすな、CP/Mにはcommand.comなど無い。
0922名無しさん@お腹いっぱい。2006/03/25(土) 00:24:05
そういうことなら自動販売機が一番移植性高い。
0923名無しさん@お腹いっぱい。2006/03/25(土) 00:24:49
オナホでもおでんでも売れるものな
0924名無しさん@お腹いっぱい。2006/03/25(土) 00:27:59
今こそS-OS復権
0925名無しさん@お腹いっぱい。2006/03/25(土) 00:46:37
OS-9!OS-9!
0926名無しさん@お腹いっぱい。2006/03/25(土) 01:03:03
2>1>>3>>>>>>>>>>>>4
ぐらい
0927名無しさん@お腹いっぱい。2006/03/25(土) 01:25:48
(2)>>(1)>=(4)>>[越えられない壁]>>(3)
が漏れの印象
0928名無しさん@お腹いっぱい。2006/03/25(土) 01:54:43
>>923
オナホの自販機ってあるんだ。さすがだれにも相手にされなくなった
ご老体さまがたですなw
0929名無しさん@お腹いっぱい。2006/03/25(土) 02:01:54
dtkshとか、pgbashとか、ああいうの他にないんですか?
0930名無しさん@お腹いっぱい。2006/03/25(土) 02:01:56
(1)>>>>>>>>>>>>>>(3)>(2)
2はUNIXではムリでそ
犬はUNIXじゃないし〜
1は連邦政府の動向見ると実現しそう
日本は後追いで普及ということになるだろうけど
3はよく分からないけどLinuxの鳥ベンダ次第
システム用の各種スクリプトはXMLでラップする方が普及すると思うので
シェルの差っていうのは余り意識せず済むようになると思うケド
4は心がけ次第
0931名無しさん@お腹いっぱい。2006/03/25(土) 02:02:09
オナホってそこらの女より刺激が強くて気持ちいいよ?
0932名無しさん@お腹いっぱい。2006/03/25(土) 02:07:56
おでん缶うまうまだよもん
0933名無しさん@お腹いっぱい。2006/03/25(土) 02:33:55
>>925
OS-9ってshell 差し換えできましたっけ。

0934名無しさん@お腹いっぱい。2006/03/25(土) 12:29:58
コマンドの標準入力がファイルを入力する時、
command < file
というのと、
command '< file'
というのと、両方ありますよね。
どう違うんですか?
0935名無しさん@お腹いっぱい。2006/03/25(土) 12:54:58
>>934
日本語でおk
0936名無しさん@お腹いっぱい。2006/03/25(土) 13:03:49
ジュワワワジュワワ、
ジュワジュワジュジュワワワワワ?
0937名無しさん@お腹いっぱい。2006/03/25(土) 13:04:55
>>933
AV Riderはシェルを換えられるというデモの意味もあった。
0938名無しさん@お腹いっぱい。2006/03/25(土) 13:17:49
>>935-937
知らないなら茶々入れるなよ!
0939名無しさん@お腹いっぱい。2006/03/25(土) 13:22:08
> 両方ありますよね。
ありません
0940名無しさん@お腹いっぱい。2006/03/25(土) 13:27:14
実際にあるから聞いてるのっ!
0941名無しさん@お腹いっぱい。2006/03/25(土) 14:02:21
command < file
はcommandへの引数は無し、標準入力はfileになる。
command '< file'
はcommandへの引数は一つで、それは '< file' という文字列。標準入力は変わらず。
だから、2つの書き方でやろうとしていることは全く違う。

実際にあるなら、その行を変更無しにそのままコピペしてみな。
0942名無しさん@お腹いっぱい。2006/03/25(土) 14:08:27
'< file' じゃなくて `< file` なんじゃないの?
で、bash依存なのでお引き取りください。
0943名無しさん@お腹いっぱい。2006/03/25(土) 14:50:56
で、bash依存だとなんで引き取らなきゃいけないの?
0944名無しさん@お腹いっぱい。2006/03/25(土) 14:58:01
>>943
つべこべ言うなニート
0945名無しさん@お腹いっぱい。2006/03/25(土) 14:59:19
bashスレ行け池沼
0946名無しさん@お腹いっぱい。2006/03/25(土) 14:59:30
>>943
bash依存だとUNIXがぶちにくいんじゃない
0947名無しさん@お腹いっぱい。2006/03/25(土) 15:42:32
bashはUNIXではない。
0948名無しさん@お腹いっぱい。2006/03/25(土) 15:54:52
もちろんNetBSDです。
0949名無しさん@お腹いっぱい。2006/03/25(土) 17:50:14
historyがUNIXだと表示されますが、
シェルにすると出ません。
UNIXとシェルでは何か違いがあるのでしょうか?
0950名無しさん@お腹いっぱい。2006/03/25(土) 18:07:01
>>949
英語でおk
0951名無しさん@お腹いっぱい。2006/03/25(土) 18:46:24
When history is on UNIX, it is displayed,
but when it is made into shell, it doesn't.
Is there any difference between UNIX and shell ?
0952名無しさん@お腹いっぱい。2006/03/25(土) 18:50:41
>>951
>Is there any difference between UNIX and shell ?

Yes.
0953名無しさん@お腹いっぱい。2006/03/25(土) 19:00:24
>>952
Thanks. Tell me why and how to make it work.
0954名無しさん@お腹いっぱい。2006/03/25(土) 19:03:12
(いぶまさとうの声で) yes, a little.
0955名無しさん@お腹いっぱい。2006/03/25(土) 19:07:05
The history command is very bash specific. You should go back now !!
レス数が950を超えています。1000を超えると書き込みができなくなります。