シェルスクリプト総合@LINUX Part5
- 1 :1様:2009/04/03(金) 22:17:43 ID:0qFlvOW9
- UNIX板のスレを見ている方も多数おられるかと思いますが、
まあそれはそれとして、BASHウゼーとか言われる心配なく
平和にLINUX的スクリプト談義しましょうよ。
初めての自作スクリプト、自信ないから見てください。な初心者から
トリッキーな技を駆使した作品を披露したい、蘊蓄を語りたい上級者まで
いろいろな人に参加して頂けると嬉しいです。
perlやらPythonやらの話が混ざっても良いんでない?
Part4 : http://pc11.2ch.net/test/read.cgi/linux/1210999497/
Part3 : http://pc11.2ch.net/test/read.cgi/linux/1184077033/
Part2 : http://pc11.2ch.net/test/read.cgi/linux/1154578200/
Part1 : http://pc8.2ch.net/test/read.cgi/linux/1121994321/
>>2-5あたりに色々と。
- 423 :login:Penguin:2009/09/28(月) 13:23:09 ID:RgE5Se+Y
- >>422
凝ったことやりたいならちゃんとした言語使った方がいいんじゃないの。
- 424 :login:Penguin:2009/09/28(月) 14:19:04 ID:I6g/kNjx
- >>422
標準出力の代わりにファイルを利用するだけでいいと思うけれど
何か制限とかあるの?
- 425 :login:Penguin: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:2009/09/29(火) 09:01:16 ID:PNFzix6B
- アレゲな文字列だとなぜ標準入力にしたいのだろう??
- 428 :login:Penguin: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:2009/10/23(金) 00:06:21 ID:fL6bmEfB
- hoge.exe
- 431 :429:2009/10/23(金) 00:07:47 ID:wj32ZQ75
- サンプルとして hoge.exeとしましたが、
実際は引数をとるプログラムであり、そのためにスクリプトを書いています。
- 432 :login:Penguin:2009/10/23(金) 00:08:01 ID:egc7pXKl
- printfでおk
- 433 :EriFWUWPcvxE:2009/10/23(金) 00:26:28 ID:o9S12OWs
- In the case of a clock it is, of course, infinitely unlikely. ,
- 434 :login:Penguin:2009/10/23(金) 01:18:00 ID:lIwBP5a7
- >>429
| と nkf か iconv かなんか使って
改行コードを変換すればいいかと。
- 435 :login:Penguin:2009/10/23(金) 07:31:49 ID:sqWecNL1
- 要するに、
$ echo `ls`
で改行されないと言ってるんじゃないの?
素直に
$ ls
と打てカス じゃ駄目か。
- 436 :login:Penguin:2009/10/23(金) 07:52:35 ID:fL6bmEfB
- >>435
>>431を読むに、ダメなんだろう。
- 437 :login:Penguin:2009/10/23(金) 10:22:31 ID:iTZCWKBJ
- echo "`ls`"
- 438 :veylKBAi: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:2009/10/23(金) 22:40:25 ID:fL6bmEfB
- Yes I like rice ball.
- 440 :login:Penguin: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:2009/11/05(木) 10:53:31 ID:yUF/IyOA
- >実行後にコマンドラインに文字列を入力した状態にするのは
set ?
>$ ./x.sh
>$ abc ←'abc' が入った状態にする
read ?
- 443 :441:2009/11/05(木) 19:29:56 ID:gkVZzLQn
- x.sh が終了した後に、
コマンドラインにキーボードで 'abc' と入力した状態になっている
という意味あいです。
- 444 :login:Penguin:2009/11/05(木) 19:59:20 ID:NZnr/6iR
- それ、もしできるのなら
セキュリティ的にマズーくないか?
- 445 :login:Penguin: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:2009/11/06(金) 12:03:55 ID:eRT3M+Ha
- >>446
sed 's/^\./0./'
- 448 :441:2009/11/06(金) 19:41:15 ID:/t9QHrwg
- >445
ctrl-r で、history のリストから検索して、
ctrl-e とすると、実行ではなく編集になりますよね、
あれがやりたかったんです。
ただ、その検索の部分を(例えば)grep で検索したり、
選ぶ部分をメニュー形式というか対話型にしたり、(その他もろもろ)
結果を実行ではなく、編集にしたい。
なので、シェルスクリプトとかで実行した結果をコマンドラインに
入れられないかなと思ったんです。
ちと無理だったかな。
>>442,444,445 どうもです。
- 449 :login:Penguin:2009/11/06(金) 19:45:45 ID:q+Z8sAfI
- eshell使えば
- 450 :login:Penguin:2009/11/06(金) 19:46:49 ID:eRT3M+Ha
- >>448
コマンドラインに戻す必要あるのかな。
そのアプリの中で編集させて実行しちゃえば?
- 451 :login:Penguin: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:2009/11/06(金) 21:57:06 ID:ebfIAKEi
- 最初に
HISTFILE=/tmp/.bash_history
とかして一時ファイルにしたほうがよいかも
- 453 :login:Penguin:2009/11/06(金) 22:03:08 ID:CfRBFuVC
- 質問。環境はbashです。
URLをテキストファイルに溜め込むスクリプトを作りたくて
弄りはじめたんですが、詰まってしまったので‥ 他力本願!
希望する結果:
$echo ${URL} > url.txt
$cat url.txt
http://aaaa.co.jp
http://bbbbaaa.com
としたい。
#!/bin/bash
NUM=0
while [ ${NUM} -lt 5 ]
do
URL=`zenity --entry "$1"`
NUM=`expr ${NUM} + 1`
done
URLに複数の文字列を溜め込みたいのですがどうするべきでしょうか?
ググってみると配列?というやり方があるようなのですが、まだ理解できません
教えてください。
- 454 :login:Penguin: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: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: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:2009/11/07(土) 01:39:27 ID:CteOVE+c
- >>456
なるほど。わざとスペースを入れて試してみました。
単純に5回繰り返すつもりなので、アドバイス通りにfor文でもやってみたいとおもいます。
>>454 >>456
どうもありがとうございました。
- 458 :login:Penguin:2009/11/11(水) 00:08:25 ID:ISVpZi0Z
- bashの配列なのですが
# ls
お宝動画 有名女優の秘部大百科
というファイルがあって
files=(`ls`)
echo "${files[0]}"
とすると「お宝動画」しか表示されませんよね
これをちゃんとしたファイル名、空白を含む値を代入するには
どうすればいいのでしょうか?
- 459 :login:Penguin:2009/11/11(水) 10:05:24 ID:FBEaA7LT
- >>458
IFSがデフォで空白・タブ・改行になってると思うので
IFSから空白を除く
- 460 :login:Penguin:2009/11/11(水) 13:32:06 ID:OlX5y2f2
- そのファイル名の部分をもっと当たり障りの無いファイル名に変えて書けよww
- 461 :login:Penguin: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:2009/11/12(木) 00:26:46 ID:VaDsQREP
- 教授は外出中です
- 463 :login:Penguin:2009/11/12(木) 00:42:44 ID:MDFmvAz9
- バッハねぇ。
- 464 :login:Penguin: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: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: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: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:2009/11/13(金) 15:23:15 ID:mmBbeV5d
- 区切りたいなら _ 使え。
- 472 :login:Penguin:2009/11/13(金) 20:07:30 ID:csbg7Gm/
- >>466
>>5
>・思い通りに動かないときは、まずは sh -x でトレースしましょう。
134 KB
[ 2ちゃんねる 3億PV/日をささえる レンタルサーバー \877/2TB/100Mbps]
■ おすすめ2ちゃんねる 開発中。。。 by FOX ★
このスレを見ている人はこんなスレも見ています。(ver 0.20)
Shade 相談/質問スレッド Ver.25.0 [CG]
エフェクターケースの中身を見せ合うスレ23 [楽器・作曲]
新着レスの表示
掲示板に戻る
全部
前100
次100
最新50
read.cgi ver 05.0.7.8 2008/11/13 アクチョン仮面 ★
FOX ★ DSO(Dynamic Shared Object)