[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 02/10 13:03 / Filesize : 248 KB / Number-of Response : 977
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

シェルスクリプト相談室



1 名前:デフォルトの名無しさん [2005/04/04(月) 03:43:03 ]
シェルスクリプトに関する質問・回答や議論等を行う相談室スレッド。 


528 名前:デフォルトの名無しさん [2007/02/11(日) 11:20:30 ]
シェルスクリプトって例外処理できます?
例えば一つ上の行でエラーが発生したときはそのシェルスクリプトの処理を終了するとか。

529 名前:デフォルトの名無しさん mailto:sage [2007/02/11(日) 12:14:42 ]
>>528
プロセスの終了ステータスを見て条件分岐することはできる。

530 名前:デフォルトの名無しさん mailto:sage [2007/02/11(日) 13:13:06 ]
>>528
普通は>>529の終了ステータスを使う。エラー時に終了するだけならこれで十分。
シグナルが飛ぶならtrapでシグナルハンドラを書くのもあり。

try/catch/throwに直接対応するものは、Bourne shell、csh、bashにはない。


531 名前:デフォルトの名無しさん mailto:sage [2007/02/11(日) 20:02:45 ]
set -eしとけば、(検査されていない)終了ステータスが0以外の場合は
スクリプトが終了する。終了処理はtrap "..." 0

532 名前:デフォルトの名無しさん mailto:sage [2007/02/12(月) 08:56:55 ]
どもですm(_ _)m

533 名前:デフォルトの名無しさん mailto:sage [2007/04/04(水) 19:47:34 ]
リダイレクトのことで質問なんですが
echo hoge > test
ls -l < test
とやるとlsは標準入力(つまりtest)の内容を読み込むのなら
普通にls -lとした場合はキーボードからの入力を読み込もうとすると思うんですが、
そうはならないのは何故なんでしょうか?

534 名前:デフォルトの名無しさん mailto:sage [2007/04/04(水) 21:19:42 ]
>>533
入力がリダイレクトされても、lsは何も読むわけではない。
つまり、ls -l < test と書いても ls -l と書いても同じ事。

535 名前:デフォルトの名無しさん mailto:sage [2007/04/04(水) 21:42:01 ]
たしかにls -l < testとやっても変わらないみたいです。
今、入門UNIXシェルプログラミングという本で勉強しているのですが、
その本の89ページには
echo abc nnn > xyz
ls -l < xyz
とするとls -l abc nnnとしたときと同じ結果になる。書いてあったのですが、
この本が書かれた時と今ではlsの動作が異なるということなんでしょうか?


536 名前:デフォルトの名無しさん mailto:sage [2007/04/04(水) 21:55:46 ]
いつの時代か知らんが、lsが標準入力から引数を貰うような作りになってる
という話は聞いたことがないな。

ls -l `cat xyz`とか xargs ls -l < xyz ならありえる。

xargsは、はしょって言うと、標準入力から受け取ったものを、自分に与えられ
た引数につなげたて、その全体を実行するコマンド。、




537 名前:デフォルトの名無しさん mailto:sage [2007/04/04(水) 22:01:14 ]
うーんサンプルコードを見ても特にxargsを使っているわけではないようです。
本のタイトル名で検索したらサポートページがあったので、後で
この件に関してメールを送ってみようかと思います。ありがとうございました。

538 名前:デフォルトの名無しさん mailto:sage [2007/04/04(水) 22:12:21 ]
>>537
物はこれか?
ttp://shop.sbcr.jp/isbn/shell/index.htm
ここには載っていないようだな。
ttp://shop.sbcr.jp/isbn/shell/errata.htm

539 名前:デフォルトの名無しさん mailto:sage [2007/04/04(水) 22:17:38 ]
この本か。
会社に置きっぱなしだから明日確認してみる。

540 名前:デフォルトの名無しさん mailto:sage [2007/04/04(水) 22:22:57 ]
著者名のつづりのミスもみつけられんとこ信用するな

541 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 01:49:29 ]
>>535
ls -l `< xyz` なら期待通りの結果になるよ。

bash 依存の記法だったと記憶しているけど。


542 名前:539 mailto:sage [2007/04/05(木) 10:21:44 ]
入門UNIXシェルプログラミング(ソフトバンク株式会社、Bruce Blinn、初版)
の87ページに確かに載っているな

----------
$ cat xyz # xyzファイルの中身を確認
abc nnn
$ ls -l < xyz # xyzファイルを「標準入力」としてリダイレクトする
----------

ls (GNU coreutils) 5.97では動きませんでしたがええ。

543 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 12:53:34 ]
リダイレクトのことで質問なんですが
中身がスペース一つのファイルsampleを
cat test | sed -e 's/ / /' > test2
とするとtest2にスペース10個が出力されるので
cat test | sed -e 's/ / /' > test
とするとtestの中にはスペースが10個入っていると思うんですが、
中身を見てみると空になってしまいます。
一つのコマンドの中で同じファイルに対して入出力のリダイレクトを行うと
空になってしまうのはわかるんですが、今回の場合はどうしてうまくいかないのでしょうか?

544 名前:543 mailto:sage [2007/04/05(木) 12:55:16 ]
すいません、上の例でのtestはsampleの間違いですorz

545 名前:543 mailto:sage [2007/04/05(木) 12:57:52 ]
何度もすいませんorz
どうやら連続した半角スペースは一つにまとめられてしまうみたいで、
上の例のs/ / /はs/スペース1個/スペース10個/ってことです。

546 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 13:50:57 ]
>>545
一部のOSのようにパイプラインを非同期にしか実装してない環境ならいざ知らず、
まともなOSではパイプラインの前後のプロセスは同時に実行されるので、
パイプラインに接続する一つのファイルを読み書きしようとすれば当然そうなる。




547 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 14:50:40 ]
つまり上の例だと
・最初に書き込み用にファイルを開く、当然ファイルの中身は空になる。
・catは空のファイルの中身を出力する
・空がsedに渡されるので当然空をファイルに書き込む
という順番で処理が行われるんでしょうか?

548 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 15:14:56 ]
ちょっと違うな。
cat test | sed -e 's/ / /' > test
の場合、
シェルがtestを"w"で開いてからcatとsedを起動する筈だから、
catが起動された時点でtestは既に空の筈だ。
空の入力に対してcatは何も出力しないし、sedも同じように何も出力しない。
従って、空になるのはcatやsedが起動される前と言うことだ。

ちなみに、どうしても同じファイルに読み書きしたいなら
sed -e 's/ / /' < test | tee test
のようにしてしまえばいい。
これなら、シェルがtestを開いてからteeがtestを開こうとするので
(unixの開きっ放しのファイルは削除できたように見えてもそれは見掛けだけ仕様に基づき)
無事に処理される筈だ。

549 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 15:27:54 ]
まず最優先でリダイレクトのための処理が行われて、それから
コマンドの処理が行われるんですね。わかりました。ありがとうございます。

550 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 17:02:21 ]
なんか今一判っていない悪寒。

551 名前:デフォルトの名無しさん mailto:sage [2007/04/06(金) 02:40:06 ]
>>549
GNU sed 使ってるなら -i オプションつけとけ


552 名前:デフォルトの名無しさん [2007/04/07(土) 19:35:57 ]
シェルを初めて組みます。
Cシェルで、自分のグローバルIPを取得して、そのIPをメールで送信するようなプログラムを
組みたいと思っております。

で、グローバルIPの取得の仕方が分からないのですが、
どのようにかけばよいのでしょうか?

OSはRedHat10です。

553 名前:デフォルトの名無しさん mailto:sage [2007/04/07(土) 20:07:14 ]
シェルスクリプトのことをシェルゆーな。
Cシェルで書くな。

プライベートアドレス
10.x.x.x
172. {16-32} .x.x
192.168.x.x

割り当てられているIPアドレスは

LANG=C
/sbin/ifconfig |sed -n 's/inet addr:¥([^ ][^ ]*¥) .*/¥1/p'
で取れるから、あとはawkでも使って該当しないものを除外すれば
いいんじゃないか?

と書いてから気づいたが、家のダイアルアップルータに繋がっている
LinuxからグローバルIPアドレスを取ろうとするなら、Linuxにはプライ
ベートIPアドレスしか割り当てられてない。取るべきはルータに付いてる
グローバルIPアドレスになるから別の方法が必要だぞ。


554 名前:デフォルトの名無しさん [2007/04/07(土) 22:25:30 ]
>>553
すいません、ありがとうございます。
何もわかってないんで^^;
ずばり、そのとおりで、取得したいのはルータについてるグローバルIPです。。

555 名前:デフォルトの名無しさん mailto:sage [2007/04/07(土) 22:42:16 ]
>>554
ダイアルアップルータやモデムにはtelnetサーバが内蔵されていることがある。
叩くコマンドが分かれば、expectを使って取得できるかもしれない。

httpサーバを内蔵していることもあるが、こっちはずばりIPアドレスを確認する
ページを持ってるかもね。


556 名前:デフォルトの名無しさん mailto:sage [2007/04/07(土) 23:00:35 ]
>>554
誰もおまいのルータの仕様を知っているやつはいないからな・・・

うちのFLASHWAVE 2040 M1ならID:PASS@ルータのIP/doKeeping.htmlを
wgetで取得してvar sIpAddress="*.*.*.*";の場所を取得すればわかる。



557 名前:デフォルトの名無しさん mailto:sage [2007/04/08(日) 00:37:43 ]
何も考えずにメール出せば、大抵はReceived:にIPアドレスが自動的に書かれる。
書かれないならば、書いてくれるメールサーバを提供しているISPに乗り換える。


558 名前:537 mailto:sage [2007/04/11(水) 10:24:46 ]
ソフトバンクさんからメールの返事が届きました。
正誤表も更新したみたいです。

559 名前:デフォルトの名無しさん mailto:sage [2007/04/11(水) 12:36:15 ]
alias定義で改行の前に入れる\にはどのような作用があるのでしょうか?
csh でいろいろと試してみたところ、下のようにwhile文などが使えるようになりますが、
一方で、引数を扱ったりwhile文のネストをしたりすると正常に動作しなくなってしまいます。

alias loop '\
set count = 1\
while ( $count <= 5 )\
echo hoge\
@ count++\
end\
'


560 名前:デフォルトの名無しさん mailto:sage [2007/04/11(水) 12:45:23 ]
未だだね。

561 名前:デフォルトの名無しさん mailto:sage [2007/04/11(水) 12:46:29 ]
あーいけね、>560は>558の話ね。

>>559
行末のバックスラッシュは改行文字をエスケープする。

562 名前:デフォルトの名無しさん mailto:sage [2007/04/11(水) 13:19:26 ]
>>561
「改行文字をエスケープする」の意味を具体的に教えて欲しいのです。
>>559のコードで\+改行を空白に置き換えると動かなくなります。
妙な副作用がなぜ出るのかも謎です。

563 名前:デフォルトの名無しさん mailto:sage [2007/04/11(水) 22:34:26 ]
>>552
診断君とかにアクセスしてIP抜いてもらって
それをパースするのはだめなんか?

564 名前:デフォルトの名無しさん mailto:sage [2007/04/11(水) 22:36:33 ]
ワンクリ詐欺サイトにアクセスすればIPアドレス教えてくれそうだな。



565 名前:デフォルトの名無しさん mailto:sage [2007/04/11(水) 23:29:53 ]
>>563
頻度にもよるけどあんま他人様のとこに頼るのもいかんと思う。
自前で取れるんならそうした方が優しいし確実。一応
ttp://info.ddo.jp/remote_addr.php
とか使うとワンライナーでやれるけど。

566 名前:デフォルトの名無しさん mailto:sage [2007/04/12(木) 12:59:30 ]
>>562
シェルスクリプトにおける改行の意味を調べてみると良いよ。

alias loop 'set count = 1;while ( $count <= 5 );echo hoge;@ count++;end;'




567 名前:デフォルトの名無しさん mailto:sage [2007/04/13(金) 05:02:58 ]
>>566
while?

568 名前:デフォルトの名無しさん [2007/04/13(金) 21:22:17 ]
質問させてください。
以下のように、test-serverへ接続し、
date;hostname;whoamiを実行するスクリプトを書いてます。
date;hostname;whoamiの結果をリダイレクトし、
スクリプト本体があるサーバに保存したいのですが、
その場合、どう記述すれば良いでしょうか。

#/bin/bash
HOST=test-server
UNAME=root
PASSWD=***

expect -c "
set timeout 20
spawn telnet $HOST
expect login:\ ; send \"$UNAME\r\"
expect sword:\ ; send \"$PASSWD\r\"
expect \"$\" ; send \"ls\r\"
expect \"$\" ; send \"date;hostname;whoami\r\"
expect \"$\" ; send \"exit\r\"

569 名前:デフォルトの名無しさん mailto:sage [2007/04/16(月) 11:40:37 ]
そのスクリプトの出力をリダイレクトすればいいのではなくて?

570 名前:568 mailto:sage [2007/04/17(火) 21:48:16 ]
その方法が分からないのです。expect内部でリダイレクトすると
接続先にファイルが出来てしまうんじゃ無いでしょうか

571 名前:デフォルトの名無しさん mailto:sage [2007/04/17(火) 23:45:47 ]
>>570
にほんごよめますか?

572 名前:デフォルトの名無しさん mailto:sage [2007/04/18(水) 00:08:52 ]
ラッパー側のスクリプトの出力をリダイレクトしようとしても、
expectの中で起動したプロセスの出力はexpectが全部食っちゃうん
じゃないの?


573 名前:デフォルトの名無しさん mailto:sage [2007/04/21(土) 18:39:33 ]
あるプログラムをバックグラウンド実行して、
そのプログラムが一定時間後に終了していなかったら終了させる、みたいなことはできますか?

こんなイメージです。

#!/bin/sh

/bin/hoge & # 数十分かかる。途中で固まるかもしれない。

sleep 3600 # 念のため一時間待ってみる

[ hoge が終了していなかったら hogeをkillする。終了していたら無視 ]

exit

574 名前:デフォルトの名無しさん mailto:age [2007/04/21(土) 18:41:17 ]
あげ

575 名前:デフォルトの名無しさん mailto:sage [2007/04/21(土) 18:50:35 ]
>>573
こういう事?

#!/bin/sh -x
DURATION=3600

hoge &
PID=$!

echo ${PID}
sleep ${DURATION}

kill ${PID}
exit

576 名前:デフォルトの名無しさん mailto:sage [2007/04/21(土) 18:51:49 ]
>>573
pid控えておいて、atコマンドで終了スクリプトを仕込むとか。




577 名前:デフォルトの名無しさん mailto:sage [2007/04/21(土) 19:30:31 ]
一時間の間にpidが再利用されない保証があるなら。

578 名前:デフォルトの名無しさん mailto:sage [2007/04/21(土) 19:44:35 ]
kill する前に親プロセスの PID を確認すれば。

579 名前:デフォルトの名無しさん [2007/04/21(土) 20:11:19 ]
データを 1バイトだけ 読み込むコマンドってなんだっけ?

580 名前:デフォルトの名無しさん mailto:sage [2007/04/21(土) 22:21:18 ]
>>579
head -c 1 ?

581 名前:573 mailto:age [2007/04/21(土) 22:39:07 ]
>>575
こういうことです!ありがとうございます。

>>576
atd動いていないッス。。。

>>577
>>578
pidが再利用されない補償はもちろん無いです。
ググっていますがPPIDを確認をするコマンドが見あたらないorz
$!や$$でPIDが取れるようなのでpsコマンドの結果から何とかしてみます。


582 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 17:22:43 ]
waitか何かで子プロセスの終了待てなかったっけ?

583 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 18:14:45 ]
>>573

pid=$!
count=0
while [ $count -lt 60 ]; do
sleep 60
kill -0 $pid || break
count=`expr $count + 1`
done
[ $count -lt 60 ] || kill $pid

584 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 18:15:16 ]
待つよ。

585 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 18:16:01 ]
むぅ、30秒差で…

>>582
waitで待つよ。

586 名前:デフォルトの名無しさん mailto:sage [2007/04/23(月) 11:19:01 ]
>>583
kill -0 $pid
ってどういう意味?



587 名前:デフォルトの名無しさん mailto:sage [2007/04/23(月) 20:32:55 ]
kill -0 $pid 2>/dev/null || break
の方がベターだな。

>>586
man 2 kill
The kill() system call sends the signal given by sig to pid, a process or
a group of processes. The sig argument may be one of the signals speci-
fied in sigaction(2) or it may be 0, in which case error checking is per-
formed but no signal is actually sent. This can be used to check the
validity of pid.

プロセスが存在してそのプロセスにシグナルを送る権限があれば正常終了。
それ以外はエラー。つまり、プロセスの生存確認に使用できる。

588 名前:デフォルトの名無しさん mailto:sage [2007/04/23(月) 20:58:56 ]
>>587
なるほど。
日本語man読んでも意味がわかんなかったんだ

ありがとう

589 名前:デフォルトの名無しさん [2007/04/27(金) 13:30:22 ]
シェルブリッド

590 名前:デフォルトの名無しさん [2007/04/28(土) 16:07:15 ]

♪ア・ソ〜レ

ア・チョン! ア・チョン!

ア・チョン! チョン! チョン! バカ!

591 名前:デフォルトの名無しさん [2007/05/04(金) 00:27:06 ]
a.txt
2
4
23
87
483
3
b.txt
89
34
111
8
3
97
とある場合
program a.txt b.txt
と打てば
以下のようにに表示されるシェルスクリプトってできませぬか?

2+89=91
4+34=38
23+111=134
87+8=95
483+3=486
3+97=100

592 名前:デフォルトの名無しさん mailto:sage [2007/05/04(金) 00:35:51 ]
>>591
スクリプトにするまでもないが、

#!/bin/sh
paste a.txt b.txt | awk '{ print $1 "+" $2 "=" $1 + $2}'


593 名前:デフォルトの名無しさん mailto:sage [2007/05/04(金) 00:36:40 ]
あああ、paste $* | awk 以下略

594 名前:デフォルトの名無しさん mailto:sage [2007/05/04(金) 22:00:14 ]
ああpasteって知らなんだサンキュー

595 名前:デフォルトの名無しさん [2007/05/10(木) 19:24:42 ]
自演さらしあげ

596 名前:デフォルトの名無しさん [2007/06/18(月) 22:07:54 ]
既存ファイルの一部のみ書き換える事ってできますか?
(ファイル名変えずに)

NHK,1
NTV,4
TBS,6
FTV,8
ANB,10

というテキストがあったとして
sed 's/N/X/g' という操作をして

XHK,1
XTV,4
TBS,6
FTV,8
AXB,10

としたいです。



597 名前:デフォルトの名無しさん mailto:sage [2007/06/18(月) 22:23:39 ]
別のファイルに出力した後で、mvかcp

598 名前:デフォルトの名無しさん mailto:sage [2007/06/18(月) 22:34:19 ]
-i オプションあるならそれ使え

599 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 06:36:31 ]
(mv file file.bak&& sed -e 's/N/X/g' >file) <file

600 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 06:47:14 ]
sed -i 's/N/X/g' file

601 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 10:04:16 ]
sed -i ってどんな機能??

602 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 10:23:41 ]
手元のsedにはないオプションだ。

603 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 10:47:04 ]
なら perl 使っとけ。
perl -i -pe 's/N/X/g' file

604 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 23:36:49 ]
edでいいんじゃね?

605 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 00:30:13 ]
ファイルのある文字列を含む行と行の間を取得するにはどうしたらいいのでしょうか?
例えば「abc」「def」を含む行の間、2・3・4行目を取得をしたいです。
grepでやろうとしたのですが、どうしてもうまくいきません。。

abcaa
aaaaa
bbbbb
ccccc
defbb

606 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 00:36:36 ]
>>605
sed -n '/abc/,/def/p' < text | sed '1d;$d'

なんか冗長なのと、該当箇所が複数あると駄目だな。




607 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 00:37:59 ]
パイプの後段を sed '/abc/d;/def/d' にすれば該当箇所が複数あってもOKかも。


608 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 00:47:05 ]
>>605
sed -n '1,/abc/b; /def/q; p'

609 名前:605 mailto:sage [2007/06/27(水) 01:12:46 ]
レスありがとうございます。

無理やりawkで冗長なものを作ろうとしてました。
もっと修行して出直します。

610 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 01:37:53 ]
>>609
別にawkでいいんじゃね。ラクだし
↓複数箇所でも大丈夫
awk '/aaa/{f=1;next} /bbb/{f=0} f{print}'

611 名前:デフォルトの名無しさん mailto:sage [2007/06/29(金) 23:03:01 ]
つーかやり無理一行で作らんでも、perlとかで普通に作ればいいんじゃね。
冗長だろうがなんだろうが。

612 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 12:04:28 ]
awkでがんばって一行で作ったのの速度と
perlでシコシコださく書いたのの速度は
どっちが速いですかね

613 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 12:11:24 ]
別に全然頑張ってない

614 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 12:19:38 ]
awkで一行で書けるものがperlで一行で書けない理由は無い。

615 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 15:09:13 ]
一行に納める必要はないです。
バックリファレンスなどの特殊な機能を使わなければ
遅延評価DFAで動くawkは行数が増えても遅くなりません。
逆に頑張って一行で書いてもあんまり高速化しません。

616 名前:デフォルトの名無しさん [2007/07/04(水) 23:12:58 ]
九九の表を作るスクリプトなんですけど
cshで@を使わないで書き直したらどうなりますか?

#!/bin/csh -f

echo " | 1 2 3 4 5 6 7 8 9"
echo "--|------------------"

foreach i (1 2 3 4 5 6 7 8 9)
eaco -n " $i|"
foreach j (1 2 3 4 5 6 7 8 9)
@ seki = $i
@ seki *= $j
printf "%3d" $seki
end
echo ""
end
echo "--|------------------"




617 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 23:21:45 ]
@を使わないならBourne Shellでやるようにexprを使えば?


618 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 23:25:05 ]
>>617
Borne shellで書き換えは出来るんですけど
課題としてcshで@を使わないで書き直すように指示されてるんです

619 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 23:35:33 ]
ばか?

620 名前:デフォルトの名無しさん [2007/07/05(木) 00:28:33 ]
しつもん

スイッチのポートとその先のPCのMACをSNMPで対応付けたいのですが、

#!/bin/bash
while [MACアドレスがある限り];do

snmpwalk -c コミュ IP .1.3.6.1.2.1.17.4.3.1.1 >aa
snmpwalk -c コミュ IP .1.3.6.1.2.1.17.4.3.1.2 >bb
snmpwalk -c コミュ IP .1.3.6.1.2.1.17.1.4.1.2 >cc
snmpwalk -c コミュ IP .1.3.6.1.2.1.31.1.1.1.1 >dd

grep MAC aa > mib
grep mibの右側 bb >bridge
grep bridgeの右側 cc >ifindex
grep ifindexの右側 dd >port

paste MAC,port >output.txt
done <mac.txt

みたいなたらい回ししか出来ないんですか?


関係ないけどどうして演算結果を変数に入れるのがあんなに変な形式なんだろう?


621 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 00:40:18 ]
>>618
#!/bin/csh -f

echo '
@を使わないことに何の意味があるの?'
echo 'あんた馬鹿じゃねーの?'

622 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 01:02:45 ]
>>618
Bourne Shellでやる「ように」と書いたのが見えませんでしたか?
・cshでも``記法は使えるでしょ?
・exprはBourne Shellの内部コマンドじゃないでしょ?


623 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 01:37:06 ]
>>620
コマンド置換を山ほどネストすれば一時ファイルはもっと減るんじゃね?
つかこの程度のことにbash使うな
で、変な形式って?


624 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 00:53:44 ]
文字列+数値(たまに数値の無い行がある)の並んだファイルを置換したいです
○○○1
××××200
△△
□□66

とか並んでるのを、
○○○2
××××201
△△
□□67

みたいに。
sedで左 >file1
sedで右 | sed -e "s/\([0-9][0-9]*\)/&+1/" | bc >file2
paste file1 file2 > file3
で解決かと思ったら、△△の行がbcで勝手に詰められて結果がずれてしまう…
私の頭ではこれ以上思いつきませんでした。助けて


625 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 00:56:27 ]
awkでいいじゃん。

626 名前:赤帽勉強中 mailto:sage [2007/08/02(木) 21:45:16 ]
・lftpを使用してファイルアップロードと削除を行う(mirrorは使わない)
・アップロードと削除の対象ファイルはリストから読み込ませる

って機能のスクリプトを作ろうとしているんですけど、
ファイル名をリストから読み込ませてのアップロードと削除がどうやれば良いのか。。。
どなたかlftpに詳しい方、アドバイスを下さいませ。(-∧-;) ナムナム



627 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 22:19:08 ]
lftp使ったことないのでmanを見てみたが、manの範囲でできる。

実行するコマンドをテキストファイルに羅列して
lftp -f そのファイル

標準出力からコマンドを食わせることができればきれいなんだけどな。

cat <<EOF > commands
user hoge pass
cd hoge
EOF
sed 's!^!put !' < put_file_names >> commands
sed 's!^!del !' < del_file_names >> commands
lftp -f commands

とかそんな感じじゃね?


628 名前:赤帽勉強中 mailto:sage [2007/08/02(木) 23:10:38 ]
>>627
レスありがとうございます♪おかげで何とかなりそうですよ。
実はmanを見たりググったりしていたんですが何じゃこりゃ?って感じで理解できていませんでした(汗
まだまだ全然勉強が足りませんですね。。。ヾ(´▽`;)ゝアセアセ






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<248KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef