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


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

シェルスクリプト総合@LINUX Part5



1 名前:1様 [2009/04/03(金) 22:17:43 ID:0qFlvOW9]
UNIX板のスレを見ている方も多数おられるかと思いますが、
まあそれはそれとして、BASHウゼーとか言われる心配なく
平和にLINUX的スクリプト談義しましょうよ。

初めての自作スクリプト、自信ないから見てください。な初心者から
トリッキーな技を駆使した作品を披露したい、蘊蓄を語りたい上級者まで
いろいろな人に参加して頂けると嬉しいです。

perlやらPythonやらの話が混ざっても良いんでない?

Part4 : pc11.2ch.net/test/read.cgi/linux/1210999497/
Part3 : pc11.2ch.net/test/read.cgi/linux/1184077033/
Part2 : pc11.2ch.net/test/read.cgi/linux/1154578200/
Part1 : pc8.2ch.net/test/read.cgi/linux/1121994321/

>>2-5あたりに色々と。

232 名前: ◆Zsh/ladOX. mailto:sage [2009/08/09(日) 14:27:23 ID:/ZeBm1qf]
% /usr/bin/shutdown -r now
zsh: そのようなファイルやディレクトリはありません: /usr/bin/shutdown
% locate shutdown|grep bin
/sbin/shutdown
/usr/bin/pm-shutdown

なんで無いね。


233 名前:login:Penguin mailto:sage [2009/08/09(日) 16:35:29 ID:CB8fkMOP]
# ながいこと Vine しか使ってないから他のディストリのことはわからない。

>>225
シェルスクリプトの "reboot" を
/sbin/reboot とか /usr/bin/reboot とかに書き換えてみると動作に違いがでると思う。

> 権限
pam って仕組みで管理されてると思う。/etc/pam.d/ 以下のファイル。

>>225-232
Vine だと usermode っていうパッケージに
/usr/bin/consolehelper
/usr/bin/halt
/usr/bin/poweroff
/usr/bin/reboot
/usr/bin/shutdown
/usr/sbin/userhelper
とかいったものが入ってる。usermode-gtk ってパッケージもある。

Description :
usermode パッケージには、一般ユーザが設定されたプログラムをスーパーユー
ザとして実行できるようにするユーザヘルパープログラムが含まれています。

234 名前:login:Penguin [2009/08/09(日) 22:04:40 ID:ivLlFzN/]
シェルスクリプトでコマンド番号を選択したりIPを入力したりするツールつくったんですが、
ctrl+cやIP入力にコマンドを入れてみて実行されるかどうかといった確認はしてみましたが
それ以外にセキュリティやテストしてみるといいことなどあれば教えてください。


235 名前:login:Penguin mailto:sage [2009/08/09(日) 22:52:55 ID:C0J3iJDt]
スクリプト晒して!

236 名前:login:Penguin mailto:sage [2009/08/09(日) 23:03:57 ID:IVuBeWRI]
晒されても答えようがないような。
C-c が入れられたときの正しい処理とか本人でないと知らないし。

237 名前:234 [2009/08/09(日) 23:20:52 ID:ivLlFzN/]
>>235
IP以外の文字が入れられたらといった時の処理はまだいれてませんが
下記のような事を繰り返してconfを書き換えて再起動するという感じです。

read newip
$newip="IPADDR=""$newip"
sed -i "s/$oldip/$newip/g" /etc/sysconfig/network-scripts/ifcfg-eth0
/etc/rc.d/init.d/network restart
menufunc


238 名前:login:Penguin mailto:sage [2009/08/10(月) 00:04:28 ID:CdStD5IJ]
>>227
sidを知らんのか。

239 名前:login:Penguin mailto:sage [2009/08/10(月) 01:28:19 ID:qfqY90wM]
a
b
c
...

と一語ごとに改行された一つのテキストファイルを
a b c d e f g h i j k
l m n o ...
と言うように10列ごとに改行するテキストにしたいと思い、
スクリプトを組んだのですが動作が遅く、重くなってしまって困惑しています
どなたかお知恵をお貸しくださると助かります。

#/bin/bash
FILE=$1
LINENUM=`expr 1`
OFILE=/dev/shm/hoge

while read line
do
if [ $LINENUM -lt 10 ];then
echo -n "$line" >> $OFILE
echo -n -e "\t" >> $OFILE
LINENUM=`expr $LINENUM + 1`
else
echo "$line" >> $OFILE
LINENUM=`expr 1`
fi
done <$FILE

240 名前:login:Penguin mailto:sage [2009/08/10(月) 01:50:52 ID:vmT7yJCz]
#!/bin/sh
FILE=$1
OFILE=/dev/shm/hoge
LINENUM=1
while read line
do
if [ $LINENUM -lt 10 ]
then
echo -n "$line"
echo -n -e "\t"
LINENUM=$(( LINENUM + 1 ))
else
echo "$line"
LINENUM=1
fi
done <$FILE >$OFILE



241 名前:login:Penguin mailto:sage [2009/08/10(月) 02:00:08 ID:qfqY90wM]
>>240
ありがとうございます! 処理が覿面に早くなりました!
いちいち書き出さないで最後に一括して書けばよかったんですね…

242 名前:login:Penguin mailto:sage [2009/08/10(月) 02:10:30 ID:vmT7yJCz]
>>241
たぶんexprの呼び出しのほうがコストが高いよ

243 名前:login:Penguin mailto:sage [2009/08/10(月) 12:26:13 ID:5IcilgjJ]
自分で動かすだけならこれでいいやと思ったら、そんだけで改善できたのか…
----
#!/bin/sh
FILE=$1
OFILE=/dev/shm/hoge

sed -e '$!N;$!N;$!N;$!N;$!N;$!N;$!N;$!N;$!N;s/\n/\t/g' <$FILE >$OFILE

244 名前:login:Penguin [2009/08/10(月) 15:31:57 ID:oeYkUDqx]
数字の判定は[0-9]と正規表現使って判定してるんですが
IPアドレスかどうかの判定が出来るような正規表現ってあるんでしょうか。
無い脳みそひねってもいい案が出なかったのであれば教えてください。

245 名前:login:Penguin [2009/08/10(月) 15:41:18 ID:86RyWVEw]
>>244
ググレばサンプルたくさんあるよ。

246 名前:login:Penguin mailto:sage [2009/08/10(月) 15:59:59 ID:BhLss4cE]
お前ならどうするかを教えてやりゃーいいじゃん。

247 名前:login:Penguin mailto:sage [2009/08/10(月) 16:10:10 ID:sXOG+s90]
PowerShell神すぎだろ。
このスレ見てると原始人が石斧振り回してるように見えてくるぜ。

248 名前:login:Penguin mailto:sage [2009/08/10(月) 17:33:20 ID:6xgY8KY4]
僕には端末エミュとシェルの違いもわかってないマヌケが見えます。

249 名前:login:Penguin mailto:sage [2009/08/11(火) 00:20:03 ID:GKnhcfe3]
>>247
型の概念が邪魔。
コマンドが無駄に長い。
重い。

250 名前:login:Penguin [2009/08/11(火) 00:27:50 ID:4esITO9l]
Macのbashもここでいいんでしょうか…
OSは10.5.8です。

test.shを
----
#!/bin/sh

echo $1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12
----

とします。
./test.sh 1 2 3 4 5 6 7 8 9 10 11 12
と実行すると素直に
1,2,3,4,5,6,7,8,9,10,11,12
となるのに
./test.sh 1.0 2 3 4 5 6 7 8 9 10 11 12
と小数を入れて実行すると
1.0,2,3,4,5,6,7,8,9,1.00,1.01,1.02
となってしまうのはなぜでしょうか。




251 名前:login:Penguin mailto:sage [2009/08/11(火) 00:35:21 ID:XDXqx0+D]
./test.sh a 2 3 4 5 6 7 8 9 10 11 12
としてごらんなさい

252 名前:login:Penguin [2009/08/11(火) 01:01:07 ID:4esITO9l]
>>251

な、な、な、なんでしかこりは!

はっ!そうか!…

$1,$2...って書いてあるサイトが多いからけっこうな個数使えるのかと思ってました。
ありがとうございました。

253 名前:login:Penguin mailto:sage [2009/08/11(火) 01:07:27 ID:e9ttEiKp]
echo $1,$2,$3,$4,$5,$6,$7,$8,$9,${10},${11},${12}

254 名前:login:Penguin [2009/08/11(火) 02:19:40 ID:4esITO9l]
>>253
$(10)は試したのに${10}は試してませんでした…orz
ありがとうございます。

>>251を受けてshiftを使う対処法を知りました。

10個以上の引数を扱いたいという目的においては、shiftと${10}の善し悪しはあるんでしょうか。


255 名前:login:Penguin mailto:sage [2009/08/11(火) 02:26:00 ID:MclIhwRq]
こーいうトラップがあるからperlに逃げる人が多い

256 名前:login:Penguin mailto:sage [2009/08/11(火) 02:52:40 ID:e9ttEiKp]
>>254
$ man bash
/位置パラメータ
2 桁以上の数値を含む位置パラメータを展開するときには、ブレース ({}) で
囲まなければなりません。

よって${n}が正解だと思います

257 名前:login:Penguin [2009/08/11(火) 05:29:40 ID:4esITO9l]
>>255
僕はこのツンデレな感じが好きです。

>>256
やっぱりそうですよねw
正式名称は位置パラメータかー"引数"という呼び方しか認識してませんでした。


258 名前:sage mailto:sage [2009/08/11(火) 16:31:12 ID:ggsX9yQb]
topコマンドの内容をテキストに書き出したいんですが
top >> /tmp/top.test
とした場合に延々と書き込まれていきます。1度だけtopの内容を取得したいんですが
どのように変更すればよいでしょうか?

259 名前:login:Penguin mailto:sage [2009/08/11(火) 16:36:53 ID:zgCywBrU]
>>258
man top

260 名前:258 mailto:sage [2009/08/11(火) 17:33:42 ID:ggsX9yQb]
>>259
すいません。
manにありました。

現在topの内容をテキストに書き出して、テキストをsedで切り出して表示してるんですが
コマンドの戻り値を求めたいと思っておりますが
hogera=$(top -i -n1)
cpu=`sed -n '/Cpu(s)/p' "$hogera"`
こうすると「読み込めません: ファイル名が長すぎます」と出ます。
本来ファイル名の指定なのでうまくいかないのはあたりまえなのですが、
ファイルに書き出す事無くスマートに切り出す方法がありましたら教えてください。



261 名前:login:Penguin mailto:sage [2009/08/11(火) 17:42:23 ID:zgCywBrU]
>>260
いまいちやりたいことがわからんが
cpu=`top -b -n1 | grep '^Cpu'`
か?

262 名前:258 mailto:sage [2009/08/11(火) 17:54:30 ID:ggsX9yQb]
>>261
ありがとうございます。
そうか、grepすればいいだけの事ですね。
どうやら無意味にテンパってしまってるようです。

すいません。最後に1つだけ疑問に思っていることがあるのですが
シリアルコンソールで見る画面は横70文字にしとけって言われたんですが
何かそういった規格かなにかあるんでしょうか。検索してみてもそられしいものが
引っかからなかったんですが、70文字だとなかなか厳しいものがあるので
特に根拠のない文字数であるなら超えても構わないのではないかと思っております。

たびたびの質問で申し訳ありませんが、識者の方でご存じの人いたら教えてください。

263 名前:login:Penguin mailto:sage [2009/08/11(火) 17:55:36 ID:zgCywBrU]
>>262
スレ違い。

264 名前:258 mailto:sage [2009/08/11(火) 18:03:42 ID:ggsX9yQb]
>>263
解答ありがとうございます。
スレ違いとのことですが、これはどういったスレで質問するのがよろしいのでしょうか。
シェルスクリプトの表示だったのでこちらに投げさせていただいたのですが
どういった方面のスレかだけでも助言いただけないでしょうか。

265 名前:login:Penguin mailto:sage [2009/08/11(火) 18:07:41 ID:zgCywBrU]
>>264
くだらねえ質問はここに書き込め! Part176
pc11.2ch.net/test/read.cgi/linux/1246986882/

266 名前:login:Penguin mailto:sage [2009/08/12(水) 00:03:08 ID:0UM4nevW]
>>263
きびしー

267 名前:login:Penguin [2009/08/12(水) 00:05:03 ID:I1tOnENr]
>>264
VGAとかSVGAとか解像度で違うっての聞いたことある。
もしかしたら全然違うかもしれんがそういうときはきっと誰か激しく突っ込んでくれるはず。

268 名前:login:Penguin mailto:sage [2009/08/12(水) 00:10:31 ID:u9/Em9/R]
>>267
ぜんぜん違う話。

269 名前:login:Penguin mailto:sage [2009/08/12(水) 05:02:52 ID:0UM4nevW]
$ cat<<<h$(cat<<<e$(cat<<<l$(cat<<<l)o)\!)

270 名前:login:Penguin [2009/08/12(水) 14:49:33 ID:/9MBM8gW]
特定文字列が含まれてるかどうかの判断って出来ますか?
sedとかで文字の置き換えとか入れ替えが出来る程度のレベルです。
dg=`route | grep '192.168.24.1'`
でdgの中にug含まれているかどうかを確認したいと思ってます。




271 名前:login:Penguin mailto:sage [2009/08/12(水) 14:51:54 ID:u9/Em9/R]
>>270
route | grep '192.168.24.1' | grep ug
ってこと?

272 名前:login:Penguin mailto:sage [2009/08/12(水) 14:59:52 ID:LZ159q8G]
>>270
case "${dg}" in
*ug*)
# match
;;
*)
# not match
;;
esac


273 名前:270 [2009/08/12(水) 15:13:57 ID:/9MBM8gW]
>>271
そうでした。パイプでさらにgrepすればよかったですね。
こちらの方法でも出来ました。
ありがとうございます。

>>272
判定までしていただいて助かります。
こちらの方法で出来ました。
ありがとうございます。


まだまだよくわかってないですがここで質問しなくてもすむように勉強したいと思います。

274 名前:login:Penguin [2009/08/12(水) 18:46:07 ID:jKHDnL7q]
シェルスクリプトでサーバーのチェックをしてます。
それ自体はcronで定期的に行ってますが、これと併せて定期的にデータを送信出
来ればと考えてます。
実際にはチェックして引っかかったサーバーにzipを送り、サーバーは時間が来
れば勝手に実行するという感じですが、シェルスクリプトでzipデータを別サー
バーに送るとかいうことが可能でしょうか。
可能ならどんな関数を使えばよいかアドバイスもらえないでしょうか。
初歩的な質問かと思いますが宜しくお願いいたします。



275 名前:login:Penguin mailto:sage [2009/08/12(水) 18:54:50 ID:8iPFdi1w]
金玉 → >>274






。゜( ゜^∀^゜)゜。アーッハハハハノヽノヽノヽノ\ / \

276 名前:login:Penguin mailto:sage [2009/08/12(水) 21:03:12 ID:0s7n/+F7]
>>274
sshの鍵交換してパスワードを聞かれないようにしておいて
scpなりrsyncなりで送れば良いと思う。

277 名前:login:Penguin mailto:sage [2009/08/12(水) 23:35:06 ID:tCsvaW+m]
>>239

これはどう?

#/bin/bash
FILE=$1
OFILE=/dev/shm/hoge
xargs < $FILE -n10 | tr " " "\t" > $OFILE


278 名前:login:Penguin mailto:sage [2009/08/12(水) 23:40:23 ID:tCsvaW+m]
>>277 じこれす

まちがった

xargs < $FILE -n10 | tr ' ' \\t > $OFILE

です。

279 名前:login:Penguin mailto:sage [2009/08/12(水) 23:56:35 ID:0UM4nevW]
すげー

280 名前:login:Penguin mailto:sage [2009/08/14(金) 09:45:57 ID:vesWTwzQ]
変数COUNTER の値が10より小さければ
MMF0009 と表示
100より小さければ
MMF0099 と表示
1000より小さければ
MMF0999 と表示
1000ならば
MMF1000 と表示
というスクリプトをcase 文を用いてすっきり書きたくて下記の通り書きましたが、
算術式及び、case の構文の違いでしょうか間違っています、ご教示願えないでしょうか。

#!/bin/bash
COUNTER=0
DIGIT3=000
DIGIT2=00
DIGIT1=0

while [ ${COUNTER} -lt 999 ]
do
case "$COUNTR" in
`expr ${COUNTER}` -lt 10) echo "MMF$DIGIT3$COUNTER";;
`expr ${COUNTER}` -lt 100) echo "MMF$DIGIT2$COUNTER";;
`expr ${COUNTER}` -lt 1000) echo "MMF$DIGIT1$COUNTER";;
`expr ${COUNTER}` = 1000) echo "MMF$COUNTER";;
esac
COUNTER=`expr ${COUNTER} + 1`
done




281 名前:login:Penguin mailto:sage [2009/08/14(金) 09:56:51 ID:HEs3iRVc]
>>280
manpageより

case word in [ [(] pattern [ | pattern ] ... ) list ;; ] ... esac
A case command first expands word, and tries to match it against each pattern in turn,
using the same matching rules as for pathname expansion (see Pathname Expansion below).

282 名前:login:Penguin mailto:sage [2009/08/14(金) 10:03:19 ID:GRUhI9LP]
こういうこと?
seq -f 'MMF%04.f' 0 1000

283 名前:login:Penguin mailto:sage [2009/08/14(金) 15:19:52 ID:VHMVUNf7]
>>280
すっきり書いてみた。

#! /bin/sh
COUNTER="$1"

DIGIT1=000
DIGIT2=00
DIGIT3=0
DIGIT4=
eval 'echo "MMF${DIGIT'"${#COUNTER}"'}${COUNTER}"'


284 名前:283 mailto:sage [2009/08/14(金) 15:31:27 ID:VHMVUNf7]
printfがあれば更にすっきり。

#! /bin/sh
COUNTER="$1"

printf 'MMF%04d\n' "${COUNTER}"


285 名前:login:Penguin mailto:sage [2009/08/14(金) 23:08:31 ID:vesWTwzQ]
>>280 です
皆さんどうもありがとうございます。
C のswitch〜case構文のようなものかと勘違いし、case の使い方が全然間違ってましたし他にも細かなミスがありましたが、調べてこんな感じで期待通りの振る舞いができました
case $COUNTR in
?)
echo "MMF$DIGIT3$COUNTER"
??)
echo "MMF$DIGIT2$COUNTER"
??)
echo "MMF$DIGIT1$COUNTER"
1000)
echo "MMF$COUNTER"
esac
それから、seq とかeval の使い方も調べて見ます、どうもありがとう。

286 名前:login:Penguin mailto:sage [2009/08/14(金) 23:17:06 ID:vesWTwzQ]
>>285です
もう一つお願いします。
シェルスクリプト というのは、そのような仕組みになってるんでしょうか?
単純にインタプリタ型の言語なのでしょうか、自分としてはそうではない気がします
なぜなら、sudo コマンドを使う場合、シェルスクリプトの場合、スイッチ を付加して実行しますが
それは直接、カーネルに対してオペレーションしているような気がするのですが?詳しい方が居られましたら教えてください。

287 名前:login:Penguin mailto:sage [2009/08/14(金) 23:19:32 ID:vesWTwzQ]
×シェルスクリプト というのは、そのような仕組みになってるんでしょうか?
○シェルスクリプト というのは、どのような仕組みになってるんでしょうか?

288 名前:login:Penguin mailto:sage [2009/08/14(金) 23:40:04 ID:4UQz02FW]
>>286
>それは直接、カーネルに対してオペレーションしているような気がするのですが?

気のせいです。
手始めにforkとかexecvとか調べたらいいんじゃね?


289 名前:login:Penguin mailto:sage [2009/08/14(金) 23:56:56 ID:cgRLII5a]
インタプリタだよ。

sudoは、シェルとは別のプログラムです。
シェルスクリプト中で、シェルのビルトイン関数やらで無いコマンドを書くと、
シェルは、その名前のプログラムを探してそれを実行しようとします。

上に出てきた中で言うと、
while case echo evalはシェルのビルトイン関数(?)で
seq printf sudoは外部プログラムです。

「カーネルに対してオペレーションしている」云々は、
言っている意味が良く分かりません。
全ての意味のあるプログラムは、直接的にしろ間接的にしろ、
カーネルと相互作用するはずですから。

290 名前:login:Penguin mailto:sage [2009/08/15(土) 01:56:48 ID:niIslDjl]
while, case と echo, eval はくくりが別だけどな。
type while とか type echo とかやってみ。



291 名前:login:Penguin mailto:sage [2009/08/15(土) 19:58:45 ID:4JYHgxvW]
>>286 です
皆さんThxです。

292 名前:login:Penguin [2009/08/15(土) 23:51:22 ID:O3QLwBfx]
read packetcount
read port
tcpdump -n -c$packetcount -s1500 -vvv -X port $port
こんな感じでパケット見てるんですが、1パケットごとに色を変えることは出来ますか?
文字色の指定方法はわかるんですが、そういった指定方法や手法があればおしえてもらえないでしょうか。
なければおとなしくあきらめます。


293 名前:login:Penguin mailto:sage [2009/08/16(日) 02:00:07 ID:kxH41sn/]
>>292
色は無理。
portが読み込まれていない。

294 名前:login:Penguin mailto:sage [2009/08/16(日) 02:32:16 ID:m+r83sIL]
>>292

C1="$(tput setaf 0)"
C2="$(tput setaf 1)"
tcpdump -n -c 10 -s 1500 -vvv -X | while IFS="" read l;do
if [ "$l" = "${l#$'\t'}" ]; then
echo -n "$C1"
A="$C2";C2="$C1";C1="$A"
fi
echo "$l"
done

こんな感じ?
>>293の言っている意味がわからないので外してるかも…。

295 名前:login:Penguin [2009/08/17(月) 09:43:35 ID:WnQqR0f7]
#!/bin/bash
echo -e "|""`top -i -n1 | grep '^Cpu(s)'`""|";
ちょっとおおざっぱですが上記の方法でtopの内容を抜き取ってます。
Windows付属のハイパーターミナルで見ると普通に表示されるのですが、他のターミナルソフトで(tera termとか)で見ると
Cpu(s): 1.2%us, 1.2%sy, 0.0%ni, 96.3%id, 1.1%wa,erial8250: too much work for irq4
0m 0.1%hi, 0.2%si, 0.0%st|
こんな感じで途中にerial8250〜と表示されます。
これを検索してもそれらしいものも出てこず、何が原因かわからないでいます。
原因をご存じの方いましたらヒントかアドバイスもらえると助かります。

296 名前:login:Penguin mailto:sage [2009/08/17(月) 11:19:54 ID:Pf83pCV6]
>>295

コピペ間違ってないかな?
「serial8250: too much work for irq4」なら
次のページが引っかかった。
eve-japan.co.jp/demos/linux-boot-demo.html

ターミナルソフトによって異なるのは$TERM の問題なのかな?
表示自体は 単に stderr へのメッセージが表示されてるのか
とおもうけど。「2>/dev/null」とかつけたら 変わるのかな

297 名前:295 [2009/08/17(月) 11:55:51 ID:WnQqR0f7]
>>296
文字コードとかの問題でsが抜けてるっぽいです。
ログを見たら同じ記述があったのでメッセージが画面に出てるっぽいですね。
方法としては破棄する(やり方調べないといけないけど)かserial8250: too much work for irq4をsedとかで
消し去るくらいでしょうか。
スマートではないですがとりあえず消し去る方向で行ってみます。
ありがとうございます。

298 名前:login:Penguin mailto:sage [2009/08/17(月) 12:12:38 ID:cm75eODq]
シリアルコンソールだよね?
カーネルがprintkで出してるからsedとかじゃムリだと思う。

消したいなら/proc/sys/kernel/printkをいじるとか。

299 名前:297 [2009/08/17(月) 12:52:29 ID:WnQqR0f7]
>>298
ありがとうございます。
調べて6417を5417に替えようとしたら"printk" E667: Fsync failedとか出てきて
書き換えさせてくれませんでした。
解決方法はまだわかってませんがなかなかハードルが高そうです。

300 名前:297 [2009/08/17(月) 13:10:38 ID:WnQqR0f7]
補足です。

echo -e "|""`top -i -n1 | grep '^Cpu(s)'`""|";
の部分を消したら表示されなくなりました。
topした時だけ出てるみたいです。理由はわかりませんが。
top内容を >> top.datとかに書き出してそこから引っ張ってくれば
表示されないようになるかもしれません。
根本的な解決にはなってませんが・・・。



301 名前:300 [2009/08/17(月) 17:13:08 ID:WnQqR0f7]
さすがにスレ違かと思いますが、/proc/sys/kernel/printkというのはviでの編集は不可ですか?
ググってはいるんですが編集が出来ずに困っております。
もしかしたら凄い見当違いな事を行っているのかもしれませんが解決のヒントもらえると助かります。


302 名前:login:Penguin mailto:sage [2009/08/17(月) 17:20:05 ID:R0skv6Jz]
>>301
さすがにスレ違い。

303 名前:300 [2009/08/17(月) 17:30:37 ID:WnQqR0f7]
>>302
すいません。
くだ質に行ってみます。

304 名前:login:Penguin mailto:sage [2009/08/18(火) 06:39:39 ID:elYCry/8]
>>301
echoするもんでしょ。JK。

305 名前:login:Penguin mailto:sage [2009/08/18(火) 08:01:40 ID:8XgVhYMF]
そうか?
sysctl -w kernel/printk=foobar

306 名前:login:Penguin mailto:sage [2009/08/18(火) 09:35:31 ID:BInCpQzK]
もうくだ質に移動したよ。

307 名前:login:Penguin [2009/08/18(火) 18:39:48 ID:S4j+NJGU]
moge.dat
testjama na moji

sakujo="jama na moji"
okikae=""
echo `more /tmp/moge.dat | grep '^test' | sed -i s/$sakujo/$okikae/g`

これでmoge.datの中からtestだけ表示出来るのではないかと思っていたのですが
sed: -e 表現 #1, 文字数 13: 「s」コマンドが終了していません
というエラーが表示されます。オプションで-eも使用していませんし構文的には大丈夫そうに思えたのですが
間違いがあればご指摘いただけないでしょうか。

308 名前:login:Penguin mailto:sage [2009/08/18(火) 19:03:56 ID:9vBuj+t/]
sed 's/jama na moji//g' moge.dat

じゃいかんのか?
なぜechoしたりmoreしたりgrepしたりするのか意味わからん

309 名前:login:Penguin mailto:sage [2009/08/18(火) 19:12:00 ID:I/MV7qz2]
sed の -i はなぜつけているんだい?

310 名前:307 [2009/08/18(火) 19:31:44 ID:S4j+NJGU]
>>308
単純にmoreで見た中身をgrepしてそこからさらに削ればいいのかなと思い
検索をしてパイプでつなげただけの状態です。
また説明が足りませんでしたがmoge.datは複数行あってtestから始まる行が
いくつかあったことから素人考えでこのようになりました。

>>309
すいません。
別の場所のsedをコピーしたときについたみたいです。
この場合は必要ないですね。



311 名前:login:Penguin mailto:sage [2009/08/18(火) 19:37:15 ID:9vBuj+t/]
sed '/^test/s|jama na moji||g' moge.dat

312 名前:login:Penguin mailto:sage [2009/08/18(火) 19:43:42 ID:0jjNf9FI]
>>307の直接の答えを言うと、

sed -i s/$sakujo/$okikae/g

sed -i s/jama na moji//g

sed -i 's/jama' 'na' 'moji//g'

と引数4つに解釈されるから。

313 名前:login:Penguin mailto:sage [2009/08/18(火) 22:00:14 ID:elYCry/8]
>>306
マルチって死ねばいいと思う

314 名前:login:Penguin mailto:sage [2009/08/18(火) 22:23:21 ID:Df7zfcy/]
スレ違いを指摘されて移動してるんだから、マルチとは言わないだろ

315 名前:login:Penguin [2009/08/19(水) 11:19:58 ID:zpPUbNQu]
ログをとりたくてmessagesに内容を出すようにしたいのですが
echo "logtest" >> /var/log/messages
としても書き出されません。
このファイルとユーザー自体はrootではないので権限が問題かと思ってます。
このexampleユーザーはwheelに入れており、sudoで%wheel ALL=(ALL) ALLと念のため指定しましたがダメでした。
これは構文自体が間違っているということでしょうか。


316 名前:login:Penguin mailto:sage [2009/08/19(水) 11:38:22 ID:GJ3CGMhT]
>>315
sudo echo "logtest" >> /var/log/messages
とかやったの?
これだと >> 以下は sudo の外にあるから効かない。
sudo sh -c 'echo "logtest" >> /var/log/messages'
とかやればいい。

つーか logger で書いたら。

317 名前:login:Penguin [2009/08/19(水) 15:03:44 ID:9fjqV7Pu]
コマンドの実行結果を>>で適当なテキストに出力して見てみると
[H [J [0;10mtop - 20:06:35 up 51 min, 3 users, load average: 0.00, 0.00, 0.00 [0;10m [39;49m [K
いろんなコマンドでこんな感じになってるんですがこれは何なのでしょうか?
これはtop内容ですがなぜこうなるのかがわかりません。
表示されている文字だけをテキストに出したいのですがどうすればいいでしょう
か。

318 名前:315 [2009/08/19(水) 15:07:02 ID:zpPUbNQu]
>>316
素早いレスありがとうございます。
1個の命令として見られていなかったわけですね。
loggerでかけるところはそうしたいのですが、他にもいくつかファイルがあって
そちらでも追記したいと思っておりました。
まだ試してませんがこれでいってみたいと思います。


319 名前:login:Penguin mailto:sage [2009/08/19(水) 15:08:58 ID:yGi4QWIv]
topの人はtopの何を切り出したいのだ?
ロードアベレージ?

320 名前:login:Penguin mailto:sage [2009/08/19(水) 15:09:49 ID:GJ3CGMhT]
>>317
top なら -b で。
>>261 でも書いたはずだが。



321 名前:login:Penguin mailto:sage [2009/08/19(水) 15:16:10 ID:GJ3CGMhT]
>>317
ファイルへの出力は
基本的にはただの文字を順に追記していくだけ。
画面への出力は文字を反転させたり色を変えたり
いったん書いたものを戻って書き直したりする。
画面用の出力をそのままファイルに出すとおかしなことになる。

322 名前:login:Penguin mailto:sage [2009/08/19(水) 21:31:13 ID:rKA7cUBO]
echo "logtest" | sudo tee -a /var/log/messages

teeってマイナー?

323 名前:login:Penguin mailto:sage [2009/08/19(水) 22:00:23 ID:ZZH7H5sc]
いやんバカんな事やってないで、きちんとloggerを使いなさい。

324 名前:login:Penguin mailto:sage [2009/08/19(水) 22:31:33 ID:S8kRS54+]
シェルにloggerなんてあるの?

325 名前:login:Penguin mailto:sage [2009/08/19(水) 23:54:53 ID:Gto2VsIQ]
------------------------- 今からこのスレは外部コマンド禁止になりました -------------------------

326 名前:login:Penguin mailto:sage [2009/08/20(木) 00:22:53 ID:z7LXRLpP]
シェルの組み込みコマンドだけでやれってか?
厳しいな。。

327 名前:login:Penguin mailto:sage [2009/08/20(木) 10:46:36 ID:D2EfC5ES]
>>324
それ言ったら sudo だってないじゃん。

328 名前:login:Penguin mailto:sage [2009/08/20(木) 11:47:57 ID:tKteNA5S]
今、ネットワークカードを通過するトラフィック量をRRDToolを使用してグラフにしたくて
1秒あたりの送信・受信をバイトで求めるスクリプトを書いたつもりなのですが、
これでちゃんと値が求められているのか、自分ではよく分からないのです。
それっぽい感じの値は出てきてるんですが・・。

そこでなのですが「ここが違う」「そもそもそれじゃダメ」などということがありましたら、
教えていただきたく、ここに書き込まさせていただきました。
もし、お時間がありましたら添削していただけると嬉しいです・・・。

func_ethernet()
{
UserName="UserName"
AuthPass="AuthPassWd"
PrivPass="PrivPassWd"
HostName="localhost"
if [ $1 = "send" ]; then
 LogName="/tmp/log-send"
 LogOld=`cat ${LogName} | sed -n 2p`
 LogOldTime=`cat ${LogName} | sed -n 1p`
 date +"%Y-%m-%d %k:%M:%S" > ${LogName}
 /usr/bin/snmpget -a MD5 -A ${AuthPass} -l authPriv -u ${UserName} -x AES -X ${PrivPass} -v 3 ${HostName} .1.3.6.1.2.1.2.2.1.16.2 | awk '{print $NF;}' >> ${LogName}
 LogNew=`cat ${LogName} | sed -n 2p`
 LogNewTime=`cat ${LogName} | sed -n 1p`
 echo | awk '{print ( (newValue - oldValue) / (newTime - oldTime) );}' newValue=${LogNew} oldValue=${LogOld} newTime=`date -d "${LogNewTime}" +"%s"` oldTime=`date -d "${LogOldTime}" +"%s"`
elif [ $1 = "recive" ]; then
 略
fi
}
rrdtool update ${RRD_PATH}/ethernet.rrd N:`func_ethernet send`:`func_ethernet recive`

329 名前:login:Penguin [2009/08/20(木) 12:00:54 ID:3vJ7EKjF]
文字色と背景色ついて質問です。
わかりやすく色をつけてみたのですがこの場合は文字の部分のみが緑文字と黒背景となります。
#!/bin/bash
echo -en "\033[32;40m";
select i in "123" "456"; do
[ -n "$i" ] && break
done
case "$i" in
123) func123;;
456) func456;;
esac
文字ではない部分も黒背景とする事は可能ですか?

330 名前:login:Penguin mailto:sage [2009/08/20(木) 19:05:04 ID:KNtykgpF]
まずエスケープシーケンスを直接指定するのはよくない
端末によってサポートされている機能に違いもあるし

「文字ではない部分」の意味も不明

行単位ということなら

#!/bin/sh
tput setab 0
tput setaf 2
tput el
echo "Hello"



331 名前:login:Penguin [2009/08/21(金) 00:19:49 ID:F/0U9rwq]
文字ではない部分ってのはその通りだろう。
文字の背景の色を指定は出来るが、文字以外のところの背景色はどうすってことじゃね?
\033[32;40mはせめて
ESC=\033[
midori=${ESC}32
とかにしたほうがいいと思う。もっといい方法あればえらい人が教えてくれるはず。



332 名前:login:Penguin mailto:sage [2009/08/21(金) 00:26:48 ID:korZcQ4D]
>>331
tput使えよ。






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

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

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