09/08/09 23:20:52 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
09/08/10 00:04:28 CdStD5IJ
>>227
sidを知らんのか。
239:login:Penguin
09/08/10 01:28:19 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
09/08/10 01:50:52 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
09/08/10 02:00:08 qfqY90wM
>>240
ありがとうございます! 処理が覿面に早くなりました!
いちいち書き出さないで最後に一括して書けばよかったんですね…
242:login:Penguin
09/08/10 02:10:30 vmT7yJCz
>>241
たぶんexprの呼び出しのほうがコストが高いよ
243:login:Penguin
09/08/10 12:26:13 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
09/08/10 15:31:57 oeYkUDqx
数字の判定は[0-9]と正規表現使って判定してるんですが
IPアドレスかどうかの判定が出来るような正規表現ってあるんでしょうか。
無い脳みそひねってもいい案が出なかったのであれば教えてください。
245:login:Penguin
09/08/10 15:41:18 86RyWVEw
>>244
ググレばサンプルたくさんあるよ。
246:login:Penguin
09/08/10 15:59:59 BhLss4cE
お前ならどうするかを教えてやりゃーいいじゃん。
247:login:Penguin
09/08/10 16:10:10 sXOG+s90
PowerShell神すぎだろ。
このスレ見てると原始人が石斧振り回してるように見えてくるぜ。
248:login:Penguin
09/08/10 17:33:20 6xgY8KY4
僕には端末エミュとシェルの違いもわかってないマヌケが見えます。
249:login:Penguin
09/08/11 00:20:03 GKnhcfe3
>>247
型の概念が邪魔。
コマンドが無駄に長い。
重い。
250:login:Penguin
09/08/11 00:27:50 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
09/08/11 00:35:21 XDXqx0+D
./test.sh a 2 3 4 5 6 7 8 9 10 11 12
としてごらんなさい
252:login:Penguin
09/08/11 01:01:07 4esITO9l
>>251
な、な、な、なんでしかこりは!
はっ!そうか!…
$1,$2...って書いてあるサイトが多いからけっこうな個数使えるのかと思ってました。
ありがとうございました。
253:login:Penguin
09/08/11 01:07:27 e9ttEiKp
echo $1,$2,$3,$4,$5,$6,$7,$8,$9,${10},${11},${12}
254:login:Penguin
09/08/11 02:19:40 4esITO9l
>>253
$(10)は試したのに${10}は試してませんでした…orz
ありがとうございます。
>>251を受けてshiftを使う対処法を知りました。
10個以上の引数を扱いたいという目的においては、shiftと${10}の善し悪しはあるんでしょうか。
255:login:Penguin
09/08/11 02:26:00 MclIhwRq
こーいうトラップがあるからperlに逃げる人が多い
256:login:Penguin
09/08/11 02:52:40 e9ttEiKp
>>254
$ man bash
/位置パラメータ
2 桁以上の数値を含む位置パラメータを展開するときには、ブレース ({}) で
囲まなければなりません。
よって${n}が正解だと思います
257:login:Penguin
09/08/11 05:29:40 4esITO9l
>>255
僕はこのツンデレな感じが好きです。
>>256
やっぱりそうですよねw
正式名称は位置パラメータかー"引数"という呼び方しか認識してませんでした。
258:sage
09/08/11 16:31:12 ggsX9yQb
topコマンドの内容をテキストに書き出したいんですが
top >> /tmp/top.test
とした場合に延々と書き込まれていきます。1度だけtopの内容を取得したいんですが
どのように変更すればよいでしょうか?
259:login:Penguin
09/08/11 16:36:53 zgCywBrU
>>258
man top
260:258
09/08/11 17:33:42 ggsX9yQb
>>259
すいません。
manにありました。
現在topの内容をテキストに書き出して、テキストをsedで切り出して表示してるんですが
コマンドの戻り値を求めたいと思っておりますが
hogera=$(top -i -n1)
cpu=`sed -n '/Cpu(s)/p' "$hogera"`
こうすると「読み込めません: ファイル名が長すぎます」と出ます。
本来ファイル名の指定なのでうまくいかないのはあたりまえなのですが、
ファイルに書き出す事無くスマートに切り出す方法がありましたら教えてください。
261:login:Penguin
09/08/11 17:42:23 zgCywBrU
>>260
いまいちやりたいことがわからんが
cpu=`top -b -n1 | grep '^Cpu'`
か?
262:258
09/08/11 17:54:30 ggsX9yQb
>>261
ありがとうございます。
そうか、grepすればいいだけの事ですね。
どうやら無意味にテンパってしまってるようです。
すいません。最後に1つだけ疑問に思っていることがあるのですが
シリアルコンソールで見る画面は横70文字にしとけって言われたんですが
何かそういった規格かなにかあるんでしょうか。検索してみてもそられしいものが
引っかからなかったんですが、70文字だとなかなか厳しいものがあるので
特に根拠のない文字数であるなら超えても構わないのではないかと思っております。
たびたびの質問で申し訳ありませんが、識者の方でご存じの人いたら教えてください。
263:login:Penguin
09/08/11 17:55:36 zgCywBrU
>>262
スレ違い。
264:258
09/08/11 18:03:42 ggsX9yQb
>>263
解答ありがとうございます。
スレ違いとのことですが、これはどういったスレで質問するのがよろしいのでしょうか。
シェルスクリプトの表示だったのでこちらに投げさせていただいたのですが
どういった方面のスレかだけでも助言いただけないでしょうか。
265:login:Penguin
09/08/11 18:07:41 zgCywBrU
>>264
くだらねえ質問はここに書き込め! Part176
スレリンク(linux板)
266:login:Penguin
09/08/12 00:03:08 0UM4nevW
>>263
きびしー
267:login:Penguin
09/08/12 00:05:03 I1tOnENr
>>264
VGAとかSVGAとか解像度で違うっての聞いたことある。
もしかしたら全然違うかもしれんがそういうときはきっと誰か激しく突っ込んでくれるはず。
268:login:Penguin
09/08/12 00:10:31 u9/Em9/R
>>267
ぜんぜん違う話。
269:login:Penguin
09/08/12 05:02:52 0UM4nevW
$ cat<<<h$(cat<<<e$(cat<<<l$(cat<<<l)o)\!)
270:login:Penguin
09/08/12 14:49:33 /9MBM8gW
特定文字列が含まれてるかどうかの判断って出来ますか?
sedとかで文字の置き換えとか入れ替えが出来る程度のレベルです。
dg=`route | grep '192.168.24.1'`
でdgの中にug含まれているかどうかを確認したいと思ってます。
271:login:Penguin
09/08/12 14:51:54 u9/Em9/R
>>270
route | grep '192.168.24.1' | grep ug
ってこと?
272:login:Penguin
09/08/12 14:59:52 LZ159q8G
>>270
case "${dg}" in
*ug*)
# match
;;
*)
# not match
;;
esac
273:270
09/08/12 15:13:57 /9MBM8gW
>>271
そうでした。パイプでさらにgrepすればよかったですね。
こちらの方法でも出来ました。
ありがとうございます。
>>272
判定までしていただいて助かります。
こちらの方法で出来ました。
ありがとうございます。
まだまだよくわかってないですがここで質問しなくてもすむように勉強したいと思います。
274:login:Penguin
09/08/12 18:46:07 jKHDnL7q
シェルスクリプトでサーバーのチェックをしてます。
それ自体はcronで定期的に行ってますが、これと併せて定期的にデータを送信出
来ればと考えてます。
実際にはチェックして引っかかったサーバーにzipを送り、サーバーは時間が来
れば勝手に実行するという感じですが、シェルスクリプトでzipデータを別サー
バーに送るとかいうことが可能でしょうか。
可能ならどんな関数を使えばよいかアドバイスもらえないでしょうか。
初歩的な質問かと思いますが宜しくお願いいたします。
275:login:Penguin
09/08/12 18:54:50 8iPFdi1w
金玉 → >>274
。゜( ゜^∀^゜)゜。アーッハハハハノヽノヽノヽノ\ / \
276:login:Penguin
09/08/12 21:03:12 0s7n/+F7
>>274
sshの鍵交換してパスワードを聞かれないようにしておいて
scpなりrsyncなりで送れば良いと思う。
277:login:Penguin
09/08/12 23:35:06 tCsvaW+m
>>239
これはどう?
#/bin/bash
FILE=$1
OFILE=/dev/shm/hoge
xargs < $FILE -n10 | tr " " "\t" > $OFILE
278:login:Penguin
09/08/12 23:40:23 tCsvaW+m
>>277 じこれす
まちがった
xargs < $FILE -n10 | tr ' ' \\t > $OFILE
です。
279:login:Penguin
09/08/12 23:56:35 0UM4nevW
すげー
280:login:Penguin
09/08/14 09:45:57 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
09/08/14 09:56:51 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
09/08/14 10:03:19 GRUhI9LP
こういうこと?
seq -f 'MMF%04.f' 0 1000
283:login:Penguin
09/08/14 15:19:52 VHMVUNf7
>>280
すっきり書いてみた。
#! /bin/sh
COUNTER="$1"
DIGIT1=000
DIGIT2=00
DIGIT3=0
DIGIT4=
eval 'echo "MMF${DIGIT'"${#COUNTER}"'}${COUNTER}"'
284:283
09/08/14 15:31:27 VHMVUNf7
printfがあれば更にすっきり。
#! /bin/sh
COUNTER="$1"
printf 'MMF%04d\n' "${COUNTER}"
285:login:Penguin
09/08/14 23:08:31 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
09/08/14 23:17:06 vesWTwzQ
>>285です
もう一つお願いします。
シェルスクリプト というのは、そのような仕組みになってるんでしょうか?
単純にインタプリタ型の言語なのでしょうか、自分としてはそうではない気がします
なぜなら、sudo コマンドを使う場合、シェルスクリプトの場合、スイッチ を付加して実行しますが
それは直接、カーネルに対してオペレーションしているような気がするのですが?詳しい方が居られましたら教えてください。
287:login:Penguin
09/08/14 23:19:32 vesWTwzQ
×シェルスクリプト というのは、そのような仕組みになってるんでしょうか?
○シェルスクリプト というのは、どのような仕組みになってるんでしょうか?
288:login:Penguin
09/08/14 23:40:04 4UQz02FW
>>286
>それは直接、カーネルに対してオペレーションしているような気がするのですが?
気のせいです。
手始めにforkとかexecvとか調べたらいいんじゃね?
289:login:Penguin
09/08/14 23:56:56 cgRLII5a
インタプリタだよ。
sudoは、シェルとは別のプログラムです。
シェルスクリプト中で、シェルのビルトイン関数やらで無いコマンドを書くと、
シェルは、その名前のプログラムを探してそれを実行しようとします。
上に出てきた中で言うと、
while case echo evalはシェルのビルトイン関数(?)で
seq printf sudoは外部プログラムです。
「カーネルに対してオペレーションしている」云々は、
言っている意味が良く分かりません。
全ての意味のあるプログラムは、直接的にしろ間接的にしろ、
カーネルと相互作用するはずですから。
290:login:Penguin
09/08/15 01:56:48 niIslDjl
while, case と echo, eval はくくりが別だけどな。
type while とか type echo とかやってみ。
291:login:Penguin
09/08/15 19:58:45 4JYHgxvW
>>286 です
皆さんThxです。
292:login:Penguin
09/08/15 23:51:22 O3QLwBfx
read packetcount
read port
tcpdump -n -c$packetcount -s1500 -vvv -X port $port
こんな感じでパケット見てるんですが、1パケットごとに色を変えることは出来ますか?
文字色の指定方法はわかるんですが、そういった指定方法や手法があればおしえてもらえないでしょうか。
なければおとなしくあきらめます。
293:login:Penguin
09/08/16 02:00:07 kxH41sn/
>>292
色は無理。
portが読み込まれていない。
294:login:Penguin
09/08/16 02:32:16 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
09/08/17 09:43:35 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
09/08/17 11:19:54 Pf83pCV6
>>295
コピペ間違ってないかな?
「serial8250: too much work for irq4」なら
次のページが引っかかった。
URLリンク(eve-japan.co.jp)
ターミナルソフトによって異なるのは$TERM の問題なのかな?
表示自体は 単に stderr へのメッセージが表示されてるのか
とおもうけど。「2>/dev/null」とかつけたら 変わるのかな
297:295
09/08/17 11:55:51 WnQqR0f7
>>296
文字コードとかの問題でsが抜けてるっぽいです。
ログを見たら同じ記述があったのでメッセージが画面に出てるっぽいですね。
方法としては破棄する(やり方調べないといけないけど)かserial8250: too much work for irq4をsedとかで
消し去るくらいでしょうか。
スマートではないですがとりあえず消し去る方向で行ってみます。
ありがとうございます。
298:login:Penguin
09/08/17 12:12:38 cm75eODq
シリアルコンソールだよね?
カーネルがprintkで出してるからsedとかじゃムリだと思う。
消したいなら/proc/sys/kernel/printkをいじるとか。
299:297
09/08/17 12:52:29 WnQqR0f7
>>298
ありがとうございます。
調べて6417を5417に替えようとしたら"printk" E667: Fsync failedとか出てきて
書き換えさせてくれませんでした。
解決方法はまだわかってませんがなかなかハードルが高そうです。
300:297
09/08/17 13:10:38 WnQqR0f7
補足です。
echo -e "|""`top -i -n1 | grep '^Cpu(s)'`""|";
の部分を消したら表示されなくなりました。
topした時だけ出てるみたいです。理由はわかりませんが。
top内容を >> top.datとかに書き出してそこから引っ張ってくれば
表示されないようになるかもしれません。
根本的な解決にはなってませんが・・・。
301:300
09/08/17 17:13:08 WnQqR0f7
さすがにスレ違かと思いますが、/proc/sys/kernel/printkというのはviでの編集は不可ですか?
ググってはいるんですが編集が出来ずに困っております。
もしかしたら凄い見当違いな事を行っているのかもしれませんが解決のヒントもらえると助かります。
302:login:Penguin
09/08/17 17:20:05 R0skv6Jz
>>301
さすがにスレ違い。
303:300
09/08/17 17:30:37 WnQqR0f7
>>302
すいません。
くだ質に行ってみます。
304:login:Penguin
09/08/18 06:39:39 elYCry/8
>>301
echoするもんでしょ。JK。
305:login:Penguin
09/08/18 08:01:40 8XgVhYMF
そうか?
sysctl -w kernel/printk=foobar
306:login:Penguin
09/08/18 09:35:31 BInCpQzK
もうくだ質に移動したよ。
307:login:Penguin
09/08/18 18:39:48 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
09/08/18 19:03:56 9vBuj+t/
sed 's/jama na moji//g' moge.dat
じゃいかんのか?
なぜechoしたりmoreしたりgrepしたりするのか意味わからん
309:login:Penguin
09/08/18 19:12:00 I/MV7qz2
sed の -i はなぜつけているんだい?
310:307
09/08/18 19:31:44 S4j+NJGU
>>308
単純にmoreで見た中身をgrepしてそこからさらに削ればいいのかなと思い
検索をしてパイプでつなげただけの状態です。
また説明が足りませんでしたがmoge.datは複数行あってtestから始まる行が
いくつかあったことから素人考えでこのようになりました。
>>309
すいません。
別の場所のsedをコピーしたときについたみたいです。
この場合は必要ないですね。
311:login:Penguin
09/08/18 19:37:15 9vBuj+t/
sed '/^test/s|jama na moji||g' moge.dat
312:login:Penguin
09/08/18 19:43:42 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
09/08/18 22:00:14 elYCry/8
>>306
マルチって死ねばいいと思う
314:login:Penguin
09/08/18 22:23:21 Df7zfcy/
スレ違いを指摘されて移動してるんだから、マルチとは言わないだろ
315:login:Penguin
09/08/19 11:19:58 zpPUbNQu
ログをとりたくてmessagesに内容を出すようにしたいのですが
echo "logtest" >> /var/log/messages
としても書き出されません。
このファイルとユーザー自体はrootではないので権限が問題かと思ってます。
このexampleユーザーはwheelに入れており、sudoで%wheel ALL=(ALL) ALLと念のため指定しましたがダメでした。
これは構文自体が間違っているということでしょうか。
316:login:Penguin
09/08/19 11:38:22 GJ3CGMhT
>>315
sudo echo "logtest" >> /var/log/messages
とかやったの?
これだと >> 以下は sudo の外にあるから効かない。
sudo sh -c 'echo "logtest" >> /var/log/messages'
とかやればいい。
つーか logger で書いたら。
317:login:Penguin
09/08/19 15:03:44 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
09/08/19 15:07:02 zpPUbNQu
>>316
素早いレスありがとうございます。
1個の命令として見られていなかったわけですね。
loggerでかけるところはそうしたいのですが、他にもいくつかファイルがあって
そちらでも追記したいと思っておりました。
まだ試してませんがこれでいってみたいと思います。
319:login:Penguin
09/08/19 15:08:58 yGi4QWIv
topの人はtopの何を切り出したいのだ?
ロードアベレージ?
320:login:Penguin
09/08/19 15:09:49 GJ3CGMhT
>>317
top なら -b で。
>>261 でも書いたはずだが。
321:login:Penguin
09/08/19 15:16:10 GJ3CGMhT
>>317
ファイルへの出力は
基本的にはただの文字を順に追記していくだけ。
画面への出力は文字を反転させたり色を変えたり
いったん書いたものを戻って書き直したりする。
画面用の出力をそのままファイルに出すとおかしなことになる。
322:login:Penguin
09/08/19 21:31:13 rKA7cUBO
echo "logtest" | sudo tee -a /var/log/messages
teeってマイナー?
323:login:Penguin
09/08/19 22:00:23 ZZH7H5sc
いやんバカんな事やってないで、きちんとloggerを使いなさい。
324:login:Penguin
09/08/19 22:31:33 S8kRS54+
シェルにloggerなんてあるの?
325:login:Penguin
09/08/19 23:54:53 Gto2VsIQ
------------------------- 今からこのスレは外部コマンド禁止になりました -------------------------
326:login:Penguin
09/08/20 00:22:53 z7LXRLpP
シェルの組み込みコマンドだけでやれってか?
厳しいな。。
327:login:Penguin
09/08/20 10:46:36 D2EfC5ES
>>324
それ言ったら sudo だってないじゃん。
328:login:Penguin
09/08/20 11:47:57 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
09/08/20 12:00:54 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
09/08/20 19:05:04 KNtykgpF
まずエスケープシーケンスを直接指定するのはよくない
端末によってサポートされている機能に違いもあるし
「文字ではない部分」の意味も不明
行単位ということなら
#!/bin/sh
tput setab 0
tput setaf 2
tput el
echo "Hello"
331:login:Penguin
09/08/21 00:19:49 F/0U9rwq
文字ではない部分ってのはその通りだろう。
文字の背景の色を指定は出来るが、文字以外のところの背景色はどうすってことじゃね?
\033[32;40mはせめて
ESC=\033[
midori=${ESC}32
とかにしたほうがいいと思う。もっといい方法あればえらい人が教えてくれるはず。
332:login:Penguin
09/08/21 00:26:48 korZcQ4D
>>331
tput使えよ。
333:login:Penguin
09/08/21 00:34:42 G/rWMdtH
すみませんが組み込みコマンドだけでお願いします
334:login:Penguin
09/08/21 00:41:38 korZcQ4D
>>333
busyboxにshとtputが入ってる場合はOK?
335:login:Penguin
09/08/21 00:53:50 hq/n18x3
>>331
> 文字の背景の色を指定は出来るが、文字以外のところの背景色はどうすってことじゃね?
だから, 画面全体をそうしたければclearすればいいんじゃね
文字を書き込んでいない*どの部分を*背景色にしたいんだ, って話
336:331
09/08/21 07:39:21 F/0U9rwq
tputなんてあるわけね。
シェルに標準でそういうのあるの知らなかったよ。
>>335
文字がかかれてない場所全部じゃね?
ようは画面全体の背景色を指定したいってことだと思うけど。
文字と文字の背景色は\033[32;40mで指定できるけど
それ以外の全体の背景色という意味だと思う。
337:login:Penguin
09/08/21 07:45:26 korZcQ4D
>>336
とある端末だとそうですね。
338:login:Penguin
09/08/21 11:30:52 90eN5uxA
そういうの意識するほどたくさんの機器がないからだとおもうけど
俺はVT100でだいたい表示されてればOKかな~とか勝手に思ってる。
ネットワーク機器だとやっぱりまだANSIとかが標準になってたりするのかな?
さすがに最近のネットワーク機器でVT52が標準とかってことはないと信じたいけど。
339:login:Penguin
09/08/21 17:12:14 hq/n18x3
>>336
> ようは画面全体の背景色を指定したいってことだと思うけど。
>>335
行単位なら >>330
カーソル位置からscreenの最後までならelの代わりにed使えばいい
340:login:Penguin
09/08/21 23:42:11 korZcQ4D
所謂、ブルースクリーンを作りたい。
341:login:Penguin
09/08/22 19:41:23 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
09/08/22 19:49:19 +xcsiCNS
まず服を脱ぎます
343:341
09/08/22 20:44:33 iygx6FPk
while read line
do
処理(TARGET=あいうえお、DEST=aiueo)
done < word.lst
例えばこのように、line で読込んだ
あいうえお aiueo
を変数TARGET、 DEST に格納する方法を教えてもらえませんでしょうか。
344:login:Penguin
09/08/22 21:14:08 +xcsiCNS
set $line
TARGET=$1 DEST=$2
345:login:Penguin
09/08/22 21:44:23 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
09/08/22 23:46:26 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
09/08/23 00:31:10 aCd7CupH
>>346 です
解決しました、文字コードを錯誤してました(^^;
348:login:Penguin
09/08/26 02:39:26 5uGOu/R4
1000文字ごとに改行を入れる簡単な方法を教えてもらえませんか
349:login:Penguin
09/08/26 04:35:48 aiWYMJf6
これ、俺は思いつかない、ラテン文字だけなのか、マルチバイト文字も混在してるのか
こういうのは、やっぱ、perlやrubyが得意だ
350:login:Penguin
09/08/26 04:41:51 r5TfqoXR
nkf -f 1000
351:login:Penguin
09/08/26 14:07:13 ehP4IQnp
abcdefgabcdefgabc ...
と続く文字列にn文字ごとに「,」を入れてcsvにするにはどうしたらいいですか?
352:login:Penguin
09/08/26 14:24:34 LXSFF2c5
echo abcdefghijklmnabcdefghijklmnh | sed 's/\(.\{5\}\)/\1,/g'
353:login:Penguin
09/08/26 14:28:23 z6vBIwzM
echo 'abcdefgabcdefgabc' | sed 's/\(.\{変数n\}\)/\1,/g'
354:login:Penguin
09/08/26 14:29:09 z6vBIwzM
重複スマソ
355:login:Penguin
09/08/26 15:46:39 ehP4IQnp
>>352 >>353
thanx!!
356:login:Penguin
09/08/26 18:44:54 whFI2cwY
list.txtのなかにURLが一行ずつあり,
そのURLをw3mでアクセスしてその結果を
URLからhttp://を除いたファイル名で保存したいのですが
#!/bin/sh
FILE=list.txt
while read LINE
do
$OUT=`echo $LINE |sed 's/URLリンク()'`
w3m -dump $LINE > $OUT
done < $FILE
これだとダメになってしまいます.とりあえずlist.txtにはURLリンク(google.net)を入れています.
357:login:Penguin
09/08/26 18:54:19 LXSFF2c5
s#URLリンク(##)
とか区切り文字を変える。
$OUT=
の$は不要。
358:login:Penguin
09/08/26 18:54:58 CSCAGJKR
とりあえず$OUTはOUTのtypoだよな
あとはsedのマニュアルでも読んどけ
359:login:Penguin
09/08/26 18:59:39 z6vBIwzM
>>356
どうダメなのか具体的に書いてくれないと。
とりあえず sed 's/URLリンク()' はダメ。
区切りに使う文字(ここでは / )はエスケープしないと。
あるいは、違う文字(例えば @)で代用する。
$ echo 'URLリンク(www.example.com)' | sed 's@^URLリンク(@@)'
www.example.com/
360:login:Penguin
09/08/26 19:00:34 z6vBIwzM
また重複してしまった。吊ってくる。
λ..
361:login:Penguin
09/08/26 19:01:21 whFI2cwY
>>357-358
ありがとうございます.うまくいきました.$OUTはミスです.ありがとうございました.
362:login:Penguin
09/08/26 19:03:00 whFI2cwY
>>359
ありがとうございます.区切り文字を変えてうまくいきました.
363:login:Penguin
09/08/26 19:03:13 CSCAGJKR
やったね!
364:login:Penguin
09/08/26 22:21:29 AG79amBH
UTF-8 BOM が付いててもshスクリプトが動くシェルってある?
365:login:Penguin
09/08/26 22:34:36 aJjlwaDy
スレ違い。
366:login:Penguin
09/08/26 23:27:14 LXSFF2c5
>>364
別にスレ違いじゃないんじゃね?
カーネルで、ファイルの先頭2バイトが'#!'の場合をスクリプトと
しているのでBOMついてたら実行できない。
sourceしたときって意味なら…試したこと無いからわからん。
367:login:Penguin
09/08/27 00:13:17 99inMd3q
>>365
分からないことは全部スレ違いーw
368:login:Penguin
09/08/27 00:14:49 99inMd3q
>>366
シェルスクリプトってexecvできるってことか。てっきりsystemで動かしてると思ってた。
369:login:Penguin
09/08/27 13:09:03 1TOKv6MA
ファイルを読み込んで最後の5行だけ表示したいんだけど
最後の5行ってのをどうすれば計算できますか?
とりあえず
#!/bin/bash
while read LINE; do
echo $LINE
done < "test.file"
ってので行けると思うんですが、行数カウントとかどうすればいいでしょうか?
370:login:Penguin
09/08/27 13:27:38 bqfxDAXQ
tail
371:login:Penguin
09/08/27 15:06:58 g/ERTIS/
>>369
一番簡単なのは、tailコマンドに丸投げすること。
初心者だが、シェルスクリプトで書いてみた。
queueを使おうと考えたが、配列の添え字が循環するデータ構造にしてみた。
うまく動きましたよ。
372:369
09/08/27 15:59:46 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
09/08/27 16:07:37 GGkjBXca
よく見てみろ。7行目にcatがあるぞ
374:372
09/08/27 17:02:32 1TOKv6MA
うげっ!
めちゃめちゃ初歩的ミスやらかしてる
修正してうまく動くようになったです。
恥ずかし・・・
375:364
09/08/29 04:48:03 oAtS9pnj
レス遅れましたが、ありがとうございます>>366
bash等ではなくてカーネルに依るとは分かりませんでした。
winだとBOM付ける方がスタンダードっぽい
のでどうにかなるか、考えたもので。
376:login:Penguin
09/08/29 09:39:58 l0gsahaz
>>375
>winだとBOM付ける方がスタンダードっぽい
SJISだろSJIS。
377:login:Penguin
09/08/29 10:52:08 VmNW8gRO
URLリンク(www.youtube.com)
これは新しい
378:login:Penguin
09/08/29 10:56:18 l0gsahaz
while [ 1 == 1 ]
がキモイ。trueでええやん。
379:login:Penguin
09/08/29 10:59:15 Tfl9hfvi
while :
380:login:Penguin
09/09/10 22:53:09 io9H5fc4
grepは検索に一件もひっかからなかったら、何も返してきませんよね
if [grep ほげほげ != ""]
とnullと比較したいのですが、実行すると文句を言ってきます
grep -c ほげほげ = 0とすることもできますが、勉強のために書いているので
それはさけたいです
初歩的な事ですいません、ぜひエロい方に教えてもらいたい
381:login:Penguin
09/09/10 23:27:42 kkfd/kxq
>>380
くだ質の人?マルチポスト乙。
とりあえず、もっと基本的な事を勉強した方がいいと思うよ。
grep .......
if [ $? ]; then
echo "マッチ成功"
else
echo "マッチ失敗"
fi
382:login:Penguin
09/09/10 23:35:17 kkfd/kxq
>>380
あー、すまなかった。
>実行すると文句を言ってきます
どう文句言われるのかを書かないとね。
たぶん、[grep ほげほげ != ""] を [ grep ほげほげ != "" ] にすればうまく動くと思う。
'[' と ']' との間にはスペースを入れることに注意。
実は [ ] はコマンドだから、スペースを入れないと式が引数として扱われない。
こう説明すれば理解できるだろうか。
以下の(1), (2)は等価である。
(1) if test -f /etc/passwd; then 文; fi
(2) if [ -f /etc/passwd ]; then 文; fi
383:login:Penguin
09/09/10 23:41:36 kkfd/kxq
コマンドじゃねーや。間違い。
ところで全角スペースがあるのが気になるのだが、そこは大丈夫なのか?
384:login:Penguin
09/09/11 00:14:43 r5Zq4SIa
>>382
> 実は [ ] はコマンドだから、
[ がコマンド。(bash の内部コマンド)
> こう説明すれば理解できるだろうか。
かえって混乱するんじゃね。
385:login:Penguin
09/09/11 00:53:31 tUDxxMlL
[ は内部コマンドではない
386:login:Penguin
09/09/11 00:55:26 sW2bvbaU
>>385
help [
387:login:Penguin
09/09/11 01:18:00 1ovlFoMD
cshです。
a.cshの実行中にb.cshを実行したいです。
で、a.cshで宣言した変数をb.cshでも引き継ぎたいのです。
さらに、b.cshに引数を渡して実行したいのです。
a.cshの実行中に
csh b.csh だと引数をつけて実行できますが、変数が引き継がれないようです。
source b.cshだと変数は引き継がれますが、引数をつけて実行できません。
どうしたらいいのん。
388:login:Penguin
09/09/11 05:26:58 bKplMqH/
/usr/bin/[の方も、昔は/usr/bin/testへのハードリンクだったが
今は違うんだな。やっぱり日々勉強しないと…
389:login:Penguin
09/09/11 07:46:22 r5Zq4SIa
>>385
type [
390:login:Penguin
09/09/11 08:15:42 9DDccZ59
>>387
>source b.cshだと変数は引き継がれますが、引数をつけて実行できません。
引数をつけて実行できるんじゃない?
::::::::::::::
a.csh
::::::::::::::
#!/bin/csh -f
set val="hello"
echo "a.csh:$* $val"
source b.csh 1 2 3
echo "a.csh:$* $val"
::::::::::::::
b.csh
::::::::::::::
#!/bin/csh -f
echo "b.csh:$* $val"
% ./a.csh
a.csh: hello
b.csh:1 2 3 hello
a.csh: hello
391:login:Penguin
09/09/14 22:11:59 VDeHYP1G
#!/bin/bash
trap "logoutfunc_ctrl; logout" 1 2 3 15
最初の2行にこう記述してるんですが、logoutせずにプロンプト画面に戻る方法がありますか?
bashにこのシェルを書いているのでログイン後は必ずこのシェルが立ち上がるようになってます。
このシェルを実行するのは特定のユーザーのみで、他にこのシェルがあるサーバーにログインは出来ません。
(他のユーザーはrootを除いて全てログイン出来ないようにしてます)
プロンプト画面には触らせないようにしたいのですが、これでプロンプトに抜けれるという人がいるので
どういった方法があるのか教えていただけないでしょうか。
392:login:Penguin
09/09/14 22:59:21 SeJGwizk
なんかよくわからんけど
ログインシェルを変えちゃったら。
393:login:Penguin
09/09/14 23:18:36 DAW4cbiO
trapでlogoutしてるのにそんなこと出来るの?
おれも悪さされないようにtrapでlogoutしてるからもしそういう抜け道あるなら対策したいな。
394:login:Penguin
09/09/15 23:31:19 XlHfxREn
>>391
Ctrl+Z?
395:login:Penguin
09/09/16 01:29:49 N6PYBStw
SIGTSTPもそうだけど、普通にbash起動できたりしないの?
396:login:Penguin
09/09/17 16:40:19 y7kbSG6/
現在、/ 配下に次のディレクトリがある(CentOS 5.3)。
bin boot dev etc home lib lost+found media miscmnt net opt proc root sbin selinux srv sys tmp usr var
で、例えばの話なんだけど、/var以下と/etc以下のファイルで72時間以内に更新されたファイルだけを検索するために、
/var以下と/etc以下だけを検索するんじゃなくて、/varと/etcの両ディレクトリ以外を検索対象から除外した上で
/ を検索する、という手法をとる場合、次のようなワンライナーが考えられる(改行してるけど実際は一行)。
find / \( -path '/bin/*' -o -path '/boot/*' -o -path '/dev/*' -o -path '/home/*' -o -path '/lib/*'
-o -path '/lost+found/*' -o -path '/media/*' -o -path '/misc/*' -o -path '/mnt/*' -o -path '/net/*'
-o -path '/opt/*' -o -path '/proc/*' -o -path '/root/*' -o -path '/sbin/*' -o -path '/selinux/*'
-o -path '/srv/*' -o -path '/sys/*' -o -path '/tmp/*' -o -path '/usr/*' \) -prune -o
-type f -mtime -3 -print
で、これを
find / $OPT -type f -mtime -3 -print
と書くために、
OPT=\( -path '/bin/*' -o -path '/boot/*' -o -path '/dev/*' -o -path '/home/*' -o -path '/lib/*'
-o -path '/lost+found/*' -o -path '/media/*' -o -path '/misc/*' -o -path '/mnt/*' -o -path '/net/*'
-o -path '/opt/*' -o -path '/proc/*' -o -path '/root/*' -o -path '/sbin/*' -o -path '/selinux/*'
-o -path '/srv/*' -o -path '/sys/*' -o -path '/tmp/*' -o -path '/usr/*' \) -prune -o
とシェル変数を定義する(改行してるけど実際は一行)。で、次を実行するとエラーとなる。
# find / $OPT -type f -mtime -3 -print
find: パスは評価式の前におかなければならない
Usage: find [-H] [-L] [-P] [path...] [expression]
これ、エラーになる原因と対策方法分かる人いたら誰か教えて。
397:login:Penguin
09/09/17 16:45:22 HEpWOKWA
ここでも読んどけ
業務でラクするためのUNIXテクニック集
URLリンク(codezine.jp)
398:login:Penguin
09/09/17 16:53:55 zpBnmmE6
>>396
とりあえずecho $OPTして良く考える。
でも目的からいって find /etc /var ... でいいと思うんだがなんでそんなめんどくさいことするの?
399:login:Penguin
09/09/17 16:57:51 ih+TQz/f
次のようなワンライナーが考えられる、って書いてあるし
宿題じゃないの
400:login:Penguin
09/09/21 16:40:00 nYMA5TsQ
>>396の方法の是非は置いといて、
一気に難しい事やろうとしてダメな場合にそのままデバッグしようとする姿勢からして間違ってるのね
最も確実にできる単純な所からOKなのを確認しつつ、少しずつ複雑化していけばいいのにね
単純化もせずにここにポストしちゃうのもダメなのね
401:login:Penguin
09/09/22 01:02:32 CsobNaX3
>>396
> エラーになる原因
> OPT=略 -prune -o
-prune と -o は、OPT= って式の右辺とは認識されていない。
402:login:Penguin
09/09/22 21:32:32 tUDMNFi9
WinでSJISだろSJISって言った人は誰ですか
無知はレスしなくていいと思うぞ
403:login:Penguin
09/09/24 23:42:28 SAfgo/2/
shでプロセス置換をすることはできますか?
404:login:Penguin
09/09/25 07:39:03 DPMjFFBq
exec ?
405:login:Penguin
09/09/25 08:28:22 Kq0dBVoG
bashの<(hoge)のようなやつです
406:login:Penguin
09/09/25 09:10:47 fabAV8W5
普通のshにはないんじゃないかな。実はshという名前でも実体はbashという
こともよくあるが。ないときはmkfifo使えばなんとかなりそう。
407:login:Penguin
09/09/25 09:28:37 Kq0dBVoG
>>406
mkfifoを使ってみます。
ありがとうございます。
408:login:Penguin
09/09/25 09:49:07 7/BCzuXv
>>403
sh って、どの sh?
409:login:Penguin
09/09/25 19:55:47 Kq0dBVoG
>>408
shって何種類もあるんですか?
410:login:Penguin
09/09/26 16:08:50 Jy0DLp0d
>>409
約2000種類くらいある。
411:login:Penguin
09/09/26 16:27:53 XBVVzvrd
一行目の
#!/bin/sh
みたいな表記ってなんていうんだけ?
412:login:Penguin
09/09/26 16:29:13 Jy0DLp0d
>>411
マジックナンバー
413:login:Penguin
09/09/26 16:58:06 v336ZdvP
ホラ吹きはやめなはれ
414:login:Penguin
09/09/26 17:36:19 pX1JKn/Q
shebang
415:login:Penguin
09/09/27 18:09:06 251MLAqQ
あるフォルダの中のフォルダのうち中身が空のフォルダをまとめて削除するにはどうすればいいですかね?
416:login:Penguin
09/09/27 18:14:24 Co+mxy4N
find あるフォルダ -type d -empty かな
417:login:Penguin
09/09/27 18:17:18 bShqvf/m
find . -type d -exec rmdir --ignore-fail-on-nonemytp -p {} \;
418:login:Penguin
09/09/27 18:36:06 251MLAqQ
>>417
rmdir: failed to remove `.': 無効な引数です
とのことでした。。
>>416
rm -r `find . -type d -empty`としたら期待通りの動作をしてくれました!
有難うございました。
419:login:Penguin
09/09/27 18:44:30 ZlHSYQ4N
何も言うまい
420:login:Penguin
09/09/27 21:31:53 qHK4F1Gh
ストリームから特定のバイト数分だけ読み出すことは出来ますか?
例えば標準入力の先頭1024バイトだけ読みたいのですが、readやらheadでは
できないみたいでつ。
外部の処理系に投げるしかないのでしょうか。
421:login:Penguin
09/09/27 21:33:25 qHK4F1Gh
すみません
head -c 1024
で事故解決しました。
422:login:Penguin
09/09/28 12:47:00 VZAZLgKn
Bash で並列処理はできますか?
バックグラウンドでプロセスを実行する方法が考えられますが
標準出力を変数に代入できません。
スレッドみたいなものがあればいいのですが。
アドバイスよろしくです。
423:login:Penguin
09/09/28 13:23:09 RgE5Se+Y
>>422
凝ったことやりたいならちゃんとした言語使った方がいいんじゃないの。
424:login:Penguin
09/09/28 14:19:04 I6g/kNjx
>>422
標準出力の代わりにファイルを利用するだけでいいと思うけれど
何か制限とかあるの?
425:login:Penguin
09/09/28 22:19:09 mq5nI+Gq
>>422
waitとかって使えなかったっけ?
426:422です
09/09/28 22:48:49 ZC7KG7rU
>>424
それも考えたのですが、ちょっとアレゲな文字列を渡したいので
なるべく標準入力経由で流し込めたらいいなーと。
>>425
waitするのはいいのですが、
s=`sleep 10; echo hi` &
これだと、確かにバックグラウンドで実行されますが、出力が変数sに代入されません。
とりあえずtmpfile作ってお茶を濁すか、
スレッドをサポートしている他の言語で書いてみます
ありがとうございました。
427:login:Penguin
09/09/29 09:01:16 PNFzix6B
アレゲな文字列だとなぜ標準入力にしたいのだろう??
428:login:Penguin
09/09/29 22:03:38 to/uYF9s
fifoが使えれば便利なんだけどな。
429:login:Penguin
09/10/23 00:04:27 wj32ZQ75
bash@sygwinです。
echo -e `hoge.exe`
みたいなスクリプトを書いて実行した場合、
hoge.exeの出力(標準出力へ出力)が改行されないのですが、
開業して表示されるようにするにはどうしたらいいですか?
430:login:Penguin
09/10/23 00:06:21 fL6bmEfB
hoge.exe
431:429
09/10/23 00:07:47 wj32ZQ75
サンプルとして hoge.exeとしましたが、
実際は引数をとるプログラムであり、そのためにスクリプトを書いています。
432:login:Penguin
09/10/23 00:08:01 egc7pXKl
printfでおk
433:EriFWUWPcvxE
09/10/23 00:26:28 o9S12OWs
In the case of a clock it is, of course, infinitely unlikely. ,
434:login:Penguin
09/10/23 01:18:00 lIwBP5a7
>>429
| と nkf か iconv かなんか使って
改行コードを変換すればいいかと。
435:login:Penguin
09/10/23 07:31:49 sqWecNL1
要するに、
$ echo `ls`
で改行されないと言ってるんじゃないの?
素直に
$ ls
と打てカス じゃ駄目か。
436:login:Penguin
09/10/23 07:52:35 fL6bmEfB
>>435
>>431を読むに、ダメなんだろう。
437:login:Penguin
09/10/23 10:22:31 iTZCWKBJ
echo "`ls`"
438:veylKBAi
09/10/23 22:03:01 t9W+SBEv
And you get to travel to interesting places and talk to interesting people about interesting questions. ,
439:login:Penguin
09/10/23 22:40:25 fL6bmEfB
Yes I like rice ball.
440:login:Penguin
09/10/25 05:44:06 nuWGLSpK
This is a Tom
441:login:Penguin
09/11/04 22:54:27 MYi0pRqJ
Bash シェルスクリプトで、
実行後にコマンドラインに文字列を入力した状態にするのは
可能ですか?
$ ./x.sh
$ abc ←'abc' が入った状態にする
シェルスクリプトでなくて、C とかでもよいですが。
442:login:Penguin
09/11/05 10:53:31 yUF/IyOA
>実行後にコマンドラインに文字列を入力した状態にするのは
set ?
>$ ./x.sh
>$ abc ←'abc' が入った状態にする
read ?
443:441
09/11/05 19:29:56 gkVZzLQn
x.sh が終了した後に、
コマンドラインにキーボードで 'abc' と入力した状態になっている
という意味あいです。
444:login:Penguin
09/11/05 19:59:20 NZnr/6iR
それ、もしできるのなら
セキュリティ的にマズーくないか?
445:login:Penguin
09/11/06 00:09:34 eRT3M+Ha
>>443
なんでそんなことしたいの?
446:login:Penguin
09/11/06 08:33:57 mW6ePEE5
小数点第三位くらいの数値を1000で割りたいのですが、bcで計算すると0.123456が.123456にされてしまって正しくrrdtoolに値を渡せなくて困っています。
どなたか対策をご存知の方がいらっしゃいましたらご教授頂けないでしょうか。
447:login:Penguin
09/11/06 12:03:55 eRT3M+Ha
>>446
sed 's/^\./0./'
448:441
09/11/06 19:41:15 /t9QHrwg
>445
ctrl-r で、history のリストから検索して、
ctrl-e とすると、実行ではなく編集になりますよね、
あれがやりたかったんです。
ただ、その検索の部分を(例えば)grep で検索したり、
選ぶ部分をメニュー形式というか対話型にしたり、(その他もろもろ)
結果を実行ではなく、編集にしたい。
なので、シェルスクリプトとかで実行した結果をコマンドラインに
入れられないかなと思ったんです。
ちと無理だったかな。
>>442,444,445 どうもです。
449:login:Penguin
09/11/06 19:45:45 q+Z8sAfI
eshell使えば
450:login:Penguin
09/11/06 19:46:49 eRT3M+Ha
>>448
コマンドラインに戻す必要あるのかな。
そのアプリの中で編集させて実行しちゃえば?
451:login:Penguin
09/11/06 21:42:41 ebfIAKEi
>>448
bashなら、↓で実現できないかな?
$ cat hoge.sh
echo `date` >> ~/.bash_history
$ sh hoge.sh
$ history -r
$ history | grep 2009
15 2009年 11月 6日 金曜日 21:37:38 JST
16 history | grep 2009
$ shopt -s histverify
$ !15
2009年 11月 6日 金曜日 21:37:38 JST
(histverifyがonだとカーソルはコマンドラインの行に位置したままで、編集可)
# 嘘書いてるかもしれんので、間違ってたら指摘求む
452:login:Penguin
09/11/06 21:57:06 ebfIAKEi
最初に
HISTFILE=/tmp/.bash_history
とかして一時ファイルにしたほうがよいかも
453:login:Penguin
09/11/06 22:03:08 CfRBFuVC
質問。環境はbashです。
URLをテキストファイルに溜め込むスクリプトを作りたくて
弄りはじめたんですが、詰まってしまったので‥ 他力本願!
希望する結果:
$echo ${URL} > url.txt
$cat url.txt
URLリンク(aaaa.co.jp)<)
としたい。
#!/bin/bash
NUM=0
while [ ${NUM} -lt 5 ]
do
URL=`zenity --entry "$1"`
NUM=`expr ${NUM} + 1`
done
URLに複数の文字列を溜め込みたいのですがどうするべきでしょうか?
ググってみると配列?というやり方があるようなのですが、まだ理解できません
教えてください。
454:login:Penguin
09/11/06 22:17:20 wQA60fmy
>>453
zenityって何のこっちゃ。配列を使うとこうなる。
$ URL=("foo" "bar")
$ for url in ${URL[@]}; do echo ${url}; done
foo
bar
…が、単に${URL}に空白区切りのURLを入れておいて、
sedなりtrなりを通して1行ずつ出力すれば良いだけの話ではないのか?
$ URL="foo bar"
$ echo ${URL} | sed 's; ;\n;g'
foo
bar
$ echo ${URL} | tr ' ' '\n'
foo
bar
455:login:Penguin
09/11/06 23:02:57 CfRBFuVC
>>454
>zenityって何のこっちゃ。
なんか便利そうだなぁと思ってw
zenity使わんでもいいんだけど、常に端末開いてるわけじゃないから操作的に楽かなぁと‥
んで、溜め込むURLは決まってるわけじゃなくて、ブックマーク的な感覚で使うつもり。
$ URL=("foo" "bar")
は、わかったけど
$ for url in ${URL[@]}; do echo ${url}; done
は、${URL[@]} を 一行づつ url に代入して、それを一行づつ出してるってこと?
ってことは、って考えた結果
while [ ${V_NUM} -lt 5 ]
do
URL=("${URL[@]}" `zenity --entry "$1"`)
V_NUM=`expr ${V_NUM} + 1`
done
echo "${URL[@]}"
a b c d e と順に打っていったら
$ echo "${URL[@]}"
a b c d e
と返ってきた。
結果だけみると動作してるように見えるけど、合ってますか?
なんとなく配列のイメージはわかったような気がする・‥
# sed とか 正規表現 とか覚えたら色々出来そうだ。。。と夢見てる段階w
456:login:Penguin
09/11/07 00:24:25 27rGR1FA
>>455
配列の話をしているからbash前提で話すが、
・zenityが返す値(URL)を""でエスケープしておかないと、URLにスペースが含まれていたときにハマる。
・単純に5回繰り返すだけならwhileとカウンタを使うよりもforを使ったほうがいい。
for i in {1..5}; do [処理]; done
for i in `seq 5`; do [処理]; done
457:login:Penguin
09/11/07 01:39:27 CteOVE+c
>>456
なるほど。わざとスペースを入れて試してみました。
単純に5回繰り返すつもりなので、アドバイス通りにfor文でもやってみたいとおもいます。
>>454 >>456
どうもありがとうございました。
458:login:Penguin
09/11/11 00:08:25 ISVpZi0Z
bashの配列なのですが
# ls
お宝動画 有名女優の秘部大百科
というファイルがあって
files=(`ls`)
echo "${files[0]}"
とすると「お宝動画」しか表示されませんよね
これをちゃんとしたファイル名、空白を含む値を代入するには
どうすればいいのでしょうか?
459:login:Penguin
09/11/11 10:05:24 FBEaA7LT
>>458
IFSがデフォで空白・タブ・改行になってると思うので
IFSから空白を除く
460:login:Penguin
09/11/11 13:32:06 OlX5y2f2
そのファイル名の部分をもっと当たり障りの無いファイル名に変えて書けよww
461:login:Penguin
09/11/11 19:26:47 h7rzLTxQ
Bachで条件付バックアップスクリプトを組みたいのですが
どう書いて良い物か分からなくなってしまったのでご教授
お願いします。
< やりたい事 >
任意のフォルダ配下でタイムスタンプがN日経過したものをtar.gzで
圧縮して、そのファイルを削除したい。
たとえば、/home配下に test1・test2・test3と言う3つのフォルダがあって
最終アクセス(ファイル操作)が30日以前のファイルを/home/backupに
タイムスタンプ.tar.gz形式で保存し、バックアップ後そのファイルを削除する。
test1フォルダ内
-rw-rw-r-- 1 root root 10K 10月 09 00:00 /home/test1/hoge.txt
-rw-rw-r-- 1 root root 10K 10月 10 00:00 /home/test1/higetxt
tes21フォルダ内
-rw-rw-r-- 1 root root 10K 10月 11 00:00 /home/test2/hoge.txt
-rw-rw-r-- 1 root root 10K 11月 01 00:00 /home/test2/higetxt
test3フォルダ内
-rw-rw-r-- 1 root root 10K 11月 09 00:00 /home/test3/hoge.txt
-rw-rw-r-- 1 root root 10K 11月 11 00:00 /home/test3/higetxt
n日後のファイルを検索するところまで調べて下記のようなコマンドを
使うのだろうと思っているのですが、それ以降どうしてよいものか・・・・。
find /home -type f -daystart -mtime +30 |fgrep -v /.
長くなりましたがご教授お願いします。
462:login:Penguin
09/11/12 00:26:46 VaDsQREP
教授は外出中です
463:login:Penguin
09/11/12 00:42:44 MDFmvAz9
バッハねぇ。
464:login:Penguin
09/11/12 23:09:37 ou+qWNnh
>>461
TARGET=`find /home -type f -daystart -mtime +30 |fgrep -v /. `
tar cvzf `date +%Y%m%d`.tar.gz $TARGET && rm $TARGET
465:login:Penguin
09/11/13 10:24:58 WdvDAtlm
>>464
有難う御座います。
やってみます!
466:login:Penguin
09/11/13 11:55:23 YoLOfEvP
test=/var/www/.htaccess-log
という風にしても-logのみが認識されているようでうまく機能しません。
最初に.がある場合のファイルを変数に入れるにはどうすればいいのでしょうか?
467:login:Penguin
09/11/13 11:58:11 U8ZA18uC
$ test=/var/www/.htaccess-log
$ echo $test
/var/www/.htaccess-log
$
認識してるが。
468:466
09/11/13 12:09:11 YoLOfEvP
>>467
すいません。
testの部分がtest-logでした。
$ test-log=/var/www/.htaccess-log
$ echo $test-log
-log
となります。
申し訳ないです。
469:login:Penguin
09/11/13 12:33:52 veh/HZx5
>>468
変数名に-(ハイフン)は使えないと思ったが
470:466
09/11/13 12:45:36 YoLOfEvP
>>469
すいません。
そうなんですか。
最近WEB関連からシェル叩くことがあって作ってたんですがシェルでは変数にハイフン使えないんですね。
修正したらうまくいきました。
ありがとうございます。
471:login:Penguin
09/11/13 15:23:15 mmBbeV5d
区切りたいなら _ 使え。
472:login:Penguin
09/11/13 20:07:30 csbg7Gm/
>>466
>>5
>・思い通りに動かないときは、まずは sh -x でトレースしましょう。
473:login:Penguin
09/12/07 12:06:33 XdJnANaN
[ string ] と、[ -n string ] の違いについてお尋ねします。
[ $(cat /dev/null) ] が偽になるのに対して、[ -n $(cat /dev/null) ] は真になってしまうのですが、何が違うのでしょうか。
[ -z $(cat /dev/null) ] は真になるので、なんだか -nだけが仲間外れな気がします。
474:login:Penguin
09/12/07 13:25:47 OGpjrFHy
>>473
それだと $(cat /dev/null) が消えて引き数がなくなって
[ ]
[ -n ]
[ -z ]
になる。
なんでそういう挙動になるかは bash の test.c でも読んでもらうとして、
その挙動を避けるには
[ "" ]
[ -n "" ]
[ -z "" ]
にすればいい。
475:473
09/12/07 13:46:33 5UzhKh29
>>474
なるほど納得です。
そう言えば変数が空文字列になってしまう場合を考慮してクォートしろと聞いた記憶があるような気がします。
素早いお返事ありがとうございました。ソースもあとで読んでおきます。
476:login:Penguin
09/12/13 00:31:23 h59G/AZL
よくダウンロードとかすると何%まで完了してるかみたいなのを
動的に出力するのってどうやんの?
477:login:Penguin
09/12/13 01:45:44 k2yGj3y5
普通に wget でいいんじゃない?
478:476
09/12/13 02:23:19 h59G/AZL
>>477
ダウンロードに限らず
yumとかbuildするときに%を示す数値が動的に変わっていくじゃないですか。
あれ、どうやって実装してんのかなぁと。
誰かわかる?
479:login:Penguin
09/12/13 02:27:41 /qP8xinl
yumってpythonだっけか
そういうライブラリがあるんでないの
シェルスクリプトでやりたいならこういうのがある
URLリンク(www.theiling.de)
480:login:Penguin
09/12/13 03:38:56 s0ebrxv6
>>478
バックスペースを然るべき回数売って表示し直し
481:login:Penguin
09/12/13 11:14:43 45+rg1Ww
画面制御の話題だったの?
このスレ的には tput あたりでやるのが正しいのだろうか。
482:login:Penguin
09/12/13 11:23:29 1bGElD/p
>>478
$ man console_codes
483:login:Penguin
09/12/13 11:50:06 k2yGj3y5
このスレ的には dialog とか whiptail じゃないの。
484:login:Penguin
09/12/13 18:57:54 7EV0TAof
普通の文章を書いた平文テキストをxtermに関連付けして開くと
実行権もないのにxtermがいくつも開いてフリーズします。
なぜですか?
485:login:Penguin
09/12/13 19:25:45 VEJMKGLd
「関連付けして開く」ってどういう概念?
486:login:Penguin
09/12/13 19:31:32 7EV0TAof
普通は表示とか端末で実行とか聞かれるので、右クリメニューに入れました
487:login:Penguin
09/12/13 19:38:48 8kXkcLfR
Ubuntu使ってるの?
488:login:Penguin
09/12/13 22:54:17 u+Xt7Oyd
>>486
ごめん。尋ねておいて悪いけど、
「関連付けして開く」や「右クリメニューに入れ」るってのが判らない。
なので助言できない。
489:login:Penguin
09/12/13 22:58:13 X8Bwu1bm
>>484
Windowsの関連づけの感覚?
GNOMEであれば、プロパティから開くアプリ指定してるとかってことか?
試しにユーザーを新しいの作って再現するかどうか試してみたら?
もし再現できなければ ~/.gconf* ~/.gnome* とか退避して削除してログインしなおしてみるとか。
内容からして、くだ質のほうがアドバイスもらえると思うよ。
490:login:Penguin
09/12/13 23:54:09 3DX9cdGt
>>484
「xterm を起動できるかどうか」は
「xterm を実行する権限があるかどうか」で決まることだから、
「平文テキストを実行する権限」とは関係ない。
$ xterm /tmp/hoge.txt とかやると、
No absolute path found for shell: /tmp/hoge.txt
とかいったメッセージは出るけれど、xterm が起動する。
関連付け はよくわからないけれど、
テキストファイルをまとめて開こうとすれば、
ファイルの数と同じだけ xterm が一気に起動する ってことは想像できる。
CPUとか メモリ/swap とかが足りなければ、フリーズみたいな状況になるかもしれない。
491:login:Penguin
09/12/14 00:20:50 SmNokk3G
>>484
シェルスクリプトの話じゃないでしょう。
こっちで。
くだらねえ質問はここに書き込め! Part 179
スレリンク(linux板)
自分の環境もちゃんと書くこと。
URLリンク(www12.atwiki.jp)
492:login:Penguin
10/01/05 20:34:00 nuI9c99Q
bashで手軽にオブジェクト指向モドキする方法ってありませんか?
とりあえず試みたのですが、スッキリしません。
#!/bin/bash
gal(){
eval "$1"_name="$2"
eval "$1"_age="$3"
eval "$1"_sex="$4"
}
aisatsu(){
eval echo "私は\"\$"$1"_name"、\"\$"$1"_age"歳です。よろしく
ね。"
}
hanasu(){
eval echo "\"\$"$1"_name\"に何の用?"
}
gal "yuka" "由佳" "16" "女"
aisatsu "yuka"
hanasu "yuka"
493:login:Penguin
10/01/05 20:45:01 kbriKfoG
>>492
URLリンク(emasaka.blog65.fc2.com)
494:login:Penguin
10/01/05 20:48:20 nuI9c99Q
>>493
すごいものがあるんですね。
ありがとうございました。
495:login:Penguin
10/01/07 18:16:37 wAYEJTZp
テキストファイルで、指定した文字列を含む最初の行を開始位置とし、先とは別の
文字列を含む行が見つかるまでを削除するにはどうすれば良いでしょうか?
496:login:Penguin
10/01/07 18:20:32 D02SG01g
>>495
sed '/xxx/,/yyy/d'
497:login:Penguin
10/01/08 10:03:28 KgmcRvHm
>>495
ありがとうございます。
sedというのは強力なんですね。
498:login:Penguin
10/01/08 12:52:11 zGQxNXrb
>>497
これで「強力」ってどういう意味?
499:login:Penguin
10/01/08 16:04:10 /auv4CfE
>>498
文字/行削除程度しか知らない初心者にとっては、超強力。
500:497
10/01/08 23:16:45 KgmcRvHm
shの変数を>>496の/xxx/に使いたい場合についてお伺いします。
path=/aaa/bbb
sed "/$path/,/yyy/d"
の様にしても$pathが展開された時点で区切り文字がエスケープされておらず上手く
いきません。
前処理が必要なのか、それともスマートな方法が用意されているのでしょうか?
501:login:Penguin
10/01/08 23:33:25 awvr0YeL
ファイル名はNUL文字以外なら全て使えるんだよね。
ということは、前処理の段階で区切り文字をエスケープする必要があるのかな。
502:497
10/01/08 23:38:17 KgmcRvHm
やはり自前で前処理するわけですね。
sedで簡単に出来そうですね。
503:497
10/01/08 23:51:05 KgmcRvHm
下でできました。
#!/bin/sh -x
var=/aaa/bbb
esc=$(echo $var | sed -e 's/\//\\\//g')
$()の代わりに``を使うとパイプがあるせいか上手くいきませんでした。
実際はどうなのでしょう?
教えて頂けると嬉しいです。
504:login:Penguin
10/01/08 23:52:38 r+fu5lRJ
sed "/\\$path/,/yyy/d" はどうなの?
505:login:Penguin
10/01/08 23:53:13 aqeo86VH
区切り文字を変えるんだよ!
sed '\@foo@,\@bar@d'
506:497
10/01/09 00:07:36 WfSq+WCG
>>504
それだと$pathの先頭にのみ区切り文字がある場合にしか対応していないと思います。
>>505
そういうときに使うのですね。
なるほど。
ありがとうございました。
507:login:Penguin
10/01/10 12:29:36 jRBDc3XG
com1 | com2 | com3
の様なとき、どこかでエラーが起こった場合に、それを知ることはできないでしょうか?
bash3.0以降だと${PIPESTATUS[@]}で可能なようですがshでなんとかならないかと。
508:login:Penguin
10/01/10 12:37:23 E5a795Pl
subshellを使って、
(( com1 判定)| com2 判定 )| com3
みたいな事を見た憶えがするけど、定かでない。
509:初心者
10/01/13 23:30:52 9IUNZoL1
run.shファイルの中で、script_file.shをsourceした場合。
sourceされているscript_fileの中でscript_file自身の絶対パスを得る方法を調べています。
bashの場合はscript_fileの中で$BASH_SOURCEから得られるが、他のシェル(zsh/tcsh/ksh)でscript_file.shのパスを得られる方法を
教えていただけませんか?
>>>>>>>>>>>>>>>>>>>>>>
script_file.shファイルのある場所
/path/to/script_file.sh
>>>>>>>>>>>>>>>>>>>>>>
実行例:
%./run.sh
期待結果:
/path/to/
ファイル <run.sh>の中身
-------------
#!/bin/(sh/zsh/tcsh...)
source $path/script_file.sh
-------------
ファイル script_file:
-------------
script_file_path=`******`
echo $script_file_path;
-------------
510:login:Penguin
10/01/13 23:53:55 rEuhDc/f
>>509
機能知らない分際で答えるとさ
単純に呼ぶんだからさ
source "$path/script_file.sh" "$path/script_file.sh"
とか引数として渡してecho $1とかしても
できちゃったりはするね
511:login:Penguin
10/01/13 23:59:57 rEuhDc/f
期待結果は/path/to/だったかorz
ならsource "$path/script_file.sh" "$path"
でまぁできるといえばできてるけど
512:login:Penguin
10/01/14 00:01:40 4xSyV+UX
/が抜けてたねorz
513:login:Penguin
10/01/14 03:10:55 4xSyV+UX
>>507
気になったので書いてみた
>>508氏が言ってるようにもっと楽にできるんだろうけど
ちなみに頭悪いので間違ってる可能性ありと
使い物になってないと思うから 一応動いてるかも程度
514:login:Penguin
10/01/14 03:12:28 4xSyV+UX
function perror(){
stdout=`mktemp`;stdout2=`mktemp`
first=on
until test 1 -eq $# #引数一個の場合は何もしないので注意
do
if test $first = on
then
first=off
$1 1>$stdout 2>/dev/null
judge=$?
fi
if test $judge -eq 0
then
if ! test 2 -eq $#
then
$2<$stdout 1>$stdout2 2>/dev/null
judge=$?
shift
else #最後は標準出力へ
$2<$stdout #最後のcommandの失敗は判定してないので注意
shift
fi
else
echo "$1" error 1>&2
break
fi
stdout_hold=$stdout # 入れ替え
stdout=$stdout2
stdout2=$stdout_hold
done
rm $stdout $stdout2;unset stdout stdout2 stdout_hold first judge
}
515:login:Penguin
10/01/14 03:15:58 4xSyV+UX
perror 'ls /usr/bin' 'sed 's/^/test/g'' 'grep gcc' less
perror 'ls /usr/bin' 'sed 's/^/test/g'' 'tar xf' less
まぁ一応動いてるのかな!?
516:login:Penguin
10/01/14 17:27:09 FVM4x3d9
sed -e '$-3,$d' file
とすると
sed: -e expression #1, char 2: unknown command: `-'
というエラーがでます。
versionは4.1.5ですが上記の使い方間違ってますか?
517:login:Penguin
10/01/14 17:55:26 EAAIjJ3h
vi じゃないんだからそんな指定できないよ
518:login:Penguin
10/01/14 22:28:16 dyjWaACs
>>507
エラーが起こったかどうか *見えればいい* ってだけならこんなやりかたも。
(com1 ; echo $?>/tmp/test.log) | (com2 ; echo $?>>/tmp/test.log) | 略
(com1 ; xmessage com1:$?&) | (com2 ; xmessage com2:$?&) | 略
519:login:Penguin
10/01/15 09:27:35 vHlv+w15
>>516
つhead -n -4 file
520:login:Penguin
10/01/15 10:37:34 0e3bcUwp
>>519
-nの値に負の数を与えられるんですね。
521:login:Penguin
10/01/15 11:44:19 exz65txq
ダブルクォーテーションで囲まれた文字列を抜き出すってどうやればいいんだ?
cutでもexprでも俺には無理だった、絶対サクッとできるはずなのに悔しすぎる…
522:login:Penguin
10/01/15 12:29:58 n61dnfY7
grep -o '"[^"]*"'
523:login:Penguin
10/01/15 13:14:40 exz65txq
>>522
今日一日崇めさせてくれ
524:login:Penguin
10/01/15 20:34:53 cwTkNqT3
1日限定かい。
525:login:Penguin
10/02/07 15:35:53 lbKDrfi6
$ df -h /tmp
Filesystem Size Used Avail Use% マウント位置
tempfs 512M 89M 424M 18% /tmp
の%の前の数字(ここでは18)だけ取り出したいんだけど、どうすればよいですか?
526:login:Penguin
10/02/07 15:58:04 vkq5/P4Z
awk使う
527:login:Penguin
10/02/07 16:03:00 U7v7s3zM
とても安直な方法なので最適解には程遠いと思いますが
df -P /tmp | grep '/tmp$' | awk '{print $5;}' | sed 's/%$//'
528:login:Penguin
10/02/07 16:06:14 lbKDrfi6
>>526,527
ありがとう。
529:526
10/02/07 19:06:47 dchTEc3Z
>>527
おまwww
df -h /tmp | awk '/\/tmp/ { print gensub("%", "", "", $5) }'
530:login:Penguin
10/02/07 19:16:50 U7v7s3zM
いやそれくらい知ってる
531:login:Penguin
10/02/07 19:30:22 Fd1qGpin
複数行のキーワードをfgrepする手はないスか?
キーワードの行数は不定。以下例では仮に2行とします。
$ cat -n text
1 abcdefg*******
2 [hijklmn-z]
3 abcdefg*******
$ fgrep 'abcdefg*******なんとか[hijklmn-z]' text
text:1:abcdefg*******
text:2:[hijklmn-z]
1と2行目のペアはヒットするが、3行目がヒットしてはいけない。
532:531
10/02/07 19:32:00 Fd1qGpin
ああっと。
上の検索コマンドはgrepファミリーでなくても良いですが、perlは駄目です。
533:login:Penguin
10/02/07 19:58:16 KEZIcPfj
宿題は自分でやれよ
534:login:Penguin
10/02/07 21:03:26 U7v7s3zM
#!/bin/bash
AWKFILE="/tmp/$0.$$"
trap "rm -f ${AWKFILE}" 0
KV=0
echo "BEGIN{s=0;h=\"\"};" > "${AWKFILE}"
for keyword in $*; do
echo "/${keyword}/{if (s==${KV}){s=s+1;h=h NR \"\\t\" \$0 \"\\n\";} else {s=0;h=\"\"}};"
KV=`expr ${KV} + 1`
done >> "${AWKFILE}"
echo "{if (s==$#){print h;s=0;h=\"\";}};" >> "${AWKFILE}"
awk -f "${AWKFILE}"
535:login:Penguin
10/02/07 21:24:02 U7v7s3zM
いろいろ残念な部分があるけど、そこは使う人が直してね
536:login:Penguin
10/02/07 21:36:26 5ZhdKpPZ
>>534
んー。やっぱりスクリプト生成みたいになりますか。
私以外の人が考えてもすっきり行かない事が解りました。ありがとうございます。
>>533
この手の宿題を出す学校はあまり無いんじゃないかな。
537:login:Penguin
10/02/07 21:41:15 U7v7s3zM
自分でできない部分だけ聞きなよ
538:login:Penguin
10/02/07 21:51:00 UYJWIskO
>>536
質問に答えようとしてない奴の発言にはいちいち反応するな。
「教えてくれ」ってやつと「宿題は自分でやれ」ってやつは
「歩み寄る可能性がない」からスルーしたほうがいい。
専ブラ使える環境なら、NGワードに「宿題」って単語を入れておいたほうがいいよ。
539:login:Penguin
10/02/07 22:05:12 U7v7s3zM
>>531はいろいろ引っかかる部分があるから正直俺も最初は回答しようかどうか迷ったぞ
返事を聞いて>>538も出てああやっぱりかと思ったし...
と戯言はここまでにしとく
540:login:Penguin
10/02/07 22:36:33 5ZhdKpPZ
>>537
>自分でできない部分だけ聞きなよ
すっきりと実現できなかったので尋きました。というか、
往々にしてこの手のことを実現すると車輪の再発明になってしまってる事が多い。
なので、他の人も決定的な車輪を持ちあわせていないという情報はとても大切で、
有難く思っています。
541:login:Penguin
10/02/07 22:44:49 qrQKR8fu
典型的なゆとり脳というか
なんでこんな上から目線なんだろ
そういうのは自分で書いたの張ってから言えよ
542:login:Penguin
10/02/07 22:46:48 U7v7s3zM
>>540
実現できたなら実現方法そのものを聞く必要はない
実現方法を提示してより良くするにはどこを直せばいいか聞けばいい
他人のコストは格段に違うだろうし、回答も違ったものになる
というかお前>>526だろ?
543:526
10/02/07 23:05:32 sirvd3yi
こらこらw
静観してる俺まで巻き込むなよ
544:login:Penguin
10/02/07 23:09:51 fkJC7wtF
>>542
そうですね。その点は気をつけたいと思います。
>というかお前>>526だろ?
いや違う。
むしろ、>>529(526)にしろあなたにしろ"/tmp"をマッチさせている時点で、要求条件から逸脱していると思っている。
545:login:Penguin
10/02/07 23:30:09 U7v7s3zM
ID変えながら大変ですね。元に戻せないの?
546:login:Penguin
10/02/07 23:44:26 sirvd3yi
どうやって戻すんだよw
547:login:Penguin
10/02/07 23:49:53 qVmLGOqM
昼間寝ていたら正規表現使う夢を見た気がする、なぜだ
548:login:Penguin
10/02/07 23:56:03 U7v7s3zM
同じIPが取れるまでトライ!(やったことないので同じになるのか知らん)
549:login:Penguin
10/02/08 06:35:08 wgsJNc2d
>>548
お前ちょっと黙れ。
550:login:Penguin
10/02/08 08:30:32 shLyrCGR
U7v7s3zMが取れるまでトライし続けてるのかなw
551:login:Penguin
10/02/08 12:19:18 2AE05UQA
答えてもらっておいて「まあそんなもんだよね」
これはひどい
552:login:Penguin
10/02/08 17:02:25 h/fx9poh
複数の数字に,同じ四則演算(+,-,*,/)を繰り返した計算結果を表示するシェルスクリプトを,cshシェルスクリプトで書け。
(基本仕様)
① コマンドとして実行できる.(シェルコマンドである.)
② 入力した数字を計算できる.
③ 入力できる数字の個数は2以上とする.
④ 四則演算子(+,-,*,/)を選択,または直接入力して
数字1□数字2□・・・□数字N (□=+ or - or * or /,N≧2)
の計算結果を出力する.
⑤ 四則演算子以外の記号が入力された場合,エラーメッセージを出力する.
(ポイント)
? シェルコマンドにするには,スクリプトの最初に(#!で始まる)おまじないを書く.
? 標準入力から文字列を入力するには $< を用いる.
? コマンドラインに引数を指定した場合は,その引数は変数$argvに格納されている.その各要素を参照するには,$argv[1],$argv[2](または$1,$2)などとする.
? 四則演算には @ コマンドが使用できる.(ただし,整数しか扱えない.)
誰かわかるひとおねがいします(今週中にお願いします!)
553:login:Penguin
10/02/08 17:05:28 llGt0cFK
何箇所でマルチしてんだよwww
554:sage
10/02/08 17:06:29 kDoV0MXx
宿題は自分でやろうね。
555:login:Penguin
10/02/08 20:38:54 Wyshj96C
後から読んで526にワロタ
カワイソスw
556:login:Penguin
10/02/19 00:14:13 c2ocdmWw
df -h /tmp | sed 's/.*\([0-9][0-9]*\)%.*/\1/'
557:login:Penguin
10/02/20 23:34:54 vDEbYPUT
以下の結果を出力するシェルを,bashスクリプトで書け.
(基本仕様)
・コマンドとして実行できる.(シェルコマンドである.)
・ユーザーが10000以上99999以下の5桁の数字を入力する.
・その数字を7で割って1余り,かつ13で割って2余った場合は Daikichiと表示する.
・それ以外で,13で割って2余った場合は Chuukichiと表示する.
・それ以外で,7で割って1余った場合は Shoukichiと表示する.
・それ以外の場合は Hazureと表示する.
・入力した文字が10000以上99999以下の数字以外の場合はエラーメッセージを表示する.
・できる人は,コマンドライン引数でDaikichiなどの文字を変更できるようにする.
(ポイント)
☆シェルコマンドにするには,スクリプトの最初に(#!で始まる)おまじないを書く.
☆標準入力から文字列を入力するには read を用いる.
☆コマンドラインの引数は,$@に格納されている.(その要素は $1 $2 ...)
☆四則演算には $(( )) コマンドが使用できる.(ただし,整数しか扱えない.)
誰かわかるひとお願いします
558:login:Penguin
10/02/20 23:37:36 8qh4FPc7
>>557
> 誰かわかるひとお願いします
まぁ、Linux使える人ならば、誰でも分かる
"学校" の課題ですわな(w
# "学校" は 大学 でない。
559:login:Penguin
10/02/20 23:46:16 WE3Utbg7
シェルスクリプトの課題を出す学校ってあるんだね。
ふつーは、CとかJavaを中心にやるものだと思ってた。
560:login:Penguin
10/02/21 00:00:05 WDiWxw8N
#!/bin/bash
read read
echo $((read%3))`echo 5p$(echo e$(echo l5b$(echo 6M5)q2)744$(echo GsCg$(echo =$(echo =))))|base64 -d`
561:login:Penguin
10/02/21 00:16:12 FUNRtF1w
死ねばいいのに
562:login:Penguin
10/02/21 00:27:29 R8eJDQx8
何をお願いされているのだろう。アンケートかな?
回答「わかります」
上から2桁目で四捨五入したい(例: 15 -> 20, 312 -> 300, 9432 -> 9000)
どうやるのが一番簡単かな?
563:login:Penguin
10/02/21 00:39:34 y6fTjKHz
10を底とした対数とって
1.5*10^1
3.12*10^2
9.432*10^3
仮数部を小数点以下で四捨五入する
564:login:Penguin
10/02/21 01:05:26 y6fTjKHz
全然対数じゃないや
565:login:Penguin
10/02/21 01:20:23 mOFZBUIZ
>>557
お前UNIX板のシェルスクリプトスレでも宿題は自分でやれって言われてただろ
マジで死ね
566:login:Penguin
10/02/21 02:00:25 y6fTjKHz
$ echo 'x=9432; beki=l(x)/l(10.0); scale=0; beki/=1; scale=10; y=x/(10^beki); y+=0.5; scale=0; y/=1; y*=(10^beki); scale=0; y/=1; y;' | bc -l
9000
一応、15, 312, 9432 については期待の値になった。
567:login:Penguin
10/02/21 02:38:10 ymcnTK5S
>>566
しかし4432613で矛盾が出た。
568:login:Penguin
10/02/21 08:29:04 y6fTjKHz
違うかね?
4432613 = 4.432613 * 10^6
→ 4.4*10^6 → 4.0*10^6 = 4000000
>>562 さんに聞いてみようか。
入力4432613での期待値は、
上から2桁目の"4"で四捨五入して、4000000 でよろし?
3桁目の"3"でして、4400000 ではなくて。
569:login:Penguin
10/02/21 09:26:12 y6fTjKHz
少しコメント入れました。ダメな場所はどなたか直してください。
echo 'x=4432613;
# x=y * 10^d 表現にする
d=l(x)/l(10);
scale=0; d/=1;
scale=1; y=x/(10^d);
# yの小数点第一位を四捨五入して整数に。
y+=0.5; scale=0; y/=1;
# 元の桁数に戻す。
z=y*(10^d);
z;
' | bc -l
570:login:Penguin
10/02/21 11:49:45 y6fTjKHz
アプローチを変えて文字列処理にしてみた
$ echo 4432613 | perl -npe 's/^(\d)(\d)(\d+)/$1+($2>4) . 0 . 0 x length($3)/e;'
571:login:Penguin
10/02/21 12:23:46 y6fTjKHz
$ echo 15 | perl -npe 's/^(\d)(\d)(\d*)/$1+($2>4) . 0 . 0 x length($3)/e;'
572:login:Penguin
10/02/21 13:04:19 y6fTjKHz
#!/bin/ksh
v="$1"
a=${v:0:1}
b=${v:1:1}
c=${v:2}
[ $b -gt 4 ] && a=$((a+1))
b=0
c=$(echo $c | tr 0-9 0)
echo "$a$b$c"
573:login:Penguin
10/02/21 13:09:12 7QPAwQGI
ん、よくわからんけど……
乙 w
574:562
10/02/21 19:12:39 R8eJDQx8
なんかすごいものがw
>>568
>入力4432613での期待値は、
>上から2桁目の"4"で四捨五入して、4000000 でよろし?
よろしです。
パッと見で>>571がスマートですね
シェルからこいつを呼ばせて貰おうと思います
ありがとうございましたm(_ _)m
575:login:Penguin
10/02/21 20:33:49 y6fTjKHz
>>507
URLリンク(sourceforge.jp)
ど根性に脱帽
576:login:Penguin
10/02/26 00:26:14 DYTaEvQS
自分自身(ファイル)をサーバにuploadするシェルスクリプトって可能ですか?
具体的には、ちょこちょこ定期的にレンタルサーバにuploadしたいファイル群があるのでシェルスクリプトを書きたいのですが、
そのシェルスクリプトファイル自身もuploadしたいのです。
577:login:Penguin
10/02/26 00:29:09 C/OfvsKM
まず、なぜ不可能だと考えたのか、そこから聞こうか。
578:login:Penguin
10/02/26 00:37:26 DYTaEvQS
今実行中のファイルを操作するってのがいけないことなのかなぁと…
579:login:Penguin
10/02/26 00:39:36 dGd2Emr5
自身のunlinkすら可能だというに
580:login:Penguin
10/02/26 00:56:31 7suOgZ+f
アップロードどころか実行中のスクリプトを編集することもできるよー
581:login:Penguin
10/02/26 21:44:10 ZUmR/bTp
以下の結果を出力するスクリプトを,UNIXシェルで書け.
(基本仕様)
・コマンドとして実行できる.(UNIXシェルである.)
・主人公、妹1名、両親、自分の友人数名(うち最低1名は女性、半数以上は男性とする)、妹の友人(女性)数名が登場する.
・主人公、妹、自分の友人、妹の友人はいずれも生徒もしくは学生とする.
・両親のうち、父は総合商社勤務のサラリーマン、母は専業主婦とする.
・主人公の言動やイベントの発生にともない、各キャラのパラメータを変化させる.
・病弱な妹を思いやる兄と妹の交流を中心に、他の登場人物との友情や恋愛を描写する.
・エンディングは妹、もしくは妹の友人のいずれかと深い恋愛関係になるか、誰とも親密に慣れないバッドエンディングになるようにする.
・妹と恋愛関係が深まる場合、病弱な妹への思いやりが徐々に、自然に恋愛感情へ変化するように描写する.
・ゲームの操作方法はコマンド選択式またはコマンド入力式とする.
・すべてUNIXシェル内部で処理し,外部コマンドは呼び出さないこと.
(ポイント)
☆UNIXシェルにするには,ファイルの最初に #!/bin/bashというおまじないを書く.
☆コマンド選択方式のゲームにする場合、select文を使用できる。
☆四則演算には $(( )) コマンドが使用できる.(ただし,整数しか扱えない.)
誰かわかるひとお願いします
582:login:Penguin
10/02/26 21:49:36 ueeczQLj
さようなら
583:login:Penguin
10/02/26 22:36:07 PyskErwP
>>581
UNIXシェルってなんだ?
584:login:Penguin
10/02/26 22:53:51 nq/ujwuR
>>581
いろいろ拡張されてきたなw
585:login:Penguin
10/02/26 23:01:55 UQaFhRqQ
自演ウザス
586:login:Penguin
10/02/27 08:37:06 dxtkbNS9
素直にワラタ
587:login:Penguin
10/02/28 01:11:29 oz3AO1O4
シェルスクリプトとVBA、どちらが簡単ですか?
588:login:Penguin
10/02/28 01:13:35 XA1Dii88
シェルスクリプト
589:login:Penguin
10/02/28 01:20:34 oz3AO1O4
>>588
シェルスクリプトと比較して、VBAはどこがどんな風に難しいのでしょうか?
590:login:Penguin
10/02/28 01:37:41 XA1Dii88
用途が全然違う
VBA=MS製品の補助、高度なことやろうと思ったらVBの型とか定数とかメソッドとかプログラミング言語として覚えないといけない
シェルスクリプト=普段から使っているコマンド郡の応用、データの流れとアルゴリズムさえ判れば外部プログラム呼び出して何でも出来る
591:login:Penguin
10/02/28 01:52:34 oz3AO1O4
>>590
疑問なのは、なぜアプリケーションの補助がそんなに難しいのか、
もっと簡単にできなかったのか、それでは普通の人に使えないのではないか、
という点です。
Linuxで表計算っぽいことができる言語というとawkがありますけど、
あれくらい簡単だったら誰でも使えると思うのですが。
マクロ言語がエンドユーザ言語として使われるためには簡単でなければならないはず。
それなのにシェルスクリプトより難しいというのは、その目的にそぐわないような気がするのですが。
592:login:Penguin
10/02/28 01:55:02 C3UADE41
VBAの質問ならよその板でやっとくれ。
593:login:Penguin
10/02/28 01:56:36 oz3AO1O4
>>592
VBAについて知りたいというよりも、
シェルスクリプトとVBAの違いというか、
際立った特徴のようなものがあれば、それを知りたいんです。
594:login:Penguin
10/02/28 02:06:41 B/kw3N2G
>>593
そもそも活用シーンが全然違うのに比較してどうする。根本が間違っている。
比較するならWSHとだろう。
595:login:Penguin
10/02/28 02:12:43 oz3AO1O4
>>594
WSHもWindows PowerShellも
エンドユーザにはあまり受け容れられていないように見受けられます。
Linux/UNIX/MacOSXのエンドユーザでもスクリプトを全く書かない人はいますが、
Windowsよりはそういう人が少ないと思います。
単純にWindowsのほうがヘビーユーザ率が低いというもあるでしょうが、
それだけでなく、Windowsで使われるそれらの言語が
そもそもエンドユーザに適さない欠点を有しているからではないのでしょうか?
とすると、逆にシェルスクリプトはどういう点でそれらより優れているのでしょうか?
596:login:Penguin
10/02/28 02:20:34 B/kw3N2G
>>595
だからさー比較する前提条件が間違っている。
597:login:Penguin
10/02/28 02:24:04 oz3AO1O4
>>596
WSHと比較するようにアドバイスされたので、そうしたのですが。
598:login:Penguin
10/02/28 02:31:01 v9A/VFIk
シェルスクリプトと比較するべきはバッチファイル。
君の質問は「バッチファイルとVBA、どちらが簡単ですか?」という事になるから
この板で聞く事じゃない。
599:login:Penguin
10/02/28 02:33:03 oz3AO1O4
>>598
バッチファイルなんて論外でしょう。
あれとシェルスクリプトを一緒にするのはやめましょう。
600:login:Penguin
10/02/28 02:43:10 v9A/VFIk
VBAと一口に言ってもWord、Excel、Access、Outlook…全然違うぞ?
601:login:Penguin
10/02/28 02:44:34 B/kw3N2G
っていうかスレチ。
いちいちageているし、これ以上続けるならレス乞食とみなしてあぼーんする。
くだ質いけ。
602:login:Penguin
10/02/28 02:47:24 C3UADE41
くだ質に来られても困るな。
ム板にでも行ってくれ。
603:login:Penguin
10/02/28 02:52:42 oz3AO1O4
WSH(VBScript)で「C:\TechEzo\Round23.txt」内の「ようこそ」を含む行を表示する
Set fso = CreateObject("Scripting.FileSystemObject")
Set regEx = New RegExp
Set tempFile = fso.OpenTextFile("C:\TechEzo\Round23.txt")
regEx.Pattern = "ようこそ"
Do Until tempFile.AtEndOfStream
tempLine = tempFile.ReadLine
If regEx.Test(tempLine) Then
WScript.Echo tempLine
End If
Loop
これを見て「オブジェクト指向だから素晴らしい」とか
「シェルスクリプトに比べて簡単」とか思う人はいないでしょう。
管理者や一般のエンドユーザなど、ノンプログラマも使う言語を
こんなふうに設計したMSは頭が悪いとしか思えないです。
604:login:Penguin
10/02/28 03:01:02 SsRM0ruv
マルチ相手によーやるな
605:login:Penguin
10/02/28 09:04:34 JCw0fVKj
>>603
Window Power Shellもしかり。ちょい使いするには厳格すぎる。
あまりハードルを下げるとMS専門鯖管にスキルが付いてLinuxに行っちゃうからじゃね?
606:login:Penguin
10/02/28 11:13:46 ZpjvZrys
指定したディレクトリ以下を再帰的に検索して
同じディレクトリに大文字小文字違いでファイル名が重複して存在してた場合
例)
ABC.txt
abc.txt
abc.TXT
どれか一つ(どれでもいい)を残してあと消去するってのをやりたいけどどうやんの
607:login:Penguin
10/02/28 11:15:22 wBfYi/JJ
>>603 見たら、ハードル高くしたらむしろ出来る奴こそLinuxに行ってしまいそうにオモタ
608:login:Penguin
10/02/28 11:57:18 C3UADE41
>>606
perl か何かで書いた方が楽じゃないかな。
609:login:Penguin
10/02/28 11:58:42 qTqfFliX
>>606
$ find /tmp/hoge* -type f
/tmp/hoge1/ABC.txt
/tmp/hoge1/abc.TXT
/tmp/hoge1/abc.txt
/tmp/hoge1/a b c.txT
/tmp/hoge1/a b c.txt
/tmp/hoge2/ABC.TXT
/tmp/hoge2/ABC.txt
/tmp/hoge2/DEF.txt
$ find /tmp -type f | uniq -i -d -D --all-repeated=prepend | perl -00 -a -F'\n' -ne '{foreach $i (1..$#F){print "$F[$i]\n";}}'
/tmp/hoge1/abc.TXT
/tmp/hoge1/abc.txt
/tmp/hoge1/a b c.txt
/tmp/hoge2/ABC.txt
ディレクトリの大文字小文字違いは考えてない。
610:login:Penguin
10/02/28 14:28:15 oz3AO1O4
>>609
それって答になってるの?
ただ表示させてるだけじゃん。
表示させるだけならもっと楽な方法あるし。
$ ls -R
.:
ABC.txt Aca.TXT abc.Txt sample.sh test2
./test2:
ABC.txt Aca.TXT abc.Txt test3
./test2/test3:
DDD.TXT aBc.tXt
$ find ./* -type f | grep -i 'abc.txt'
./ABC.txt
./abc.Txt
./test2/abc.Txt
./test2/ABC.txt
./test2/test3/aBc.tXt
$ find ./* -type f | grep -i 'abc.txt' | uniq -i
./ABC.txt
./test2/abc.Txt
./test2/test3/aBc.tXt
611:login:Penguin
10/02/28 14:46:18 qTqfFliX
>>609 では、重複を探して、最初のを除いて、2つめ以降を出力してる。
この出方を>>606の評価基準で見てもらい、不満なければ、
あと xargs rm につなぐ程度で済むべ。
>>610 の例だと、それは全部消していいものなの?
612:login:Penguin
10/02/28 14:52:31 qTqfFliX
もちろん>>609が最適解だなんて思ってないんだけど、
>>610 のやり方だと、abc.txt って人が与えてるよね。何百個かある時はどうするの?
613:login:Penguin
10/02/28 15:10:05 qTqfFliX
ちょっと修正する。
$ find /tmp -type f | sort -f | uniq -i -d --all-repeated=prepend | perl -00 -a -F'\n' -ne '{shift @F; print join("\0",(@F,""));}' | xargs -0 ls -l
大丈夫そうなら最後の ls -l を rm に変更で。
614:login:Penguin
10/02/28 15:41:09 oz3AO1O4
A=""
find . -type f | sort -f \
| while read F;
do
P=`echo "$F" | tr '[A-Z]' '[a-z]'`
Q=`echo "$A" | tr '[A-Z]' '[a-z]'`
if [ "$P" == "$Q" ]
then
echo "${F}を削除"
# eval rm "$F"
fi
A="$F"
done
615:login:Penguin
10/02/28 15:47:27 oz3AO1O4
すまん、evalはなくても動く。
616:login:Penguin
10/02/28 15:59:45 0w7cauqm
>>606 が良ければなんでもいいでしょうに
617:login:Penguin
10/02/28 16:00:23 diBS8T6m
>>614
いかにもシェルスクリプトらしい解決法だね
perl使うほうがメンドイ
618:login:Penguin
10/02/28 16:32:44 qTqfFliX
感心しました。なるほど、うまいですね。
僭越ながら少し手を入れてみました。(sh 対応、外部コマンド実行回数減らす)
#!/bin/sh
A=""
Q=""
find . -type f | sort -f \
| while read F; do
P=`echo "$F" | tr '[:upper:]' '[:lower:]'`
if [ "$P" = "$Q" ]; then
echo "${F}を削除"
# rm "$F"
fi
A="$F"
Q="$P"
done
619:login:Penguin
10/02/28 19:19:20 ZpjvZrys
勉強になります
620:login:Penguin
10/02/28 19:46:12 v9A/VFIk
別ディレクトリになった時 Q="" しなくていいの?
621:login:Penguin
10/02/28 20:01:15 qTqfFliX
>>620
>>609 で楽するためディレクトリの大文字小文字は考えないことにしたんだけど、
d/abc.txt と D/abc.txt を同一視しちゃってるので、本当ならダメ、なんでしょう。
find . -type d するループを外側につけるか、
ディレクトリ名見る if をつければ直せそう。改修頼みます >>620
622:login:Penguin
10/02/28 20:11:12 0w7cauqm
だからそういうのは>>606が決めることだって。勉強になります、じゃなかろうに
623:login:Penguin
10/02/28 20:50:11 v9A/VFIk
#!/bin/sh
A="."
find ./dir -type f | sort -f | \
while read F; do
P=`dirname $F`/`basename $F | tr '[A-Z]' '[a-z]'`
Q=`dirname $A`/`basename $A | tr '[A-Z]' '[a-z]'`
if [ $P = $Q ]; then
echo "rm $F"
fi
A=$F
done
624:login:Penguin
10/02/28 22:25:55 v9A/VFIk
書き直したので貼り直しますね。
#!/bin/sh
B="!"
find . -type f | sort -f | \
while read F; do
T="`dirname $F`/`basename $F | tr '[A-Z]' '[a-z]'`"
if [ $T = $B ]; then
echo "rm $F"
fi
B=$T
done
625:login:Penguin
10/02/28 22:43:51 oz3AO1O4
>>624
スペースを含むディレクトリ作って実行してみ。
626:login:Penguin
10/02/28 23:06:54 v9A/VFIk
Windowsじゃあるまいし。
627:login:Penguin
10/02/28 23:09:17 Z6hm/tn2
空白や日本語を許すかで世代間のギャップが存在するなw
628:login:Penguin
10/02/28 23:11:07 0w7cauqm
用件的にsamba絡みと予想してたけどね。知らんけど
629:login:Penguin
10/02/28 23:13:21 1hHY9Dv5
linuxでフォルダ名に空白入れることはないな、色々面倒だし