[表示 : 全て 最新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あたりに色々と。

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使えよ。

333 名前:login:Penguin mailto:sage [2009/08/21(金) 00:34:42 ID:G/rWMdtH]
すみませんが組み込みコマンドだけでお願いします

334 名前:login:Penguin mailto:sage [2009/08/21(金) 00:41:38 ID:korZcQ4D]
>>333
busyboxにshとtputが入ってる場合はOK?

335 名前:login:Penguin mailto:sage [2009/08/21(金) 00:53:50 ID:hq/n18x3]
>>331
> 文字の背景の色を指定は出来るが、文字以外のところの背景色はどうすってことじゃね?

だから, 画面全体をそうしたければclearすればいいんじゃね
文字を書き込んでいない*どの部分を*背景色にしたいんだ, って話

336 名前:331 [2009/08/21(金) 07:39:21 ID:F/0U9rwq]
tputなんてあるわけね。
シェルに標準でそういうのあるの知らなかったよ。

>>335
文字がかかれてない場所全部じゃね?
ようは画面全体の背景色を指定したいってことだと思うけど。
文字と文字の背景色は\033[32;40mで指定できるけど
それ以外の全体の背景色という意味だと思う。


337 名前:login:Penguin mailto:sage [2009/08/21(金) 07:45:26 ID:korZcQ4D]
>>336
とある端末だとそうですね。


338 名前:login:Penguin [2009/08/21(金) 11:30:52 ID:90eN5uxA]
そういうの意識するほどたくさんの機器がないからだとおもうけど
俺はVT100でだいたい表示されてればOKかな〜とか勝手に思ってる。
ネットワーク機器だとやっぱりまだANSIとかが標準になってたりするのかな?
さすがに最近のネットワーク機器でVT52が標準とかってことはないと信じたいけど。

339 名前:login:Penguin mailto:sage [2009/08/21(金) 17:12:14 ID:hq/n18x3]
>>336
> ようは画面全体の背景色を指定したいってことだと思うけど。

>>335

行単位なら >>330
カーソル位置からscreenの最後までならelの代わりにed使えばいい

340 名前:login:Penguin mailto:sage [2009/08/21(金) 23:42:11 ID:korZcQ4D]
所謂、ブルースクリーンを作りたい。



341 名前:login:Penguin mailto:sage [2009/08/22(土) 19:41:23 ID:iygx6FPk]
# word.lst
あいうえお aiueo
かきくけこ kakikukeko
さしすせそ sasisuseso

#target.txt
なにぬねの
あいうえおキター
たちつてと
さしすせそ
キターかきくけこ

word.lst の区切文字はTAB 、またはSPACE とします
target.txt を一行ずつ読込み、word.lst のキーとなる単語があれば、
置換しdest.txt に出力するシェルスクリプトの書き方を教えて頂けないでしょうか。

#dest.txt
なにぬねの
aiueoキター
たちつてと
sasisuseso
キターkakikukeko

342 名前:login:Penguin mailto:sage [2009/08/22(土) 19:49:19 ID:+xcsiCNS]
まず服を脱ぎます

343 名前:341 mailto:sage [2009/08/22(土) 20:44:33 ID:iygx6FPk]
while read line
do
  処理(TARGET=あいうえお、DEST=aiueo)
done < word.lst

例えばこのように、line で読込んだ
あいうえお aiueo
を変数TARGET、 DEST に格納する方法を教えてもらえませんでしょうか。


344 名前:login:Penguin mailto:sage [2009/08/22(土) 21:14:08 ID:+xcsiCNS]
set $line
TARGET=$1 DEST=$2

345 名前:login:Penguin mailto:sage [2009/08/22(土) 21:44:23 ID:beHpftLf]
すぐ書ける簡単なやり方で

#!/bin/sh
while read from to
do
    echo "s|$from|$to|g"
done <word.lst >program
sed -f program <target.txt >dest.txt

346 名前:login:Penguin mailto:sage [2009/08/22(土) 23:46:26 ID:m2+LmGIC]
>>345さん、お世話になります
掲示していただいたスクリプトでの置換ですが、>>341 で掲示したファイルの置換は期待通りの結果になるのですが
下記のような内容のファイルだと全く置換できません、なぜなのでしょうか?

#target.txt
CREATE TABLE `利用明細` (
`伝票番号` INTEGER AUTO_INCREMENT DEFAULT NULL ,
`商品ID` INTEGER DEFAULT NULL ,
`数量` INTEGER DEFAULT NULL ,
PRIMARY KEY (`伝票番号`)
);

#word.lst
伝票番号 DENNPYOUBANGOU
数量 SUURYOU

347 名前:login:Penguin mailto:sage [2009/08/23(日) 00:31:10 ID:aCd7CupH]
>>346 です
解決しました、文字コードを錯誤してました(^^;


348 名前:login:Penguin mailto:sage [2009/08/26(水) 02:39:26 ID:5uGOu/R4]
1000文字ごとに改行を入れる簡単な方法を教えてもらえませんか

349 名前:login:Penguin mailto:sage [2009/08/26(水) 04:35:48 ID:aiWYMJf6]
これ、俺は思いつかない、ラテン文字だけなのか、マルチバイト文字も混在してるのか
こういうのは、やっぱ、perlやrubyが得意だ

350 名前:login:Penguin mailto:sage [2009/08/26(水) 04:41:51 ID:r5TfqoXR]
nkf -f 1000



351 名前:login:Penguin [2009/08/26(水) 14:07:13 ID:ehP4IQnp]
abcdefgabcdefgabc ...
と続く文字列にn文字ごとに「,」を入れてcsvにするにはどうしたらいいですか?

352 名前:login:Penguin mailto:sage [2009/08/26(水) 14:24:34 ID:LXSFF2c5]
echo abcdefghijklmnabcdefghijklmnh | sed 's/\(.\{5\}\)/\1,/g'

353 名前:login:Penguin mailto:sage [2009/08/26(水) 14:28:23 ID:z6vBIwzM]
echo 'abcdefgabcdefgabc' | sed 's/\(.\{変数n\}\)/\1,/g'



354 名前:login:Penguin mailto:sage [2009/08/26(水) 14:29:09 ID:z6vBIwzM]
重複スマソ

355 名前:login:Penguin mailto:sage [2009/08/26(水) 15:46:39 ID:ehP4IQnp]
>>352 >>353
thanx!!

356 名前:login:Penguin mailto:sage [2009/08/26(水) 18:44:54 ID:whFI2cwY]
list.txtのなかにURLが一行ずつあり,
そのURLをw3mでアクセスしてその結果を
URLからhttp://を除いたファイル名で保存したいのですが
#!/bin/sh
FILE=list.txt
while read LINE
do
$OUT=`echo $LINE |sed 's///'`
w3m -dump $LINE > $OUT
done < $FILE

これだとダメになってしまいます.とりあえずlist.txtにはgoogle.netを入れています.

357 名前:login:Penguin mailto:sage [2009/08/26(水) 18:54:19 ID:LXSFF2c5]
s###
とか区切り文字を変える。
$OUT=
の$は不要。

358 名前:login:Penguin mailto:sage [2009/08/26(水) 18:54:58 ID:CSCAGJKR]
とりあえず$OUTはOUTのtypoだよな
あとはsedのマニュアルでも読んどけ

359 名前:login:Penguin mailto:sage [2009/08/26(水) 18:59:39 ID:z6vBIwzM]
>>356
どうダメなのか具体的に書いてくれないと。
とりあえず sed 's///' はダメ。
区切りに使う文字(ここでは / )はエスケープしないと。

あるいは、違う文字(例えば @)で代用する。
$ echo 'www.example.com/' | sed 's@^@@'
www.example.com/

360 名前:login:Penguin mailto:sage [2009/08/26(水) 19:00:34 ID:z6vBIwzM]
また重複してしまった。吊ってくる。
λ..



361 名前:login:Penguin mailto:sage [2009/08/26(水) 19:01:21 ID:whFI2cwY]
>>357-358
ありがとうございます.うまくいきました.$OUTはミスです.ありがとうございました.

362 名前:login:Penguin mailto:sage [2009/08/26(水) 19:03:00 ID:whFI2cwY]
>>359
ありがとうございます.区切り文字を変えてうまくいきました.

363 名前:login:Penguin mailto:sage [2009/08/26(水) 19:03:13 ID:CSCAGJKR]
やったね!

364 名前:login:Penguin mailto:sage [2009/08/26(水) 22:21:29 ID:AG79amBH]
UTF-8 BOM が付いててもshスクリプトが動くシェルってある?

365 名前:login:Penguin mailto:sage [2009/08/26(水) 22:34:36 ID:aJjlwaDy]
スレ違い。

366 名前:login:Penguin mailto:sage [2009/08/26(水) 23:27:14 ID:LXSFF2c5]
>>364
別にスレ違いじゃないんじゃね?

カーネルで、ファイルの先頭2バイトが'#!'の場合をスクリプトと
しているのでBOMついてたら実行できない。

sourceしたときって意味なら…試したこと無いからわからん。

367 名前:login:Penguin mailto:sage [2009/08/27(木) 00:13:17 ID:99inMd3q]
>>365
分からないことは全部スレ違いーw

368 名前:login:Penguin mailto:sage [2009/08/27(木) 00:14:49 ID:99inMd3q]
>>366
シェルスクリプトってexecvできるってことか。てっきりsystemで動かしてると思ってた。

369 名前:login:Penguin [2009/08/27(木) 13:09:03 ID:1TOKv6MA]
ファイルを読み込んで最後の5行だけ表示したいんだけど
最後の5行ってのをどうすれば計算できますか?
とりあえず
#!/bin/bash
while read LINE; do
echo $LINE
done < "test.file"
ってので行けると思うんですが、行数カウントとかどうすればいいでしょうか?

370 名前:login:Penguin mailto:sage [2009/08/27(木) 13:27:38 ID:bqfxDAXQ]
tail



371 名前:login:Penguin [2009/08/27(木) 15:06:58 ID:g/ERTIS/]
>>369
一番簡単なのは、tailコマンドに丸投げすること。

初心者だが、シェルスクリプトで書いてみた。
queueを使おうと考えたが、配列の添え字が循環するデータ構造にしてみた。
うまく動きましたよ。

372 名前:369 [2009/08/27(木) 15:59:46 ID:1TOKv6MA]
#!/bin/bash
dat=`tail -n 5 $logdat`
SAVE_IFS=$IFS
IFS='
'
CNT=0
for BUF in $(cat $logdat)
do
CNT=$(expr $CNT + 1)
done
IFS=$SAVE_IFS

こうしてみたら
cat : **************************** : そのようなファイルやディレクトリはありません
とか出るんだけど何故ここで「cat」とか「そのような〜」とか出るのかわからん。
書き方間違ってますか?

373 名前:login:Penguin mailto:sage [2009/08/27(木) 16:07:37 ID:GGkjBXca]
よく見てみろ。7行目にcatがあるぞ

374 名前:372 [2009/08/27(木) 17:02:32 ID:1TOKv6MA]
うげっ!
めちゃめちゃ初歩的ミスやらかしてる

修正してうまく動くようになったです。
恥ずかし・・・

375 名前:364 mailto:sage [2009/08/29(土) 04:48:03 ID:oAtS9pnj]
レス遅れましたが、ありがとうございます>>366
bash等ではなくてカーネルに依るとは分かりませんでした。
winだとBOM付ける方がスタンダードっぽい
のでどうにかなるか、考えたもので。

376 名前:login:Penguin mailto:sage [2009/08/29(土) 09:39:58 ID:l0gsahaz]
>>375
>winだとBOM付ける方がスタンダードっぽい

SJISだろSJIS。

377 名前:login:Penguin mailto:sage [2009/08/29(土) 10:52:08 ID:VmNW8gRO]
www.youtube.com/watch?v=bYcF_xX2DE8
これは新しい

378 名前:login:Penguin mailto:sage [2009/08/29(土) 10:56:18 ID:l0gsahaz]
while [ 1 == 1 ]

がキモイ。trueでええやん。

379 名前:login:Penguin mailto:sage [2009/08/29(土) 10:59:15 ID:Tfl9hfvi]
while :

380 名前:login:Penguin mailto:sage [2009/09/10(木) 22:53:09 ID:io9H5fc4]
grepは検索に一件もひっかからなかったら、何も返してきませんよね
if [grep ほげほげ !=  ""]
とnullと比較したいのですが、実行すると文句を言ってきます
grep -c ほげほげ = 0とすることもできますが、勉強のために書いているので
それはさけたいです
初歩的な事ですいません、ぜひエロい方に教えてもらいたい



381 名前:login:Penguin [2009/09/10(木) 23:27:42 ID:kkfd/kxq]
>>380
くだ質の人?マルチポスト乙。
とりあえず、もっと基本的な事を勉強した方がいいと思うよ。

grep .......
if [ $? ]; then
  echo "マッチ成功"
else
  echo "マッチ失敗"
fi

382 名前:login:Penguin [2009/09/10(木) 23:35:17 ID:kkfd/kxq]
>>380
あー、すまなかった。

>実行すると文句を言ってきます

どう文句言われるのかを書かないとね。
たぶん、[grep ほげほげ !=  ""] を [ grep ほげほげ !=  "" ] にすればうまく動くと思う。

'[' と ']' との間にはスペースを入れることに注意。
実は [ ] はコマンドだから、スペースを入れないと式が引数として扱われない。

こう説明すれば理解できるだろうか。
以下の(1), (2)は等価である。

(1) if test -f /etc/passwd; then 文; fi
(2) if [ -f /etc/passwd ]; then 文; fi






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

前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