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

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

■ このスレッドは過去ログ倉庫に格納されています
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/
0796名無しさん@お腹いっぱい。2007/07/04(水) 22:31:41
>>795
bashだと無問題。「正」じゃなくて「真(0)」な。
0797名無しさん@お腹いっぱい。2007/07/04(水) 22:35:06
小さい値だとちゃんと真(0)になるんだけどなんでかな。
0798名無しさん@お腹いっぱい。2007/07/04(水) 22:35:10
>>795
実装依存だな。シェルによっては 31bit整数最大の 2147483647 が扱える最大値。
0799名無しさん@お腹いっぱい。2007/07/04(水) 22:37:55
>>798
ありがと。ちなみに対処法って何かあったりする?違う言語使うしかないか。
0800名無しさん@お腹いっぱい。2007/07/04(水) 22:42:13
>>799
bcに喰わせるとか。bcだともっと大きい数まで扱える。

echo '1000000 < 9999999999' | bc

bcでは、testとは逆で、真の場合1になって、それが標準出力に出る。
0801名無しさん@お腹いっぱい。2007/07/04(水) 22:55:38
ありがとう。試してみます。
0802名無しさん@お腹いっぱい。2007/07/05(木) 22:47:11
ipアドレスを0101って2進数にするにはまず・・・・・・・・なにすればいいの?
0803名無しさん@お腹いっぱい。2007/07/05(木) 23:01:13
小数点までを取り出す
0804名無しさん@お腹いっぱい。2007/07/06(金) 01:13:45
こんなのでどうだろう

 (echo obase=2; echo 1.2.3.4 | tr '.' '\012') | bc | xargs -n 1 printf %.8d
0805名無しさん@お腹いっぱい。2007/07/06(金) 01:23:00
もちょっとカイゼン:

 旧:(echo obase=2; echo 1.2.3.4 | tr '.' '\012') | bc | xargs -n 1 printf %.8d
 新:printf %d%.8d%.8d%.8d `echo obase=2.1.2.3.4 | tr . \; | bc`
0806名無しさん@お腹いっぱい。2007/07/06(金) 10:00:27
shebang が #!/bin/shのシェルスクリプト test.shを PATHの通った$HOME/bin に置いたところ、
tcsh では $ test.sh で動作するのに、
bash では $ test.sh で動作せず、
$ bash -c test.sh でも動作しませんでした。

/usr/local/bin/以下に置いたところ、
bash上の $ test.shは動作しましたが、
やはり、$ bash -c test.sh は動作しません。

この原因は、どのあたりにあるのでしょうか。
ヒントでよいので教えてください。
0807名無しさん@お腹いっぱい。2007/07/06(金) 10:26:25
>>806
(t)cshと(ba)sh では、PATHの変数が違う。本当はPATHを通し忘れているというオチ。
あるいは、.bashrcでPATHが再設定されてしまっているとか。
08088062007/07/06(金) 10:42:36
>>807
bash上で、$ set | grep PATH すると、$HOME/binも入っているのですが、
やっぱり、PATH関係っぽいですよねぇ。

$ bash -c test.shができないのが気持ち悪いです。

ちなみに、$ $HOME/bin/test.sh では実行できました。
0809名無しさん@お腹いっぱい。2007/07/06(金) 10:46:13
>>808
setじゃなくて、printenvで確認した方がいい。
シェル変数のPATHのみセットされていて、exportされてない可能性がある。
すると、bash -c とかやった時、新しいbashにはPATHが引き継がれないから、
そういう現象が起きる。
08108062007/07/06(金) 10:59:27
>>809
exportされないというのは盲点でした。
おっしゃるとおり、
$ printenv | grep PATH
をしたところ、$HOME/binも含まれていました。
一応、.bashrcでの設定はきいているんですよね。

ググったところ、Cygwin上では、
bashのバグ?かなにかで、bash -c がきかない現象があるようです。

遅くなりましたが、自分の環境は linux 、bash 3.1 です。

0811名無しさん@お腹いっぱい。2007/07/06(金) 11:09:47
ユーザ名だけ伏せていいから、完全なスクリーンダンプ出せ
08128062007/07/06(金) 12:10:14
>>811
席を外していまして、遅くなってすいません。
スクリーンダンプは以下のようなものでよろしいでしょうか。
実はtest.shは、navi2chインライン画像表示のためのシェルスクリプトで引数もとります。

i) bash上で実行

$ bash --verbose -c navi2ch.makethumb http://www.google.co.jp/intl/ja_jp/images/logo.gif
navi2ch.makethumb
$ sh -x navi2ch.makethumb http://www.google.co.jp/intl/ja_jp/images/logo.gif
+ tmp=/tmp/navi2ch-thumbnails
+ origfile=/tmp/navi2ch-thumbnails/www.google.co.jp/intl/ja_jp/images/logo.gif
+ thumbfile=/tmp/navi2ch-thumbnails/www.google.co.jp/intl/ja_jp/images/logo.gif.jpg
+ thumbsize=300x150
+ '[' '!' -f /tmp/navi2ch-thumbnails/www.google.co.jp/intl/ja_jp/images/logo.gif ']'
+ '[' -z '' ']'
+ /usr/bin/wget http://www.google.co.jp/intl/ja_jp/images/logo.gif -q -N -x -P /tmp/navi2ch-thumbnails
+ '[' '!' -f /tmp/navi2ch-thumbnails/www.google.co.jp/intl/ja_jp/images/logo.gif.jpg
+ thumbsize=300x150
+ '[' '!' -f /tmp/navi2ch-thumbnails/www.google.co.jp/intl/ja_jp/images/logo.gif ']'
+ '[' -z '' ']'
+ /usr/bin/wget http://www.google.co.jp/intl/ja_jp/images/logo.gif -q -N -x -P /tmp/navi2ch-thumbnails
+ '[' '!' -f /tmp/navi2ch-thumbnails/www.google.co.jp/intl/ja_jp/images/logo.gif ']'
++ identify -format %n /tmp/navi2ch-thumbnails/www.google.co.jp/intl/ja_jp/images/logo.gif
+ scene=1
+ '[' '!' -s /tmp/navi2ch-thumbnails/www.google.co.jp/intl/ja_jp/images/logo.gif.jpg -o /tmp/navi2ch-thumbnails/www.google.co.jp/intl/ja_jp/images/logo.gif.jpg -ot /tmp/navi2ch-thumbnails/www.google.co.jp/intl/ja_jp/images/logo.gif ']'
+ '[' 1 -gt 1 ']'
+ convert -sample 300x150 /tmp/navi2ch-thumbnails/www.google.co.jp/intl/ja_jp/images/logo.gif /tmp/navi2ch-thumbnails/www.google.co.jp/intl/ja_jp/images/logo.gif.jpg
+ echo -n /tmp/navi2ch-thumbnails/www.google.co.jp/intl/ja_jp/images/logo.gif.jpg
/tmp/navi2ch-thumbnails/www.google.co.jp/intl/ja_jp/images/logo.gif.jpg
08138062007/07/06(金) 12:13:07
>>812
上の方の
$ bash --verbose -c
では、画像は取得されませんでした。
下の方の
$ sh -x
は、画像が取得されました。
0814名無しさん@お腹いっぱい。2007/07/06(金) 12:18:15
なんかよくわからんけど
フルパス指定じゃだめ?
0815名無しさん@お腹いっぱい。2007/07/06(金) 12:32:04
改行コードが CRLF になってないか?
0816名無しさん@お腹いっぱい。2007/07/06(金) 12:39:22
>>812
test.shが問題だというから、
ちゃんと問題を切り分けて小さくしてるのかと思ったら、それかよ
.bashrcの中身も、printenv PATH そのものも、隠さず出したら?
08178062007/07/06(金) 12:52:00
/usr/local/bin/下のnavi2ch.makethumbを消し、~/bin/navi2ch.makethumbだけにして、
もう一度試したところ、bash上でも
$ navi2ch.makethumb 引数
が実行できました。
しかし、
$ bash -c navi2ch.makethumb 引数
は、やはり実行できませんでした。

>>814
フルパス指定だとbash上でも実行できます。

一応、回避策として、/usr/local/bin/に置いているので、具体的な支障はないのですが、
"bash -c"だけがうまく動いてくれないのはなぜだろうと不思議に思って、質問しました。

だから、本当はこんなにレスしていただくほどのことでなくて、申し訳ないです。

>>815
nkf でチェックしたところ、EUC-JPでした。(環境はja_JP.UTF-8)
cat -v で見ても、改行コードらしきものはありませんでした。

0818名無しさん@お腹いっぱい。2007/07/06(金) 13:06:23
PATHの問題は知らんけど、引数を渡すのなら
bash -c 'navi2ch.makethumb 引数'
じゃないと駄目だろ
08198062007/07/06(金) 13:07:41
>>816
#!/bin/sh
echo test

のようなシェルスクリプトですと、~/bin/以下に置いて、
$ bash -c test.sh
test
と実行できます。

$ printenv PATH
/home/mona/bin:/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games

ふだんbashを使っていないので、~/.bashrcはありものです。
~/.bashrc
PATH=$HOME/bin:$PATH
↑とりあえず、これだけにしました。

これでもやはり、
$ bash -c navi2ch.makethumb http://www.google.co.jp/intl/ja_jp/images/logo.gif
では画像を取得できませんでした。

"bash -c"はいろいろときびしそうですね。
08208062007/07/06(金) 13:12:21
>>818
$ bash -c 'navi2ch.makethumb 引数'

で画像を取得出来ました。

超基本的なことに気付かず、おさわがせして申し訳ないです。
どうもすみませんでした。
ほんとうにごめんなさい。
0821名無しさん@お腹いっぱい。2007/07/15(日) 17:20:37
http://blog.miraclelinux.com/thethird/2006/12/post_4e7b.htmlo


(sleep $ALIVE_TIME; ps $$ && kill -INT $$; sleep 1; ps $$ && kill -KILL $$)
1秒待ってもう1度だけkillしてるのはなぜなんですかね?
0822名無しさん@お腹いっぱい。2007/07/15(日) 17:56:03
>>821
よく見ろ。-INT と -KILL で違うだろ。
0823名無しさん@お腹いっぱい。2007/07/15(日) 22:02:12
本当だ。失礼しますた。
0824名無しさん@お腹いっぱい。2007/07/16(月) 22:04:04
シェルスクリプトでif文に正規表現による文字列一致条件を記述できないでしょうか?
sedなどを使ってやればできないことはないですが、
if文一発でできればいいなと。。
0825名無しさん@お腹いっぱい。2007/07/16(月) 22:07:47
>>824
できない。
正規表現と言ってるが、実際にはワイルドカードで十分なことが多い。
ワイルドカードなら ifの代わりに caseを使えばできる。
0826名無しさん@お腹いっぱい。2007/07/16(月) 22:08:01
case使え。
0827名無しさん@お腹いっぱい。2007/07/16(月) 22:25:25
モレはいっつもテストコマンドの中でegrep使ってるけど・・・・素人なのでアフォな事やってるのかも。
0828名無しさん@お腹いっぱい。2007/07/16(月) 23:48:40
if expr $string : $regex >/dev/null; then
...
0829名無しさん@お腹いっぱい。2007/07/17(火) 23:10:26
>>827
機能・性能に問題なきゃそれで充分だろ。

コンピュータ (て言うか、道具) なんて楽するためにあるんだから。
08308272007/07/17(火) 23:45:10
じゃあ、>>824もそれでよろ(w
0831名無しさん@お腹いっぱい。2007/07/22(日) 20:41:39
UNIX上からリモートでWindowsのバッチを起動させるシェルスクリプトを
作りたいのですが、実装イメージがまったくわからず困ってします。

Win相手に対してrshは使えないであろうし。。。何かいい方法をご存知の方
いらっしゃいませんか。よろしくお願いいたします。
0832名無しさん@お腹いっぱい。2007/07/22(日) 20:44:38
スレ違い
0833名無しさん@お腹いっぱい。2007/07/22(日) 21:38:16
>>831
cygwin + sshdとかな。
0834名無しさん@お腹いっぱい。2007/07/22(日) 23:07:17
>>831
Windows が 2k / XP なら、telnet でどうぞ。
0835名無しさん@お腹いっぱい。2007/07/22(日) 23:07:46
>>831
>Win相手に対してrshは使えないであろうし

使えるよ

http://sohda.net/cygwin/treebbs/treebbs.cgi?kako=1&all=232&s=232
http://www.uhero.info/techinfo/CygwinSSH_setup/index.html
08368242007/07/22(日) 23:08:49
実行時間は case < expr < sed だったので
結局、caseにしときました。
08378312007/07/22(日) 23:48:25
>>833>>835
アドバイスありがとうございます。cygwinについて
あまり知識がないので調べてみます。

>>834
telnetで可能ということは、Win上でtelnetサービスを
稼動させておけばいいということでしょうか?

明日にでも実施してみようと思います。
ありがとうございました。
0838名無しさん@お腹いっぱい。2007/07/24(火) 01:24:43
> telnetで可能ということは、Win上でtelnetサービスを
> 稼動させておけばいいということでしょうか?

手元の 2k だと特にわざわざ入れた覚えはないから、多分
標準で入ってると思う。

サービスの中に telnet ってあるはずだから、それを起動
するだけ。

常用するなら、スタートアップの種別を「自動」にする。
0839名無しさん@お腹いっぱい。2007/07/24(火) 03:17:55
telnetは対話型だから、ダメというかめんどくさいだろ。
0840名無しさん@お腹いっぱい。2007/07/24(火) 07:39:36
expectとか使えばいいだけじゃないの?
0841名無しさん@お腹いっぱい。2007/07/24(火) 21:43:20
下記のようなファイル検索をするシェルを作ったのですがうまく動きません

#!/bin/csh
echo 検索するファイル名を入力してください:
set filename = $<
(find /* -name $filename -type f -print > /dev/tty) > & /dev/null

「hoge.txt」を検索する場合はうまくいくのですが、
ワイルドカードを用いた「hoge\*」の検索をすると検索を行わずに一瞬で終了してしまいます。

setで変数に"\*"を入力するのは不可能なのでしょうか?
0842名無しさん@お腹いっぱい。2007/07/24(火) 21:45:14
今日はカレーにする
0843名無しさん@お腹いっぱい。2007/07/24(火) 21:50:39
>>841
>>1
0844名無しさん@お腹いっぱい。2007/07/24(火) 21:52:21
・シェルスクリプトのことをシェルってゆーな

クオートすれば?
0845名無しさん@お腹いっぱい。2007/07/24(火) 22:31:26
シェルってゆうな。クズ。
csh捨てろ。クズ。
0846名無しさん@お腹いっぱい。2007/07/24(火) 22:34:46
スルーカ
0847名無しさん@お腹いっぱい。2007/07/24(火) 22:44:48
>>843-845
すんまそん、会社でシェルシェル言ってるもんで癖がついてました。
クオート試してみることにします。
cshは会社の都合なんすよ
0848名無しさん@お腹いっぱい。2007/07/25(水) 06:21:28
>>847
最初の行に
sh
と書きゃいいじゃん。
0849名無しさん@お腹いっぱい。2007/07/25(水) 12:34:58
>>848
実社会で勉強してね
cshからshに変えるのは容易ではないのだよ
シェルスクリプトは1人で作るのではないし
1つの会社で作るものでもない
0850名無しさん@お腹いっぱい。2007/07/25(水) 14:06:37
つまり、1人だけではなく1つの会社だけでもなく、
いくつもの会社にまたがって何人もの人がよってたかって
>>841みたいなスクリプトを書いているわけだな。すげぇ。

つーか、csh を使うにしてもせめて #!/bin/csh -f にしろよ。
0851名無しさん@お腹いっぱい。2007/07/25(水) 14:13:50
>>841
の例は、わざわざcshの欠点が目立つような典型例だな。
ワイルドカードの展開の問題とか、
findのstderrを捨てるために苦労してるところとか。

そもそも、findをインタラクティブに実行させるようなスクリプトは、
システム管理用スクリプトじゃない。初心者ユーザー向けに作ったものだろ。

こんなの、/bin/shで書き直せば一発。
>>841 が抱えているcshでの問題も一気に解決する。


>>849 へ。
みんな実社会で「cshスクリプトは使わない」が常識だといってるんだよ。
>>849 は自分の会社名を公表しない方がいいよ。会社の不名誉になるからね。
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
■ このスレッドは過去ログ倉庫に格納されています