トップページunix
985コメント289KB

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

レス数が950を超えています。1000を超えると書き込みができなくなります。
0001名無しさん@お腹いっぱい。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
http://pc10.2ch.net/test/read.cgi/unix/1157601611/
0852名無しさん@お腹いっぱい。2007/07/25(水) 14:15:45
cshじゃなきゃだめな会社ってどこ?
08538492007/07/25(水) 14:57:09
>>851
ま、会社名を挙げる気は無いけど、
おれんとこでは全部のスクリプトがcshだし
スクリプトの作成・保守を依頼している会社も
cshで作るようになっている。
OSが古いもの・新しいものが混在しているのも
理由ではあるが、
常識など、会社によって違うものだろ。
シェルがダメなのは分かるが、
シェルを変えろとか無理な話だ
0854名無しさん@お腹いっぱい。2007/07/25(水) 14:59:19
HP-UXでkshを使っているのですが、C-p・C-nで履歴検索ができるとmanpageに書いてあるのですが、
実行しても何も起きません。
どうすればよいのでしょうか?
また、linuxのbashみたいに↑↓キーで履歴表示をしたいのですが、
kshで実現可能でしょうか?
0855名無しさん@お腹いっぱい。2007/07/25(水) 15:07:05
>>853
> OSが古いもの・新しいものが混在しているのも理由ではあるが、
/bin/shが存在しないUnixなんて無いんじゃないのか

> シェルがダメなのは分かるが、シェルを変えろとか無理な話だ
へえ。cshがダメなのははるか前からの常識なのに、誰もその
やりかたを変えようとせず、変えるのは「無理」だと思ってるんだ。
しかも古いスクリプトだけでなく、新しいスクリプトもわざわざ
cshで書き、ゴミを製造し続けていると。

勿論、C++やJavaやPythonなんて誰も使わないんだろうな。
ソース管理は未だにCVSでさえない、いやソース管理なんて概念もないね?

お前さんがアホなのか、会社がアホなのかは知らないが、実に見事に
アホだな。
0856名無しさん@お腹いっぱい。2007/07/25(水) 17:35:21
会社の都合なら仕方ないんだから
そんなに必死に弁解しなくていいよ
0857名無しさん@お腹いっぱい。2007/07/25(水) 20:55:10
>>853
だってさ、起動スクリプトとかOSに元々内蔵されてるスクリプトはshだよね?

そういうスクリプトを修正する時も、cshで書き直してるの?
0858名無しさん@お腹いっぱい。2007/07/25(水) 23:13:35
棄てる気になれば簡単に捨てられる。棄てられないのは>>853がヘタレなだけ。
0859名無しさん@お腹いっぱい。2007/07/25(水) 23:54:41
恐ろしいことにうちはコーディングルールでcsh使うことになってるorz

おまけに最近スクリプトでsql実行してるのを、「COBOLで実装しろ」って指摘された…
SQLの使い方調査があって、スクリプトが調査範囲から漏れたからだと。

0860名無しさん@お腹いっぱい。2007/07/26(木) 00:27:56
>>859
つまりOSインストール時からあるスクリプトも全部cshで書き直してるって事か?
0861名無しさん@お腹いっぱい。2007/07/26(木) 00:40:11
間違っているルールを変更できないなんて将来の無い会社だな。
0862名無しさん@お腹いっぱい。2007/07/26(木) 01:32:53
>>859
なんでcsh使うことになったの?
0863名無しさん@お腹いっぱい。2007/07/26(木) 04:05:17
袋叩きw

csh好きな勉強不足の若者の脳内会社なんだから許してやれよw
0864名無しさん@お腹いっぱい。2007/07/26(木) 10:27:50
某社と某社はcshだったな
皆さんがんばってね
0865名無しさん@お腹いっぱい。2007/07/26(木) 14:51:51
古いBroadVisionなんかだと、パッケージに
cshで書かれたシェルスクリプトがいっぱい付いてくるから
仕方が無い
0866名無しさん@お腹いっぱい。2007/07/26(木) 14:57:19
会社で使うシェルスクリプトなんてコマンド順番に起動して
戻り値チェックするくらいのもんだからな。
0867名無しさん@お腹いっぱい。2007/07/26(木) 17:05:58
それですむならそれでいい
0868名無しさん@お腹いっぱい。2007/07/26(木) 18:40:09
ジュセッペさんお元気?
0869名無しさん@お腹いっぱい。2007/07/27(金) 00:19:38
Zshまんせー
0870名無しさん@お腹いっぱい。2007/07/27(金) 01:30:36
>>866
俺はシェルスクリプトがないと会社で生きて行けんが。
0871名無しさん@お腹いっぱい。2007/07/27(金) 02:53:31
これお勧め:

つ ln /bin/sh /bin/csh

もっといいのは#!起動された時にスクリプトを調べて
昔からのcshスクリプトなら「しょうがなく」csh、じゃなきゃ
shにディスパッチするようにするとか。Linuxなら簡単だな。
0872名無しさん@お腹いっぱい。2007/07/27(金) 04:33:23
まぁ、/bin/shのシェルスクリプトを書かせたらbashスクリプトを書きやがったとか
*.shのファイルを開いたらbashスクリプトだったなんて事を無くす為なら
cshしか使うなってのもありかも知れん。
0873名無しさん@お腹いっぱい。2007/07/27(金) 07:10:12
ないないw
0874名無しさん@お腹いっぱい。2007/07/27(金) 08:49:35
20年モノのcshスクリプトが10万行単位である
とかね
0875名無しさん@お腹いっぱい。2007/07/27(金) 23:08:29
csherは平気でコピペで行数倍増するから10万行も妄想じゃないな。
0876名無しさん@お腹いっぱい。2007/07/27(金) 23:22:10
そんなコードだったな
0877名無しさん@お腹いっぱい。2007/07/27(金) 23:53:59
昔、(偽装)派遣で行ったところは csh が標準だったよ。
ひ孫請の俺がルールを変えるなんて無理だった。

当然ソース管理なんて概念もない。ファイルはタイムスタンプ
(mtime)で管理してたよ。もー馬鹿かアフォかと。

とりあえず、自分のコードは SCCS で管理してた。
当然フリーソフトウェアなんて得たいの知れないものは
使用禁止。

まだあの会社あるかな…
0878名無しさん@お腹いっぱい。2007/07/28(土) 00:03:54
某独立系大手とか
某システム系大手とか
0879名無しさん@お腹いっぱい。2007/07/28(土) 01:05:38

folder>------folder1---test
|
---folder2---test

folder1内にある実行ファイルtestを実行して、
その終了を待って、folder2内のtestを実行する
というスクリプトを作ったんですが、folder2の実行が行われません。
どこがいけなかったんでしょうか?ご教授ください。

#!/bin/sh


for i in 1 2

 do

    cd folder$i

    nohup test
    
wait $!

    cd ..

 done
0880名無しさん@お腹いっぱい。2007/07/28(土) 01:12:09
まず、なんでいちいちwait入れるのかわからん。
ほっとけば、終わってからしか次が実行されんだろ?
あと、本当にtestって名前なのか?
/bin/testかビルトインのtestが動いてるだけでは?
08818792007/07/28(土) 01:24:56
>880
実際は、testっていうプログラムじゃないんですけど、
実行すると1日くらい走り続けるものです。
wait入れなくて実行したら、二重に実行されてしまったので。
二重に走らないようにしたいので、wait入れたのですが。
0882名無しさん@お腹いっぱい。2007/07/28(土) 01:58:54
実行したいモノを列挙すればいいんじゃね?
それで満たせない要件は後だしでくるような気もするけど
0883名無しさん@お腹いっぱい。2007/07/28(土) 02:20:46
cronかなんかで後から起動しちゃってるだけ?
waitって子プロセスの終了待つだけなんだから
バックグラウンドで動かさん限り無意味
0884名無しさん@お腹いっぱい。2007/07/28(土) 03:15:41
awkについて質問です。

echo "<tr><td></td></tr>" | awk '{print $1, $2, $3, $4}'

とすると、以下のように分解して代入されるようにしたいのですが、
awkのオプションをどのように指定すればよいでしょうか?
(同じことができるなら、awk以外でも構いません)

$1=<tr>
$2=<td>
$3=</td>
$4=</tr>

よろしくご教授お願いします。
0885名無しさん@お腹いっぱい。2007/07/28(土) 07:42:41
sed 's/></> </g' < "<tr><td></td></tr>" | awk '{print $1, $2, $3, $4}'
0886名無しさん@お腹いっぱい。2007/07/28(土) 08:52:38
  < "<tr><td></td></tr>"
この部分は何だ?
0887名無しさん@お腹いっぱい。2007/07/28(土) 09:32:29
そのくらいわからないのか
<tr><td>< というディレクトリの下に
td>< という子ディレクトリがあって、その下に
tr> というファイルがある。
その内容が
<tr><td></td></tr>
なのだ。
0888名無しさん@お腹いっぱい。2007/07/28(土) 09:46:10
hagewarosu
0889名無しさん@お腹いっぱい。2007/07/28(土) 16:48:50
>>884
なんで echo の中で FS 使っちゃいけないの?
0890名無しさん@お腹いっぱい。2007/07/28(土) 16:52:40
おばあちゃんの遺言で
0891名無しさん@お腹いっぱい。2007/08/01(水) 00:31:16
for f in 'ls -1'
do
echo ${f}
done

とか

for s in 'cat hoge.txt'
do
echo ${s}
done

なんかは、基本だな
0892名無しさん@お腹いっぱい。2007/08/01(水) 01:12:54
>>891
何が言いたいのかさっぱりわからん。
0893名無しさん@お腹いっぱい。2007/08/01(水) 02:11:41
if分で「$numbarが10から1000の間なら」という分岐は可能でしょうか?

if [ $numbar = 10 -o $numbar = 11...]

と地道に書いていくしかだめですか?
0894名無しさん@お腹いっぱい。2007/08/01(水) 02:24:09
っman test
0895名無しさん@お腹いっぱい。2007/08/01(水) 02:38:29
case $number in
[1-9][0-9]|[1-9][0-9][0-9]|1000)
....
;;
esac
0896名無しさん@お腹いっぱい。2007/08/01(水) 08:14:47
>>895
0点
0897numbar warota2007/08/01(水) 21:58:49
>>893
[ "$number" -ge 10 -a "$number" -le 1000 ]
0898名無しさん@お腹いっぱい。2007/08/01(水) 22:58:41
>>897
引っかけ問題に引っかかりましたねぇ。
>>893 の問題では、シェル変数名は number じゃなくて numbar
前任者から引き継いだスクリプトとかで変数名がミススペルで、
自分が正しいスペルで書き足すと動かなくて1日悩むこと、よくあるでしょ?
そのための練習問題でした。
0899名無しさん@お腹いっぱい。2007/08/01(水) 23:03:02
>>898
死ぬほどどうでも良いですね。
0900名無しさん@お腹いっぱい。2007/08/02(木) 20:28:27
>>898
おまい、100回くらい死ねよ
0901ウサチャソ2007/08/02(木) 21:08:52
バージョンの略を var と書いてしまう奴は結構いるよな。
0902名無しさん@お腹いっぱい。2007/08/02(木) 21:22:54
見たことないぞそんな奴。
0903名無しさん@お腹いっぱい。2007/08/02(木) 21:25:20
スペルミスならもっと酷いのをいくらでも見たことがある
0904名無しさん@お腹いっぱい。2007/08/02(木) 21:41:27
ここで伝説のuwariteが登場。
0905numbar warota2007/08/02(木) 22:07:37
>>898
シェルスクリプトごときで1日も迷うねーよ。
それと、From:見る癖つけたほうが良い。
0906名無しさん@お腹いっぱい。2007/08/03(金) 00:34:20

「対話的な利用についての話はスレ違い」ってあるけど、
どこに逝っていいのか教えて頂けないでしょうか〜

expect があることは知ってるけど、
インストールが必要だからダメだって。

とりあえず、どういう選択肢があるか知りたいです。


あと perl の話になるんだけど、
Expect.pm を Makefile.pl とか CPAN での
インストールをしないで(起動ディレクトリにモジュールを置くだけとかで)
起動する方法があれば、誘導をお願いしたいです。


0907名無しさん@お腹いっぱい。2007/08/03(金) 00:37:46
>>906
ポエムは確か別の板があったはずだぞ。
0908名無しさん@お腹いっぱい。2007/08/03(金) 01:12:06
>>907

ポエム?

なんかアフォ扱いみたいな感じだけど、
変なこと書いてるんかなー? よく分からん。


とりあえず反応ありがと。
0909名無しさん@お腹いっぱい。2007/08/03(金) 02:14:06
>906 は対話的の意味を勘違いしているに一票
0910名無しさん@お腹いっぱい。2007/08/03(金) 02:17:29
>>906
インストールがダメって言うなら、現行環境に入ってる使えそうな道具立てはなんなのよ?

それとは別に、「対話利用についての話題禁止」の意味をつかめてないに一票
0911名無しさん@お腹いっぱい。2007/08/03(金) 08:19:15
>>909,910

ぐぐってみた。↓に書いてある「対話」?
(例えばどんな話が禁止なのかは分からんが。。)

0からのbash 第1回:対話的シェルの使用法(1) 1.はじめに
http://www.stackasterisk.jp/tech/systemManagement/bash01_01.jsp


>>910

何を書けばいいんだろ。

telnet, ftp, rsh, perl

Expect.pm は上に書いたように
Windows での単体 exe みたいなイメージ
(インストールが必要ない)ならおkらしい


0912名無しさん@お腹いっぱい。2007/08/03(金) 08:56:32
で、結局何をしたいのよ?
0913名無しさん@お腹いっぱい。2007/08/03(金) 10:30:08
>911
やりたいことをできるだけ具体的に
0914名無しさん@お腹いっぱい。2007/08/03(金) 17:58:16
今度、会社で、シェルを使わなければならない可能性が発生する恐れがあるかも知れない状況になる兆しが出て来ました。
とりあえず初心者がシェルの方を始めるには、どのシェルの方から始めればいいでしょうか?
開発ツールの方とか、デバッガーの方はGUIの方であるんでしょうか?
できればフリーの方を希望します。
0915名無しさん@お腹いっぱい。2007/08/03(金) 18:11:06
>>914
> 可能性が発生する恐れがあるかも知れない状況になる兆しが出て来ました。
それぞれ20%と仮定すると、4段階あるから、0.16%だ。
悲観的すぎー

0916名無しさん@お腹いっぱい。2007/08/03(金) 18:17:25
どれがいいかは会社に聞け。
GUI はないと思っていい。
0917名無しさん@お腹いっぱい。2007/08/03(金) 18:18:59
まず日本語を勉強したほうがいいと思われ
0918名無しさん@お腹いっぱい。2007/08/03(金) 22:35:37
>>914
sh
0919名無しさん@お腹いっぱい。2007/08/03(金) 23:10:59
面白いと思ってやってるんだろうか? 低脳としか比喩できない釣りだ。
0920名無しさん@お腹いっぱい。2007/08/03(金) 23:39:16
>>906

push(@INC, '/home/hiroyuki')

とかやればモヂュールのサーチパスに追加されるんじゃないの?
0921名無しさん@お腹いっぱい。2007/08/03(金) 23:40:37
>>919
お前の語彙が少ないのはどうでも良い。
0922名無しさん@お腹いっぱい。2007/08/03(金) 23:48:38
>>916
wishとかwkshとかPowerShellかもしれないじゃないか!
0923名無しさん@お腹いっぱい。2007/08/04(土) 00:37:18
>>921
悔しいのか? でもつまらんものはつまらん。
0924名無しさん@お腹いっぱい。2007/08/04(土) 00:41:13
おや、>>914 が餌をまいているのに、
「シェルってゆーな」の人が登場する可能性が発生する恐れがあるかも知れない状況になる兆しが出て来ませんねぇ
0925名無しさん@お腹いっぱい。2007/08/04(土) 02:19:39
シェルってゆーな
0926名無しさん@お腹いっぱい。2007/08/04(土) 07:31:21
>>915

X 恐れ
◯ 虞れ
0927名無しさん@お腹いっぱい。2007/08/04(土) 09:22:51
>>926
それを言うなら、送り仮名が違う

×虞れ
○虞

ただし、「虞」は常用漢字じゃなく、現在では「恐れ」と表記するのが標準。
ぐぐってみても、「○○する恐れ」は多数ヒットするが、「○○する虞」はごくわずか。
0928名無しさん@お腹いっぱい。2007/08/04(土) 09:34:48
>>924
お前、センスが皆無な上に致命的に頭悪いな。
> シェルスクリプトをシェルとゆうな。
なので、>>914は(呆れるほどつまらない釣りだが)誤用無し。
09299262007/08/04(土) 14:34:15
>>927
うちのAnthyはそこまでバカじゃない。
送り仮名は「敢えて」俺が書き足した物。

>>ぐぐってみても、「○○する恐れ」は多数ヒットするが、
>>「○○する虞」はごくわずか。

世の中全体が、バカになって来たということですな。
(負の)probabilityをterribleと表記することの
とんでもなさに違和感を感じないとはねぇ・・・
0930名無しさん@お腹いっぱい。2007/08/04(土) 14:39:54
>>929
英語でも I'm afraid ... って言うじゃん。
単に可能性だけじゃなく、もしそうだったら困ると言うニュアンスがあるから
「恐れ」で的確。
いいことに対しては確率が低くても「恐れ」とは言わないし。

ちなみに、probabilityは 0 <= probability <= 1 でしか定義できない。
負のprobabilityなんて言ってる時点で、お前数学も苦手だっただろw
0931名無しさん@お腹いっぱい。2007/08/04(土) 15:26:14
悪い事象の発生するおそれって意味じゃないの。
930はprobability=(数学的)確率というバカの一つ憶えしかしてないから
早合点したんだろう。蓋然性って日本語知ってるか?
0932名無しさん@お腹いっぱい。2007/08/04(土) 15:40:52
>>931
確率を蓋然性と言い替えたところで本質は変わらない。
(数学以外でも)「負の確率」なんて存在しない。
「負の確率」という言葉が出てしまった時点で、アンタの負け。
09339312007/08/04(土) 16:15:22
てんで指摘を理解してないな。俺は929じゃないし。
日本語も英語もダメな人みたいだね。
0934名無しさん@お腹いっぱい。2007/08/04(土) 16:18:28
もし「悪い事象が起きる確率」のことを「負の確率」と言ったのなら、
それは数学だけじゃなく日本語としてもおかしい。
確率を理解していないことになる。
よって、>>931 のように弁護しても、やはり >>929 は間違い。
09359312007/08/04(土) 16:21:39
やっぱり理解してないなw
0936名無しさん@お腹いっぱい。2007/08/04(土) 16:22:41
>>934は負の遺産とか負の感情とかいう言葉も使わないんだろうな。
0937名無しさん@お腹いっぱい。2007/08/04(土) 16:37:03
>>936
負の遺産は本当に「負」だろうが。
借金はマイナスの遺産。マイナスだからこそ「負」と言って正しい。

ところが、確率は絶対に「負」にはならない。
負の確率なんて存在しない。
0938名無しさん@お腹いっぱい。2007/08/04(土) 16:45:18
新聞でも、「…する恐れ」って書いてるよ。

>>936 は別の意味で「負」を理解してないなw
0939名無しさん@お腹いっぱい。2007/08/04(土) 17:08:59
937は借金のことを負の遺産というと思ってるのか。
0940名無しさん@お腹いっぱい。2007/08/04(土) 17:17:16
>>939
借金が負の遺産として一番わかりやすい例ということだろ。
いずれにしても負の遺産はマイナスのものに違いない。

で、「負の遺産」を持ち出しても、「負の確率」を正当化することはできない、
という点は理解してますか?
0941名無しさん@お腹いっぱい。2007/08/04(土) 17:20:47
じゃあ負の感情についても論破してみて。
0942名無しさん@お腹いっぱい。2007/08/04(土) 17:28:35
>>941
好感度を数値化できるものとする。
平常心での好感度は0で、何かに好感を持った時プラスの好感度になる。
逆に嫌悪感を持てば、マイナスの好感度になる。
マイナスの好感度は「負の感情」と言ってもいい。
だから「負」で正しい。
(だから「負の確率」を肯定する材料にはならない)
0943名無しさん@お腹いっぱい。2007/08/04(土) 18:37:06
>>942
別の高尚なスレッドでやってください。
0944名無しさん@お腹いっぱい。2007/08/04(土) 19:36:54
そうだな。
どうせ表現するならエロでやってくれなきゃわからん。
0945名無しさん@お腹いっぱい。2007/08/04(土) 21:33:50
漢和辞典ひいてみると、虞の項目には「可能性」という文字はないが、恐れには「可能性」と書いてある。
どちらの項目にも「心配する」の意味はある。
広辞苑でも、恐れのほうが虞より先に載っている。
probabilityは見こみで考えたらいいじゃないかな。
0946名無しさん@お腹いっぱい。2007/08/04(土) 21:54:59
>>945
邪魔だと言っている。

意味が分からないならお得意の広辞苑を引いてくれ。
0947名無しさん@お腹いっぱい。2007/08/05(日) 18:41:23
エアコンの室外機が壊れたんですが
お金がないのです
どうしたらいいでしょうか?
09489262007/08/05(日) 18:59:36
>>930-945
夜勤明けに遊びに行って、帰ってきたらば
この有様w
板違いだけど感受性がおもしろすぎて、嬉しくなるねぇ。

ちなみに(負の)probabilityってのは、
negativeな蓋然性の意味で用いた訳だが・・

あ、あと「マイナスの確率」ってのも
概念的には存在しうるね。
(数学ではなく統計学になるけど
日本語として間違いでは無いよね)
虚数よりは遥に理解しやすい。
0949名無しさん@お腹いっぱい。2007/08/05(日) 19:53:10
>>948
土曜に夜勤か。ご苦労さん。
俺は優雅な休日だった。
0950名無しさん@お腹いっぱい。2007/08/05(日) 23:00:59
>>948
符号付(確率)測度なんて、数学では大して珍しくも無い概念だが…?
0951名無しさん@お腹いっぱい。2007/08/06(月) 07:38:00
ハッシュ汽盆!!
レス数が950を超えています。1000を超えると書き込みができなくなります。