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

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

383 名前:login:Penguin [2009/09/10(木) 23:41:36 ID:kkfd/kxq]
コマンドじゃねーや。間違い。

ところで全角スペースがあるのが気になるのだが、そこは大丈夫なのか?

384 名前:login:Penguin mailto:sage [2009/09/11(金) 00:14:43 ID:r5Zq4SIa]
>>382
> 実は [ ] はコマンドだから、
[ がコマンド。(bash の内部コマンド)

> こう説明すれば理解できるだろうか。
かえって混乱するんじゃね。



385 名前:login:Penguin mailto:sage [2009/09/11(金) 00:53:31 ID:tUDxxMlL]
[ は内部コマンドではない

386 名前:login:Penguin mailto:sage [2009/09/11(金) 00:55:26 ID:sW2bvbaU]
>>385
help [

387 名前:login:Penguin mailto:sage [2009/09/11(金) 01:18:00 ID:1ovlFoMD]
cshです。

a.cshの実行中にb.cshを実行したいです。
で、a.cshで宣言した変数をb.cshでも引き継ぎたいのです。
さらに、b.cshに引数を渡して実行したいのです。

a.cshの実行中に
csh b.csh だと引数をつけて実行できますが、変数が引き継がれないようです。
source b.cshだと変数は引き継がれますが、引数をつけて実行できません。

どうしたらいいのん。

388 名前:login:Penguin mailto:sage [2009/09/11(金) 05:26:58 ID:bKplMqH/]
/usr/bin/[の方も、昔は/usr/bin/testへのハードリンクだったが
今は違うんだな。やっぱり日々勉強しないと…

389 名前:login:Penguin mailto:sage [2009/09/11(金) 07:46:22 ID:r5Zq4SIa]
>>385
type [

390 名前:login:Penguin mailto:sage [2009/09/11(金) 08:15:42 ID: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 [2009/09/14(月) 22:11:59 ID:VDeHYP1G]
#!/bin/bash
trap "logoutfunc_ctrl; logout" 1 2 3 15

最初の2行にこう記述してるんですが、logoutせずにプロンプト画面に戻る方法がありますか?
bashにこのシェルを書いているのでログイン後は必ずこのシェルが立ち上がるようになってます。
このシェルを実行するのは特定のユーザーのみで、他にこのシェルがあるサーバーにログインは出来ません。
(他のユーザーはrootを除いて全てログイン出来ないようにしてます)
プロンプト画面には触らせないようにしたいのですが、これでプロンプトに抜けれるという人がいるので
どういった方法があるのか教えていただけないでしょうか。


392 名前:login:Penguin mailto:sage [2009/09/14(月) 22:59:21 ID:SeJGwizk]
なんかよくわからんけど
ログインシェルを変えちゃったら。

393 名前:login:Penguin [2009/09/14(月) 23:18:36 ID:DAW4cbiO]
trapでlogoutしてるのにそんなこと出来るの?
おれも悪さされないようにtrapでlogoutしてるからもしそういう抜け道あるなら対策したいな。

394 名前:login:Penguin mailto:sage [2009/09/15(火) 23:31:19 ID:XlHfxREn]
>>391
Ctrl+Z?



395 名前:login:Penguin mailto:sage [2009/09/16(水) 01:29:49 ID:N6PYBStw]
SIGTSTPもそうだけど、普通にbash起動できたりしないの?

396 名前:login:Penguin mailto:sage [2009/09/17(木) 16:40:19 ID: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 [2009/09/17(木) 16:45:22 ID:HEpWOKWA]
ここでも読んどけ

業務でラクするためのUNIXテクニック集
ttp://codezine.jp/article/corner/211

398 名前:login:Penguin mailto:sage [2009/09/17(木) 16:53:55 ID:zpBnmmE6]
>>396
とりあえずecho $OPTして良く考える。

でも目的からいって find /etc /var ... でいいと思うんだがなんでそんなめんどくさいことするの?

399 名前:login:Penguin mailto:sage [2009/09/17(木) 16:57:51 ID:ih+TQz/f]
次のようなワンライナーが考えられる、って書いてあるし
宿題じゃないの

400 名前:login:Penguin [2009/09/21(月) 16:40:00 ID:nYMA5TsQ]
>>396の方法の是非は置いといて、
一気に難しい事やろうとしてダメな場合にそのままデバッグしようとする姿勢からして間違ってるのね
最も確実にできる単純な所からOKなのを確認しつつ、少しずつ複雑化していけばいいのにね
単純化もせずにここにポストしちゃうのもダメなのね

401 名前:login:Penguin mailto:sage [2009/09/22(火) 01:02:32 ID:CsobNaX3]
>>396
> エラーになる原因

> OPT=略 -prune -o
-prune と -o は、OPT= って式の右辺とは認識されていない。

402 名前:login:Penguin [2009/09/22(火) 21:32:32 ID:tUDMNFi9]
WinでSJISだろSJISって言った人は誰ですか
無知はレスしなくていいと思うぞ

403 名前:login:Penguin mailto:sage [2009/09/24(木) 23:42:28 ID:SAfgo/2/]
shでプロセス置換をすることはできますか?

404 名前:login:Penguin mailto:sage [2009/09/25(金) 07:39:03 ID:DPMjFFBq]
exec ?



405 名前:login:Penguin mailto:sage [2009/09/25(金) 08:28:22 ID:Kq0dBVoG]
bashの<(hoge)のようなやつです

406 名前:login:Penguin mailto:sage [2009/09/25(金) 09:10:47 ID:fabAV8W5]
普通のshにはないんじゃないかな。実はshという名前でも実体はbashという
こともよくあるが。ないときはmkfifo使えばなんとかなりそう。

407 名前:login:Penguin mailto:sage [2009/09/25(金) 09:28:37 ID:Kq0dBVoG]
>>406
mkfifoを使ってみます。
ありがとうございます。

408 名前:login:Penguin mailto:sage [2009/09/25(金) 09:49:07 ID:7/BCzuXv]
>>403
sh って、どの sh?

409 名前:login:Penguin mailto:sage [2009/09/25(金) 19:55:47 ID:Kq0dBVoG]
>>408
shって何種類もあるんですか?

410 名前:login:Penguin mailto:sage [2009/09/26(土) 16:08:50 ID:Jy0DLp0d]
>>409
約2000種類くらいある。

411 名前:login:Penguin mailto:sage [2009/09/26(土) 16:27:53 ID:XBVVzvrd]
一行目の
#!/bin/sh
みたいな表記ってなんていうんだけ?

412 名前:login:Penguin mailto:sage [2009/09/26(土) 16:29:13 ID:Jy0DLp0d]
>>411
マジックナンバー

413 名前:login:Penguin mailto:sage [2009/09/26(土) 16:58:06 ID:v336ZdvP]
ホラ吹きはやめなはれ

414 名前:login:Penguin mailto:sage [2009/09/26(土) 17:36:19 ID:pX1JKn/Q]
shebang



415 名前:login:Penguin mailto:sage [2009/09/27(日) 18:09:06 ID:251MLAqQ]
あるフォルダの中のフォルダのうち中身が空のフォルダをまとめて削除するにはどうすればいいですかね?

416 名前:login:Penguin mailto:sage [2009/09/27(日) 18:14:24 ID:Co+mxy4N]
find あるフォルダ -type d -empty かな

417 名前:login:Penguin mailto:sage [2009/09/27(日) 18:17:18 ID:bShqvf/m]
find . -type d -exec rmdir --ignore-fail-on-nonemytp -p {} \;

418 名前:login:Penguin [2009/09/27(日) 18:36:06 ID:251MLAqQ]
>>417
rmdir: failed to remove `.': 無効な引数です
とのことでした。。

>>416
rm -r `find . -type d -empty`としたら期待通りの動作をしてくれました!

有難うございました。

419 名前:login:Penguin mailto:sage [2009/09/27(日) 18:44:30 ID:ZlHSYQ4N]
何も言うまい

420 名前:login:Penguin [2009/09/27(日) 21:31:53 ID:qHK4F1Gh]
ストリームから特定のバイト数分だけ読み出すことは出来ますか?
例えば標準入力の先頭1024バイトだけ読みたいのですが、readやらheadでは
できないみたいでつ。

外部の処理系に投げるしかないのでしょうか。

421 名前:login:Penguin [2009/09/27(日) 21:33:25 ID:qHK4F1Gh]
すみません

head -c 1024

で事故解決しました。

422 名前:login:Penguin [2009/09/28(月) 12:47:00 ID:VZAZLgKn]
Bash で並列処理はできますか?

バックグラウンドでプロセスを実行する方法が考えられますが
標準出力を変数に代入できません。

スレッドみたいなものがあればいいのですが。
アドバイスよろしくです。

423 名前:login:Penguin mailto:sage [2009/09/28(月) 13:23:09 ID:RgE5Se+Y]
>>422
凝ったことやりたいならちゃんとした言語使った方がいいんじゃないの。

424 名前:login:Penguin mailto:sage [2009/09/28(月) 14:19:04 ID:I6g/kNjx]
>>422
標準出力の代わりにファイルを利用するだけでいいと思うけれど
何か制限とかあるの?



425 名前:login:Penguin mailto:sage [2009/09/28(月) 22:19:09 ID:mq5nI+Gq]
>>422
waitとかって使えなかったっけ?

426 名前:422です [2009/09/28(月) 22:48:49 ID:ZC7KG7rU]
>>424
それも考えたのですが、ちょっとアレゲな文字列を渡したいので
なるべく標準入力経由で流し込めたらいいなーと。

>>425
waitするのはいいのですが、
s=`sleep 10; echo hi` &

これだと、確かにバックグラウンドで実行されますが、出力が変数sに代入されません。

とりあえずtmpfile作ってお茶を濁すか、
スレッドをサポートしている他の言語で書いてみます
ありがとうございました。

427 名前:login:Penguin mailto:sage [2009/09/29(火) 09:01:16 ID:PNFzix6B]
アレゲな文字列だとなぜ標準入力にしたいのだろう??

428 名前:login:Penguin mailto:sage [2009/09/29(火) 22:03:38 ID:to/uYF9s]
fifoが使えれば便利なんだけどな。

429 名前:login:Penguin [2009/10/23(金) 00:04:27 ID:wj32ZQ75]
bash@sygwinです。

echo -e `hoge.exe`
みたいなスクリプトを書いて実行した場合、
hoge.exeの出力(標準出力へ出力)が改行されないのですが、
開業して表示されるようにするにはどうしたらいいですか?

430 名前:login:Penguin mailto:sage [2009/10/23(金) 00:06:21 ID:fL6bmEfB]
hoge.exe


431 名前:429 mailto:sage [2009/10/23(金) 00:07:47 ID:wj32ZQ75]
サンプルとして hoge.exeとしましたが、
実際は引数をとるプログラムであり、そのためにスクリプトを書いています。

432 名前:login:Penguin mailto:sage [2009/10/23(金) 00:08:01 ID:egc7pXKl]
printfでおk

433 名前:EriFWUWPcvxE mailto:bdhcd0a0.@gmail.com [2009/10/23(金) 00:26:28 ID:o9S12OWs]
In the case of a clock it is, of course, infinitely unlikely. ,

434 名前:login:Penguin mailto:sage [2009/10/23(金) 01:18:00 ID:lIwBP5a7]
>>429
| と nkf か iconv かなんか使って
改行コードを変換すればいいかと。



435 名前:login:Penguin mailto:sage [2009/10/23(金) 07:31:49 ID:sqWecNL1]
要するに、
$ echo `ls`
で改行されないと言ってるんじゃないの?
素直に
$ ls
と打てカス じゃ駄目か。

436 名前:login:Penguin mailto:sage [2009/10/23(金) 07:52:35 ID:fL6bmEfB]
>>435
>>431を読むに、ダメなんだろう。

437 名前:login:Penguin mailto:sage [2009/10/23(金) 10:22:31 ID:iTZCWKBJ]
echo "`ls`"

438 名前:veylKBAi mailto:cb1353an.@gmail.com [2009/10/23(金) 22:03:01 ID:t9W+SBEv]
And you get to travel to interesting places and talk to interesting people about interesting questions. ,

439 名前:login:Penguin mailto:sage [2009/10/23(金) 22:40:25 ID:fL6bmEfB]
Yes I like rice ball.


440 名前:login:Penguin mailto:sage [2009/10/25(日) 05:44:06 ID:nuWGLSpK]
This is a Tom

441 名前:login:Penguin [2009/11/04(水) 22:54:27 ID:MYi0pRqJ]
Bash シェルスクリプトで、
実行後にコマンドラインに文字列を入力した状態にするのは
可能ですか?

$ ./x.sh
$ abc ←'abc' が入った状態にする

シェルスクリプトでなくて、C とかでもよいですが。


442 名前:login:Penguin mailto:sage [2009/11/05(木) 10:53:31 ID:yUF/IyOA]
>実行後にコマンドラインに文字列を入力した状態にするのは
set ?

>$ ./x.sh
>$ abc ←'abc' が入った状態にする
read ?

443 名前:441 mailto:sage [2009/11/05(木) 19:29:56 ID:gkVZzLQn]
x.sh が終了した後に、
コマンドラインにキーボードで 'abc' と入力した状態になっている
という意味あいです。


444 名前:login:Penguin mailto:sage [2009/11/05(木) 19:59:20 ID:NZnr/6iR]
それ、もしできるのなら
セキュリティ的にマズーくないか?



445 名前:login:Penguin mailto:sage [2009/11/06(金) 00:09:34 ID:eRT3M+Ha]
>>443
なんでそんなことしたいの?

446 名前:login:Penguin [2009/11/06(金) 08:33:57 ID:mW6ePEE5]
小数点第三位くらいの数値を1000で割りたいのですが、bcで計算すると0.123456が.123456にされてしまって正しくrrdtoolに値を渡せなくて困っています。
どなたか対策をご存知の方がいらっしゃいましたらご教授頂けないでしょうか。


447 名前:login:Penguin mailto:sage [2009/11/06(金) 12:03:55 ID:eRT3M+Ha]
>>446
sed 's/^\./0./'

448 名前:441 mailto:sage [2009/11/06(金) 19:41:15 ID:/t9QHrwg]
>445
ctrl-r で、history のリストから検索して、
ctrl-e とすると、実行ではなく編集になりますよね、
あれがやりたかったんです。

ただ、その検索の部分を(例えば)grep で検索したり、
選ぶ部分をメニュー形式というか対話型にしたり、(その他もろもろ)
結果を実行ではなく、編集にしたい。
なので、シェルスクリプトとかで実行した結果をコマンドラインに
入れられないかなと思ったんです。
ちと無理だったかな。

>>442,444,445 どうもです。

449 名前:login:Penguin mailto:sage [2009/11/06(金) 19:45:45 ID:q+Z8sAfI]
eshell使えば

450 名前:login:Penguin mailto:sage [2009/11/06(金) 19:46:49 ID:eRT3M+Ha]
>>448
コマンドラインに戻す必要あるのかな。
そのアプリの中で編集させて実行しちゃえば?

451 名前:login:Penguin mailto:sage [2009/11/06(金) 21:42:41 ID: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 mailto:sage [2009/11/06(金) 21:57:06 ID:ebfIAKEi]
最初に
HISTFILE=/tmp/.bash_history
とかして一時ファイルにしたほうがよいかも

453 名前:login:Penguin mailto:sage [2009/11/06(金) 22:03:08 ID:CfRBFuVC]
質問。環境はbashです。

URLをテキストファイルに溜め込むスクリプトを作りたくて
弄りはじめたんですが、詰まってしまったので‥ 他力本願!

希望する結果: 
$echo ${URL} > url.txt

$cat url.txt

aaaa.co.jp
bbbbaaa.com
としたい。

#!/bin/bash
NUM=0
while [ ${NUM} -lt 5 ]
do
URL=`zenity --entry "$1"`
NUM=`expr ${NUM} + 1`
done

URLに複数の文字列を溜め込みたいのですがどうするべきでしょうか?
ググってみると配列?というやり方があるようなのですが、まだ理解できません

教えてください。

454 名前:login:Penguin mailto:sage [2009/11/06(金) 22:17:20 ID: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 mailto:sage [2009/11/06(金) 23:02:57 ID: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 mailto:sage [2009/11/07(土) 00:24:25 ID: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 mailto:sage [2009/11/07(土) 01:39:27 ID:CteOVE+c]
>>456
なるほど。わざとスペースを入れて試してみました。
単純に5回繰り返すつもりなので、アドバイス通りにfor文でもやってみたいとおもいます。

>>454 >>456
どうもありがとうございました。

458 名前:login:Penguin mailto:sage [2009/11/11(水) 00:08:25 ID:ISVpZi0Z]
bashの配列なのですが

# ls
お宝動画 有名女優の秘部大百科

というファイルがあって

files=(`ls`)
echo "${files[0]}"

とすると「お宝動画」しか表示されませんよね

これをちゃんとしたファイル名、空白を含む値を代入するには
どうすればいいのでしょうか?




459 名前:login:Penguin mailto:sage [2009/11/11(水) 10:05:24 ID:FBEaA7LT]
>>458
IFSがデフォで空白・タブ・改行になってると思うので
IFSから空白を除く




460 名前:login:Penguin mailto:sage [2009/11/11(水) 13:32:06 ID:OlX5y2f2]
そのファイル名の部分をもっと当たり障りの無いファイル名に変えて書けよww

461 名前:login:Penguin mailto:sage [2009/11/11(水) 19:26:47 ID: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 mailto:sage [2009/11/12(木) 00:26:46 ID:VaDsQREP]
教授は外出中です

463 名前:login:Penguin mailto:sage [2009/11/12(木) 00:42:44 ID:MDFmvAz9]
バッハねぇ。

464 名前:login:Penguin mailto:sage [2009/11/12(木) 23:09:37 ID: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 mailto:sage [2009/11/13(金) 10:24:58 ID:WdvDAtlm]
>>464
有難う御座います。
やってみます!

466 名前:login:Penguin [2009/11/13(金) 11:55:23 ID:YoLOfEvP]
test=/var/www/.htaccess-log
という風にしても-logのみが認識されているようでうまく機能しません。
最初に.がある場合のファイルを変数に入れるにはどうすればいいのでしょうか?


467 名前:login:Penguin mailto:sage [2009/11/13(金) 11:58:11 ID:U8ZA18uC]
$ test=/var/www/.htaccess-log
$ echo $test
/var/www/.htaccess-log
$

認識してるが。

468 名前:466 [2009/11/13(金) 12:09:11 ID:YoLOfEvP]
>>467
すいません。
testの部分がtest-logでした。
$ test-log=/var/www/.htaccess-log
$ echo $test-log
-log
となります。
申し訳ないです。

469 名前:login:Penguin mailto:sage [2009/11/13(金) 12:33:52 ID:veh/HZx5]
>>468
変数名に-(ハイフン)は使えないと思ったが

470 名前:466 [2009/11/13(金) 12:45:36 ID:YoLOfEvP]
>>469
すいません。
そうなんですか。
最近WEB関連からシェル叩くことがあって作ってたんですがシェルでは変数にハイフン使えないんですね。
修正したらうまくいきました。
ありがとうございます。

471 名前:login:Penguin mailto:sage [2009/11/13(金) 15:23:15 ID:mmBbeV5d]
区切りたいなら _ 使え。

472 名前:login:Penguin mailto:sage [2009/11/13(金) 20:07:30 ID:csbg7Gm/]
>>466

>>5
>・思い通りに動かないときは、まずは sh -x でトレースしましょう。

473 名前:login:Penguin mailto:sage [2009/12/07(月) 12:06:33 ID:XdJnANaN]
[ string ] と、[ -n string ] の違いについてお尋ねします。
[ $(cat /dev/null) ] が偽になるのに対して、[ -n $(cat /dev/null) ] は真になってしまうのですが、何が違うのでしょうか。
[ -z $(cat /dev/null) ] は真になるので、なんだか -nだけが仲間外れな気がします。


474 名前:login:Penguin mailto:sage [2009/12/07(月) 13:25:47 ID:OGpjrFHy]
>>473
それだと $(cat /dev/null) が消えて引き数がなくなって
[ ]
[ -n ]
[ -z ]
になる。
なんでそういう挙動になるかは bash の test.c でも読んでもらうとして、
その挙動を避けるには
[ "" ]
[ -n "" ]
[ -z "" ]
にすればいい。



475 名前:473 mailto:sage [2009/12/07(月) 13:46:33 ID:5UzhKh29]
>>474
なるほど納得です。
そう言えば変数が空文字列になってしまう場合を考慮してクォートしろと聞いた記憶があるような気がします。
素早いお返事ありがとうございました。ソースもあとで読んでおきます。


476 名前:login:Penguin [2009/12/13(日) 00:31:23 ID:h59G/AZL]
よくダウンロードとかすると何%まで完了してるかみたいなのを
動的に出力するのってどうやんの?






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

前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