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

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]
よくダウンロードとかすると何%まで完了してるかみたいなのを
動的に出力するのってどうやんの?

477 名前:login:Penguin mailto:sage [2009/12/13(日) 01:45:44 ID:k2yGj3y5]
普通に wget でいいんじゃない?

478 名前:476 [2009/12/13(日) 02:23:19 ID:h59G/AZL]
>>477
ダウンロードに限らず
yumとかbuildするときに%を示す数値が動的に変わっていくじゃないですか。
あれ、どうやって実装してんのかなぁと。


誰かわかる?

479 名前:login:Penguin mailto:sage [2009/12/13(日) 02:27:41 ID:/qP8xinl]
yumってpythonだっけか
そういうライブラリがあるんでないの

シェルスクリプトでやりたいならこういうのがある
www.theiling.de/projects/bar.html

480 名前:login:Penguin mailto:sage [2009/12/13(日) 03:38:56 ID:s0ebrxv6]
>>478
バックスペースを然るべき回数売って表示し直し

481 名前:login:Penguin mailto:sage [2009/12/13(日) 11:14:43 ID:45+rg1Ww]
画面制御の話題だったの?
このスレ的には tput あたりでやるのが正しいのだろうか。

482 名前:login:Penguin mailto:sage [2009/12/13(日) 11:23:29 ID:1bGElD/p]
>>478
$ man console_codes

483 名前:login:Penguin mailto:sage [2009/12/13(日) 11:50:06 ID:k2yGj3y5]
このスレ的には dialog とか whiptail じゃないの。

484 名前:login:Penguin mailto:sage [2009/12/13(日) 18:57:54 ID:7EV0TAof]
普通の文章を書いた平文テキストをxtermに関連付けして開くと
実行権もないのにxtermがいくつも開いてフリーズします。

なぜですか?



485 名前:login:Penguin mailto:sage [2009/12/13(日) 19:25:45 ID:VEJMKGLd]
「関連付けして開く」ってどういう概念?

486 名前:login:Penguin mailto:sage [2009/12/13(日) 19:31:32 ID:7EV0TAof]
普通は表示とか端末で実行とか聞かれるので、右クリメニューに入れました

487 名前:login:Penguin mailto:sage [2009/12/13(日) 19:38:48 ID:8kXkcLfR]
Ubuntu使ってるの?

488 名前:login:Penguin mailto:sage [2009/12/13(日) 22:54:17 ID:u+Xt7Oyd]
>>486
ごめん。尋ねておいて悪いけど、
「関連付けして開く」や「右クリメニューに入れ」るってのが判らない。
なので助言できない。

489 名前:login:Penguin mailto:sage [2009/12/13(日) 22:58:13 ID:X8Bwu1bm]
>>484
Windowsの関連づけの感覚?
GNOMEであれば、プロパティから開くアプリ指定してるとかってことか?

試しにユーザーを新しいの作って再現するかどうか試してみたら?
もし再現できなければ ~/.gconf* ~/.gnome* とか退避して削除してログインしなおしてみるとか。

内容からして、くだ質のほうがアドバイスもらえると思うよ。

490 名前:login:Penguin mailto:sage [2009/12/13(日) 23:54:09 ID:3DX9cdGt]
>>484
「xterm を起動できるかどうか」は
「xterm を実行する権限があるかどうか」で決まることだから、
「平文テキストを実行する権限」とは関係ない。

$ xterm /tmp/hoge.txt とかやると、
No absolute path found for shell: /tmp/hoge.txt
とかいったメッセージは出るけれど、xterm が起動する。

関連付け はよくわからないけれど、
テキストファイルをまとめて開こうとすれば、
ファイルの数と同じだけ xterm が一気に起動する ってことは想像できる。
CPUとか メモリ/swap とかが足りなければ、フリーズみたいな状況になるかもしれない。

491 名前:login:Penguin mailto:sage [2009/12/14(月) 00:20:50 ID:SmNokk3G]
>>484
シェルスクリプトの話じゃないでしょう。
こっちで。
くだらねえ質問はここに書き込め! Part 179
pc11.2ch.net/test/read.cgi/linux/1257056891/

自分の環境もちゃんと書くこと。
www12.atwiki.jp/linux2ch/pages/5.html#id_d2fb2105

492 名前:login:Penguin [2010/01/05(火) 20:34:00 ID: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 mailto:sage [2010/01/05(火) 20:45:01 ID:kbriKfoG]
>>492
emasaka.blog65.fc2.com/blog-entry-379.html

494 名前:login:Penguin mailto:sage [2010/01/05(火) 20:48:20 ID:nuI9c99Q]
>>493
すごいものがあるんですね。
ありがとうございました。



495 名前:login:Penguin mailto:sage [2010/01/07(木) 18:16:37 ID:wAYEJTZp]
テキストファイルで、指定した文字列を含む最初の行を開始位置とし、先とは別の
文字列を含む行が見つかるまでを削除するにはどうすれば良いでしょうか?

496 名前:login:Penguin mailto:sage [2010/01/07(木) 18:20:32 ID:D02SG01g]
>>495
sed '/xxx/,/yyy/d'

497 名前:login:Penguin mailto:sage [2010/01/08(金) 10:03:28 ID:KgmcRvHm]
>>495
ありがとうございます。
sedというのは強力なんですね。

498 名前:login:Penguin mailto:sage [2010/01/08(金) 12:52:11 ID:zGQxNXrb]
>>497
これで「強力」ってどういう意味?

499 名前:login:Penguin mailto:sage [2010/01/08(金) 16:04:10 ID:/auv4CfE]
>>498
文字/行削除程度しか知らない初心者にとっては、超強力。

500 名前:497 mailto:sage [2010/01/08(金) 23:16:45 ID:KgmcRvHm]
shの変数を>>496の/xxx/に使いたい場合についてお伺いします。

path=/aaa/bbb
sed "/$path/,/yyy/d"

の様にしても$pathが展開された時点で区切り文字がエスケープされておらず上手く
いきません。
前処理が必要なのか、それともスマートな方法が用意されているのでしょうか?

501 名前:login:Penguin mailto:sage [2010/01/08(金) 23:33:25 ID:awvr0YeL]
ファイル名はNUL文字以外なら全て使えるんだよね。
ということは、前処理の段階で区切り文字をエスケープする必要があるのかな。

502 名前:497 mailto:sage [2010/01/08(金) 23:38:17 ID:KgmcRvHm]
やはり自前で前処理するわけですね。
sedで簡単に出来そうですね。

503 名前:497 mailto:sage [2010/01/08(金) 23:51:05 ID:KgmcRvHm]
下でできました。

#!/bin/sh -x

var=/aaa/bbb
esc=$(echo $var | sed -e 's/\//\\\//g')

$()の代わりに``を使うとパイプがあるせいか上手くいきませんでした。
実際はどうなのでしょう?
教えて頂けると嬉しいです。

504 名前:login:Penguin mailto:sage [2010/01/08(金) 23:52:38 ID:r+fu5lRJ]
sed "/\\$path/,/yyy/d" はどうなの?



505 名前:login:Penguin mailto:sage [2010/01/08(金) 23:53:13 ID:aqeo86VH]
区切り文字を変えるんだよ!

sed '\@foo@,\@bar@d'

506 名前:497 mailto:sage [2010/01/09(土) 00:07:36 ID:WfSq+WCG]
>>504
それだと$pathの先頭にのみ区切り文字がある場合にしか対応していないと思います。

>>505
そういうときに使うのですね。
なるほど。
ありがとうございました。

507 名前:login:Penguin mailto:sage [2010/01/10(日) 12:29:36 ID:jRBDc3XG]
com1 | com2 | com3

の様なとき、どこかでエラーが起こった場合に、それを知ることはできないでしょうか?
bash3.0以降だと${PIPESTATUS[@]}で可能なようですがshでなんとかならないかと。

508 名前:login:Penguin mailto:sage [2010/01/10(日) 12:37:23 ID:E5a795Pl]
subshellを使って、
(( com1 判定)| com2 判定 )| com3
みたいな事を見た憶えがするけど、定かでない。

509 名前:初心者 mailto:zzhong33@yahoo.co.jp [2010/01/13(水) 23:30:52 ID: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 mailto:sage [2010/01/13(水) 23:53:55 ID:rEuhDc/f]
>>509
機能知らない分際で答えるとさ
単純に呼ぶんだからさ
source "$path/script_file.sh" "$path/script_file.sh"
とか引数として渡してecho $1とかしても
できちゃったりはするね

511 名前:login:Penguin mailto:sage [2010/01/13(水) 23:59:57 ID:rEuhDc/f]
期待結果は/path/to/だったかorz
ならsource "$path/script_file.sh" "$path"
でまぁできるといえばできてるけど

512 名前:login:Penguin mailto:sage [2010/01/14(木) 00:01:40 ID:4xSyV+UX]
/が抜けてたねorz

513 名前:login:Penguin mailto:sage [2010/01/14(木) 03:10:55 ID:4xSyV+UX]
>>507
気になったので書いてみた
>>508氏が言ってるようにもっと楽にできるんだろうけど
ちなみに頭悪いので間違ってる可能性ありと
使い物になってないと思うから 一応動いてるかも程度

514 名前:login:Penguin mailto:sage [2010/01/14(木) 03:12:28 ID: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 mailto:sage [2010/01/14(木) 03:15:58 ID: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 mailto:sage [2010/01/14(木) 17:27:09 ID:FVM4x3d9]
sed -e '$-3,$d' file
とすると
sed: -e expression #1, char 2: unknown command: `-'
というエラーがでます。

versionは4.1.5ですが上記の使い方間違ってますか?

517 名前:login:Penguin mailto:sage [2010/01/14(木) 17:55:26 ID:EAAIjJ3h]
vi じゃないんだからそんな指定できないよ


518 名前:login:Penguin mailto:sage [2010/01/14(木) 22:28:16 ID:dyjWaACs]
>>507
エラーが起こったかどうか *見えればいい* ってだけならこんなやりかたも。

(com1 ; echo $?>/tmp/test.log) | (com2 ; echo $?>>/tmp/test.log) | 略
(com1 ; xmessage com1:$?&) | (com2 ; xmessage com2:$?&) | 略

519 名前:login:Penguin mailto:sage [2010/01/15(金) 09:27:35 ID:vHlv+w15]
>>516
つhead -n -4 file

520 名前:login:Penguin mailto:sage [2010/01/15(金) 10:37:34 ID:0e3bcUwp]
>>519
-nの値に負の数を与えられるんですね。

521 名前:login:Penguin mailto:sage [2010/01/15(金) 11:44:19 ID:exz65txq]
ダブルクォーテーションで囲まれた文字列を抜き出すってどうやればいいんだ?
cutでもexprでも俺には無理だった、絶対サクッとできるはずなのに悔しすぎる…

522 名前:login:Penguin mailto:sage [2010/01/15(金) 12:29:58 ID:n61dnfY7]
grep -o '"[^"]*"'

523 名前:login:Penguin mailto:sage [2010/01/15(金) 13:14:40 ID:exz65txq]
>>522
今日一日崇めさせてくれ

524 名前:login:Penguin mailto:sage [2010/01/15(金) 20:34:53 ID:cwTkNqT3]
1日限定かい。



525 名前:login:Penguin mailto:sage [2010/02/07(日) 15:35:53 ID:lbKDrfi6]
$ df -h /tmp
Filesystem Size Used Avail Use% マウント位置
tempfs 512M 89M 424M 18% /tmp

の%の前の数字(ここでは18)だけ取り出したいんだけど、どうすればよいですか?

526 名前:login:Penguin mailto:sage [2010/02/07(日) 15:58:04 ID:vkq5/P4Z]
awk使う

527 名前:login:Penguin mailto:sage [2010/02/07(日) 16:03:00 ID:U7v7s3zM]
とても安直な方法なので最適解には程遠いと思いますが

df -P /tmp | grep '/tmp$' | awk '{print $5;}' | sed 's/%$//'

528 名前:login:Penguin mailto:sage [2010/02/07(日) 16:06:14 ID:lbKDrfi6]
>>526,527
ありがとう。


529 名前:526 mailto:sage [2010/02/07(日) 19:06:47 ID:dchTEc3Z]
>>527
おまwww

df -h /tmp | awk '/\/tmp/ { print gensub("%", "", "", $5) }'

530 名前:login:Penguin mailto:sage [2010/02/07(日) 19:16:50 ID:U7v7s3zM]
いやそれくらい知ってる

531 名前:login:Penguin mailto:sage [2010/02/07(日) 19:30:22 ID: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 mailto:sage [2010/02/07(日) 19:32:00 ID:Fd1qGpin]
ああっと。
上の検索コマンドはgrepファミリーでなくても良いですが、perlは駄目です。

533 名前:login:Penguin mailto:sage [2010/02/07(日) 19:58:16 ID:KEZIcPfj]
宿題は自分でやれよ

534 名前:login:Penguin mailto:sage [2010/02/07(日) 21:03:26 ID: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 mailto:sage [2010/02/07(日) 21:24:02 ID:U7v7s3zM]
いろいろ残念な部分があるけど、そこは使う人が直してね

536 名前:login:Penguin mailto:sage [2010/02/07(日) 21:36:26 ID:5ZhdKpPZ]
>>534
んー。やっぱりスクリプト生成みたいになりますか。
私以外の人が考えてもすっきり行かない事が解りました。ありがとうございます。

>>533
この手の宿題を出す学校はあまり無いんじゃないかな。

537 名前:login:Penguin mailto:sage [2010/02/07(日) 21:41:15 ID:U7v7s3zM]
自分でできない部分だけ聞きなよ

538 名前:login:Penguin mailto:sage [2010/02/07(日) 21:51:00 ID:UYJWIskO]
>>536
質問に答えようとしてない奴の発言にはいちいち反応するな。

「教えてくれ」ってやつと「宿題は自分でやれ」ってやつは
「歩み寄る可能性がない」からスルーしたほうがいい。
専ブラ使える環境なら、NGワードに「宿題」って単語を入れておいたほうがいいよ。

539 名前:login:Penguin mailto:sage [2010/02/07(日) 22:05:12 ID:U7v7s3zM]
>>531はいろいろ引っかかる部分があるから正直俺も最初は回答しようかどうか迷ったぞ
返事を聞いて>>538も出てああやっぱりかと思ったし...

と戯言はここまでにしとく

540 名前:login:Penguin mailto:sage [2010/02/07(日) 22:36:33 ID:5ZhdKpPZ]
>>537
>自分でできない部分だけ聞きなよ
すっきりと実現できなかったので尋きました。というか、
往々にしてこの手のことを実現すると車輪の再発明になってしまってる事が多い。
なので、他の人も決定的な車輪を持ちあわせていないという情報はとても大切で、
有難く思っています。

541 名前:login:Penguin mailto:sage [2010/02/07(日) 22:44:49 ID:qrQKR8fu]
典型的なゆとり脳というか
なんでこんな上から目線なんだろ
そういうのは自分で書いたの張ってから言えよ

542 名前:login:Penguin mailto:sage [2010/02/07(日) 22:46:48 ID:U7v7s3zM]
>>540
実現できたなら実現方法そのものを聞く必要はない
実現方法を提示してより良くするにはどこを直せばいいか聞けばいい
他人のコストは格段に違うだろうし、回答も違ったものになる

というかお前>>526だろ?


543 名前:526 mailto:sage [2010/02/07(日) 23:05:32 ID:sirvd3yi]
こらこらw
静観してる俺まで巻き込むなよ

544 名前:login:Penguin mailto:sage [2010/02/07(日) 23:09:51 ID:fkJC7wtF]
>>542
そうですね。その点は気をつけたいと思います。

>というかお前>>526だろ?
いや違う。
むしろ、>>529(526)にしろあなたにしろ"/tmp"をマッチさせている時点で、要求条件から逸脱していると思っている。



545 名前:login:Penguin mailto:sage [2010/02/07(日) 23:30:09 ID:U7v7s3zM]
ID変えながら大変ですね。元に戻せないの?

546 名前:login:Penguin mailto:sage [2010/02/07(日) 23:44:26 ID:sirvd3yi]
どうやって戻すんだよw

547 名前:login:Penguin mailto:sage [2010/02/07(日) 23:49:53 ID:qVmLGOqM]
昼間寝ていたら正規表現使う夢を見た気がする、なぜだ

548 名前:login:Penguin mailto:sage [2010/02/07(日) 23:56:03 ID:U7v7s3zM]
同じIPが取れるまでトライ!(やったことないので同じになるのか知らん)

549 名前:login:Penguin mailto:sage [2010/02/08(月) 06:35:08 ID:wgsJNc2d]
>>548
お前ちょっと黙れ。

550 名前:login:Penguin mailto:sage [2010/02/08(月) 08:30:32 ID:shLyrCGR]
U7v7s3zMが取れるまでトライし続けてるのかなw

551 名前:login:Penguin mailto:sage [2010/02/08(月) 12:19:18 ID:2AE05UQA]
答えてもらっておいて「まあそんなもんだよね」

これはひどい

552 名前:login:Penguin mailto:sage [2010/02/08(月) 17:02:25 ID:h/fx9poh]
複数の数字に,同じ四則演算(+,−,*,/)を繰り返した計算結果を表示するシェルスクリプトを,cshシェルスクリプトで書け。
(基本仕様)
@ コマンドとして実行できる.(シェルコマンドである.)
A 入力した数字を計算できる.
B 入力できる数字の個数は2以上とする.
C 四則演算子(+,−,*,/)を選択,または直接入力して
数字1□数字2□・・・□数字N (□=+ or − or * or /,N≧2)
の計算結果を出力する.
D 四則演算子以外の記号が入力された場合,エラーメッセージを出力する.
(ポイント)
? シェルコマンドにするには,スクリプトの最初に(#!で始まる)おまじないを書く.
? 標準入力から文字列を入力するには $< を用いる.
? コマンドラインに引数を指定した場合は,その引数は変数$argvに格納されている.その各要素を参照するには,$argv[1],$argv[2](または$1,$2)などとする.
? 四則演算には @ コマンドが使用できる.(ただし,整数しか扱えない.)

誰かわかるひとおねがいします(今週中にお願いします!)

553 名前:login:Penguin mailto:sage [2010/02/08(月) 17:05:28 ID:llGt0cFK]
何箇所でマルチしてんだよwww

554 名前:sage [2010/02/08(月) 17:06:29 ID:kDoV0MXx]
宿題は自分でやろうね。



555 名前:login:Penguin mailto:sage [2010/02/08(月) 20:38:54 ID:Wyshj96C]
後から読んで526にワロタ
カワイソスw

556 名前:login:Penguin mailto:sage [2010/02/19(金) 00:14:13 ID:c2ocdmWw]
df -h /tmp | sed 's/.*\([0-9][0-9]*\)%.*/\1/'

557 名前:login:Penguin [2010/02/20(土) 23:34:54 ID: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 mailto:sage [2010/02/20(土) 23:37:36 ID:8qh4FPc7]
>>557
> 誰かわかるひとお願いします
まぁ、Linux使える人ならば、誰でも分かる
"学校" の課題ですわな(w
# "学校" は 大学 でない。

559 名前:login:Penguin mailto:sage [2010/02/20(土) 23:46:16 ID:WE3Utbg7]
シェルスクリプトの課題を出す学校ってあるんだね。
ふつーは、CとかJavaを中心にやるものだと思ってた。

560 名前:login:Penguin [2010/02/21(日) 00:00:05 ID: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 mailto:sage [2010/02/21(日) 00:16:12 ID:FUNRtF1w]
死ねばいいのに

562 名前:login:Penguin mailto:sage [2010/02/21(日) 00:27:29 ID:R8eJDQx8]
何をお願いされているのだろう。アンケートかな?
回答「わかります」


上から2桁目で四捨五入したい(例: 15 -> 20, 312 -> 300, 9432 -> 9000)
どうやるのが一番簡単かな?

563 名前:login:Penguin [2010/02/21(日) 00:39:34 ID:y6fTjKHz]
10を底とした対数とって
1.5*10^1
3.12*10^2
9.432*10^3
仮数部を小数点以下で四捨五入する

564 名前:login:Penguin [2010/02/21(日) 01:05:26 ID:y6fTjKHz]
全然対数じゃないや



565 名前:login:Penguin mailto:sage [2010/02/21(日) 01:20:23 ID:mOFZBUIZ]
>>557
お前UNIX板のシェルスクリプトスレでも宿題は自分でやれって言われてただろ
マジで死ね

566 名前:login:Penguin [2010/02/21(日) 02:00:25 ID: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 mailto:sage [2010/02/21(日) 02:38:10 ID:ymcnTK5S]
>>566
しかし4432613で矛盾が出た。

568 名前:login:Penguin [2010/02/21(日) 08:29:04 ID: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 [2010/02/21(日) 09:26:12 ID: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 [2010/02/21(日) 11:49:45 ID:y6fTjKHz]
アプローチを変えて文字列処理にしてみた
$ echo 4432613 | perl -npe 's/^(\d)(\d)(\d+)/$1+($2>4) . 0 . 0 x length($3)/e;'


571 名前:login:Penguin [2010/02/21(日) 12:23:46 ID:y6fTjKHz]
$ echo 15 | perl -npe 's/^(\d)(\d)(\d*)/$1+($2>4) . 0 . 0 x length($3)/e;'


572 名前:login:Penguin [2010/02/21(日) 13:04:19 ID: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 mailto:sage [2010/02/21(日) 13:09:12 ID:7QPAwQGI]
ん、よくわからんけど……
乙 w

574 名前:562 mailto:sage [2010/02/21(日) 19:12:39 ID:R8eJDQx8]
なんかすごいものがw

>>568
>入力4432613での期待値は、
>上から2桁目の"4"で四捨五入して、4000000 でよろし?
よろしです。

パッと見で>>571がスマートですね
シェルからこいつを呼ばせて貰おうと思います
ありがとうございましたm(_ _)m



575 名前:login:Penguin [2010/02/21(日) 20:33:49 ID:y6fTjKHz]
>>507
ttp://sourceforge.jp/projects/sfnet_pipestatus/
ど根性に脱帽

576 名前:login:Penguin mailto:sage [2010/02/26(金) 00:26:14 ID:DYTaEvQS]
自分自身(ファイル)をサーバにuploadするシェルスクリプトって可能ですか?

具体的には、ちょこちょこ定期的にレンタルサーバにuploadしたいファイル群があるのでシェルスクリプトを書きたいのですが、
そのシェルスクリプトファイル自身もuploadしたいのです。

577 名前:login:Penguin mailto:sage [2010/02/26(金) 00:29:09 ID:C/OfvsKM]
まず、なぜ不可能だと考えたのか、そこから聞こうか。

578 名前:login:Penguin mailto:sage [2010/02/26(金) 00:37:26 ID:DYTaEvQS]
今実行中のファイルを操作するってのがいけないことなのかなぁと…

579 名前:login:Penguin mailto:sage [2010/02/26(金) 00:39:36 ID:dGd2Emr5]
自身のunlinkすら可能だというに

580 名前:login:Penguin mailto:sage [2010/02/26(金) 00:56:31 ID:7suOgZ+f]
アップロードどころか実行中のスクリプトを編集することもできるよー

581 名前:login:Penguin [2010/02/26(金) 21:44:10 ID:ZUmR/bTp]
以下の結果を出力するスクリプトを,UNIXシェルで書け.
(基本仕様)
・コマンドとして実行できる.(UNIXシェルである.)
・主人公、妹1名、両親、自分の友人数名(うち最低1名は女性、半数以上は男性とする)、妹の友人(女性)数名が登場する.
・主人公、妹、自分の友人、妹の友人はいずれも生徒もしくは学生とする.
・両親のうち、父は総合商社勤務のサラリーマン、母は専業主婦とする.
・主人公の言動やイベントの発生にともない、各キャラのパラメータを変化させる.
・病弱な妹を思いやる兄と妹の交流を中心に、他の登場人物との友情や恋愛を描写する.
・エンディングは妹、もしくは妹の友人のいずれかと深い恋愛関係になるか、誰とも親密に慣れないバッドエンディングになるようにする.
・妹と恋愛関係が深まる場合、病弱な妹への思いやりが徐々に、自然に恋愛感情へ変化するように描写する.
・ゲームの操作方法はコマンド選択式またはコマンド入力式とする.
・すべてUNIXシェル内部で処理し,外部コマンドは呼び出さないこと.
(ポイント)
☆UNIXシェルにするには,ファイルの最初に #!/bin/bashというおまじないを書く.
☆コマンド選択方式のゲームにする場合、select文を使用できる。
☆四則演算には $(( )) コマンドが使用できる.(ただし,整数しか扱えない.)


誰かわかるひとお願いします

582 名前:login:Penguin mailto:sage [2010/02/26(金) 21:49:36 ID:ueeczQLj]
さようなら

583 名前:login:Penguin mailto:sage [2010/02/26(金) 22:36:07 ID:PyskErwP]
>>581
UNIXシェルってなんだ?

584 名前:login:Penguin mailto:sage [2010/02/26(金) 22:53:51 ID:nq/ujwuR]
>>581
いろいろ拡張されてきたなw




585 名前:login:Penguin mailto:sage [2010/02/26(金) 23:01:55 ID:UQaFhRqQ]
自演ウザス

586 名前:login:Penguin mailto:sage [2010/02/27(土) 08:37:06 ID:dxtkbNS9]
素直にワラタ

587 名前:login:Penguin [2010/02/28(日) 01:11:29 ID:oz3AO1O4]
シェルスクリプトとVBA、どちらが簡単ですか?

588 名前:login:Penguin mailto:sage [2010/02/28(日) 01:13:35 ID:XA1Dii88]
シェルスクリプト

589 名前:login:Penguin mailto:sage [2010/02/28(日) 01:20:34 ID:oz3AO1O4]
>>588
シェルスクリプトと比較して、VBAはどこがどんな風に難しいのでしょうか?

590 名前:login:Penguin mailto:sage [2010/02/28(日) 01:37:41 ID:XA1Dii88]
用途が全然違う

VBA=MS製品の補助、高度なことやろうと思ったらVBの型とか定数とかメソッドとかプログラミング言語として覚えないといけない
シェルスクリプト=普段から使っているコマンド郡の応用、データの流れとアルゴリズムさえ判れば外部プログラム呼び出して何でも出来る

591 名前:login:Penguin mailto:sage [2010/02/28(日) 01:52:34 ID:oz3AO1O4]
>>590
疑問なのは、なぜアプリケーションの補助がそんなに難しいのか、
もっと簡単にできなかったのか、それでは普通の人に使えないのではないか、
という点です。
Linuxで表計算っぽいことができる言語というとawkがありますけど、
あれくらい簡単だったら誰でも使えると思うのですが。
マクロ言語がエンドユーザ言語として使われるためには簡単でなければならないはず。
それなのにシェルスクリプトより難しいというのは、その目的にそぐわないような気がするのですが。

592 名前:login:Penguin mailto:sage [2010/02/28(日) 01:55:02 ID:C3UADE41]
VBAの質問ならよその板でやっとくれ。

593 名前:login:Penguin mailto:sage [2010/02/28(日) 01:56:36 ID:oz3AO1O4]
>>592
VBAについて知りたいというよりも、
シェルスクリプトとVBAの違いというか、
際立った特徴のようなものがあれば、それを知りたいんです。

594 名前:login:Penguin mailto:sage [2010/02/28(日) 02:06:41 ID:B/kw3N2G]
>>593
そもそも活用シーンが全然違うのに比較してどうする。根本が間違っている。
比較するならWSHとだろう。



595 名前:login:Penguin mailto:sage [2010/02/28(日) 02:12:43 ID:oz3AO1O4]
>>594
WSHもWindows PowerShellも
エンドユーザにはあまり受け容れられていないように見受けられます。
Linux/UNIX/MacOSXのエンドユーザでもスクリプトを全く書かない人はいますが、
Windowsよりはそういう人が少ないと思います。
単純にWindowsのほうがヘビーユーザ率が低いというもあるでしょうが、
それだけでなく、Windowsで使われるそれらの言語が
そもそもエンドユーザに適さない欠点を有しているからではないのでしょうか?
とすると、逆にシェルスクリプトはどういう点でそれらより優れているのでしょうか?

596 名前:login:Penguin mailto:sage [2010/02/28(日) 02:20:34 ID:B/kw3N2G]
>>595
だからさー比較する前提条件が間違っている。

597 名前:login:Penguin mailto:sage [2010/02/28(日) 02:24:04 ID:oz3AO1O4]
>>596
WSHと比較するようにアドバイスされたので、そうしたのですが。

598 名前:login:Penguin mailto:sage [2010/02/28(日) 02:31:01 ID:v9A/VFIk]
シェルスクリプトと比較するべきはバッチファイル。
君の質問は「バッチファイルとVBA、どちらが簡単ですか?」という事になるから
この板で聞く事じゃない。

599 名前:login:Penguin mailto:sage [2010/02/28(日) 02:33:03 ID:oz3AO1O4]
>>598
バッチファイルなんて論外でしょう。
あれとシェルスクリプトを一緒にするのはやめましょう。

600 名前:login:Penguin mailto:sage [2010/02/28(日) 02:43:10 ID:v9A/VFIk]
VBAと一口に言ってもWord、Excel、Access、Outlook…全然違うぞ?

601 名前:login:Penguin mailto:sage [2010/02/28(日) 02:44:34 ID:B/kw3N2G]
っていうかスレチ。
いちいちageているし、これ以上続けるならレス乞食とみなしてあぼーんする。

くだ質いけ。

602 名前:login:Penguin mailto:sage [2010/02/28(日) 02:47:24 ID:C3UADE41]
くだ質に来られても困るな。
ム板にでも行ってくれ。

603 名前:login:Penguin mailto:sage [2010/02/28(日) 02:52:42 ID: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 mailto:sage [2010/02/28(日) 03:01:02 ID:SsRM0ruv]
マルチ相手によーやるな



605 名前:login:Penguin mailto:sage [2010/02/28(日) 09:04:34 ID:JCw0fVKj]
>>603
Window Power Shellもしかり。ちょい使いするには厳格すぎる。
あまりハードルを下げるとMS専門鯖管にスキルが付いてLinuxに行っちゃうからじゃね?

606 名前:login:Penguin mailto:sage [2010/02/28(日) 11:13:46 ID:ZpjvZrys]
指定したディレクトリ以下を再帰的に検索して
同じディレクトリに大文字小文字違いでファイル名が重複して存在してた場合
例)
ABC.txt
abc.txt
abc.TXT
どれか一つ(どれでもいい)を残してあと消去するってのをやりたいけどどうやんの

607 名前:login:Penguin mailto:sage [2010/02/28(日) 11:15:22 ID:wBfYi/JJ]
>>603 見たら、ハードル高くしたらむしろ出来る奴こそLinuxに行ってしまいそうにオモタ

608 名前:login:Penguin mailto:sage [2010/02/28(日) 11:57:18 ID:C3UADE41]
>>606
perl か何かで書いた方が楽じゃないかな。

609 名前:login:Penguin [2010/02/28(日) 11:58:42 ID: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 mailto:sage [2010/02/28(日) 14:28:15 ID: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 [2010/02/28(日) 14:46:18 ID:qTqfFliX]
>>609 では、重複を探して、最初のを除いて、2つめ以降を出力してる。
この出方を>>606の評価基準で見てもらい、不満なければ、
あと xargs rm につなぐ程度で済むべ。
>>610 の例だと、それは全部消していいものなの?

612 名前:login:Penguin [2010/02/28(日) 14:52:31 ID:qTqfFliX]
もちろん>>609が最適解だなんて思ってないんだけど、
>>610 のやり方だと、abc.txt って人が与えてるよね。何百個かある時はどうするの?


613 名前:login:Penguin [2010/02/28(日) 15:10:05 ID: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 mailto:sage [2010/02/28(日) 15:41:09 ID: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 mailto:sage [2010/02/28(日) 15:47:27 ID:oz3AO1O4]
すまん、evalはなくても動く。

616 名前:login:Penguin mailto:sage [2010/02/28(日) 15:59:45 ID:0w7cauqm]
>>606 が良ければなんでもいいでしょうに

617 名前:login:Penguin [2010/02/28(日) 16:00:23 ID:diBS8T6m]
>>614
いかにもシェルスクリプトらしい解決法だね
perl使うほうがメンドイ

618 名前:login:Penguin [2010/02/28(日) 16:32:44 ID: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 mailto:sage [2010/02/28(日) 19:19:20 ID:ZpjvZrys]
勉強になります

620 名前:login:Penguin mailto:sage [2010/02/28(日) 19:46:12 ID:v9A/VFIk]
別ディレクトリになった時 Q="" しなくていいの?

621 名前:login:Penguin [2010/02/28(日) 20:01:15 ID:qTqfFliX]
>>620
>>609 で楽するためディレクトリの大文字小文字は考えないことにしたんだけど、
d/abc.txt と D/abc.txt を同一視しちゃってるので、本当ならダメ、なんでしょう。
find . -type d するループを外側につけるか、
ディレクトリ名見る if をつければ直せそう。改修頼みます >>620

622 名前:login:Penguin mailto:sage [2010/02/28(日) 20:11:12 ID:0w7cauqm]
だからそういうのは>>606が決めることだって。勉強になります、じゃなかろうに

623 名前:login:Penguin mailto:sage [2010/02/28(日) 20:50:11 ID: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 mailto:sage [2010/02/28(日) 22:25:55 ID: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 mailto:sage [2010/02/28(日) 22:43:51 ID:oz3AO1O4]
>>624
スペースを含むディレクトリ作って実行してみ。

626 名前:login:Penguin mailto:sage [2010/02/28(日) 23:06:54 ID:v9A/VFIk]
Windowsじゃあるまいし。

627 名前:login:Penguin mailto:sage [2010/02/28(日) 23:09:17 ID:Z6hm/tn2]
空白や日本語を許すかで世代間のギャップが存在するなw

628 名前:login:Penguin mailto:sage [2010/02/28(日) 23:11:07 ID:0w7cauqm]
用件的にsamba絡みと予想してたけどね。知らんけど

629 名前:login:Penguin mailto:sage [2010/02/28(日) 23:13:21 ID:1hHY9Dv5]
linuxでフォルダ名に空白入れることはないな、色々面倒だし

630 名前:login:Penguin mailto:sage [2010/02/28(日) 23:15:53 ID:oz3AO1O4]
>>626
シェル変数参照の際、値に含まれるスペースや*などの
パス名展開の文字が解釈されてしまうのを防ぐため、
ダブルクオートで囲むのは常識。

Windowsじゃないとかいう問題ではなく、
シェルスクリプトを書く際の常識。

631 名前:login:Penguin mailto:sage [2010/02/28(日) 23:50:39 ID:fdN9Zkx+]
カラだったときエラーになっちゃうしね

632 名前:login:Penguin mailto:sage [2010/02/28(日) 23:53:35 ID:v9A/VFIk]
わかった。わかった。次回からそうするよ。

633 名前:login:Penguin mailto:sage [2010/03/01(月) 00:59:23 ID:IaBmVUuE]
>>610
>ただ表示させてるだけじゃん。

findでヒットした結果には任意のコマンドを適用可能。
馬鹿か?

634 名前:login:Penguin mailto:sage [2010/03/01(月) 01:09:07 ID:6uFj7AQh]
俺は>>628だからそもそもどうでもいいけど、それかなりどーでもいいぞ



635 名前:login:Penguin mailto:sage [2010/03/01(月) 01:09:42 ID:QTdHsVxq]
>>606
ファイル名を全部小文字に変えて、重複してたら上書きされて結果的に一つ残る。
ってやり方でも出来ると思う。(効率は良くない)

こんなスクリプト書いて /home/hoge/script/RENAME_lower.sh とか名前付けて chmod +x しておく。
#!/bin/bash
START_DIR="`pwd`"
while (test -n "${1}") ; do
if [ -d "${1}" ] ; then
cd "${1}" &&
(
pwd ; ls
for i in *\.[Tt][Xx][Tt] ;
do
if [ -f "${i}" ] ; then
mv "${i}" "`echo ${i} | sed y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/`"
fi
done
)
fi
shift
cd "${START_DIR}"
done

ディレクトリを find とかで検索して RENAME_lower.sh で処理。
$ find . -type d -exec /home/hoge/script/RENAME_lower.sh {} \+

636 名前:login:Penguin mailto:sage [2010/03/04(木) 23:43:06 ID:oO8XEq75]
#!/bin/shと#!/bin/bashはどちらがおすすめなの?

637 名前:login:Penguin mailto:sage [2010/03/05(金) 00:16:06 ID:IlIr0pSM]
#!/bin/bash

638 名前:login:Penguin mailto:sage [2010/03/05(金) 00:19:11 ID:FZm9BOvl]
#!/bin/bashだろjk

639 名前:login:Penguin mailto:sage [2010/03/05(金) 00:56:20 ID:GiIL1sMg]
用途次第。以下はsh
・shで書いても機能・速度が許容範囲で簡単に書ける場合
・shでないといけない場合(busyboxとか)

640 名前:login:Penguin [2010/03/05(金) 08:08:46 ID:CTq7Tclv]
>>5

641 名前:login:Penguin mailto:sage [2010/03/05(金) 08:37:14 ID:GiIL1sMg]
そいつはこのスレのお約束+α。YOUのオススメを書きなよ

642 名前:login:Penguin mailto:sage [2010/03/05(金) 09:01:18 ID:lZJ9zNnO]
今どきのディストリなら sh -> bash が当たり前だろ

643 名前:login:Penguin mailto:sage [2010/03/05(金) 09:56:40 ID:y7mY4KkL]
使い捨てなら深く考えずどっちでも OK。
別のマシンでも使うならよく考える。

644 名前:login:Penguin mailto:sage [2010/03/05(金) 10:20:23 ID:8QC8E4i2]
>>642
Debian、Ubuntuはdash



645 名前:login:Penguin mailto:sage [2010/03/05(金) 12:02:50 ID:kHG21Qzt]
ださw

646 名前:login:Penguin mailto:sage [2010/03/05(金) 14:24:04 ID:ixxT+8DA]
>>641
それはUNIX板のシェルスクリプトスレと勘違いして貼られたもん
このスレのテンプレじゃあない
>>5-10を見ろ

647 名前:login:Penguin mailto:sage [2010/03/05(金) 15:49:37 ID:D7CZBw7a]
bashの構文を使ってれば#!/bin/bash、使ってなくても#!/bin/bash

648 名前:login:Penguin mailto:sage [2010/03/05(金) 22:06:54 ID:1xo9OzwV]
おとなもこどもも、おねーさんも#!/bin/bash

649 名前:login:Penguin mailto:sage [2010/03/05(金) 22:38:25 ID:t7X9IkaB]
BSD系の人たちはどうすれば?

650 名前:login:Penguin mailto:sage [2010/03/05(金) 22:41:37 ID:IlIr0pSM]
板違いです

651 名前:login:Penguin mailto:sage [2010/03/05(金) 23:39:40 ID:GiIL1sMg]
$ sudo -i
# cd /bin;\rm -f sh;ln -s bash sh

652 名前:login:Penguin mailto:sage [2010/03/06(土) 00:07:36 ID:z+KgTZo4]
>>651
sudo ln -fs bash /bin/sh
でいいんじゃね。

653 名前:login:Penguin mailto:sage [2010/03/06(土) 00:53:02 ID:zGIcPUED]
コピペはできないようにしたかったから二行
ln -f は嫌い rm -f が好き

654 名前:login:Penguin [2010/03/06(土) 11:13:20 ID:8ckQdz96]
・sh では、while中で代入した変数は、ループから抜けると使えなくなりますか?
・それがPOSIX仕様なら、一時ファイルを作る以外に、よい回避方法はありますか?

$ date | while read line; do last="$line"; done; echo "THE LAST: $last"
を Debian lenny の dash, bash, ksh で実行した場合、ksh 以外では値が残りません。




655 名前:login:Penguin mailto:sage [2010/03/06(土) 12:21:04 ID:zGIcPUED]
POSIX仕様は知らない
シェル実装によって違いがあるけどパイプはサブシェルで実行される
$ date | (while read line; do last="$line"; done;echo "THE LAST: $last")
で回避になるならいいけど
$ date | while read line; do last="$line"; done
$ echo "THE LAST: $last"
ということをしてkshを正解としたいなら一時ファイルくらいしか思いつかない

656 名前:login:Penguin mailto:sage [2010/03/06(土) 19:57:46 ID:vEOUh0ms]
dateをパイプでwhileに放り投げる目的は何?

657 名前:login:Penguin mailto:sage [2010/03/06(土) 20:01:13 ID:lSm8LSXx]
ただの例題

658 名前:login:Penguin mailto:sage [2010/03/06(土) 20:12:35 ID:zGIcPUED]
このスレで質問してるやつはほとんど約1名でただのキチガイだと思ってる
区別ができれば間違いなく回答しないんだけどねぇ

659 名前:login:Penguin mailto:sage [2010/03/06(土) 21:29:26 ID:U6pPRiRF]
お前以外は全部俺の自作自演です

660 名前:login:Penguin mailto:sage [2010/03/06(土) 21:38:12 ID:zGIcPUED]
質問者以外はどっちでもいいけど

661 名前:654 [2010/03/06(土) 22:34:04 ID:8ckQdz96]
>>655さん
> シェル実装によって違いがあるけどパイプはサブシェルで実行される
勉強になります。
[linux-users:96159] Re: [bash]whileループ内変数値の扱いについて教えてください。
ttp://search.luky.org/linux-users.9/msg06102.html
のような、3以上のfdを使う方向でいこうと思います。
ありがとうございました。

662 名前:login:Penguin mailto:sage [2010/03/07(日) 05:39:29 ID:qUDKVagf]
使っているbashの制約事項はどこに書いてある?

663 名前:login:Penguin mailto:sage [2010/03/07(日) 15:21:22 ID:kzHmHVjG]
日本語でおk

664 名前:login:Penguin mailto:sage [2010/03/07(日) 15:50:18 ID:BVZuVuVb]
>>662
/usr/share/doc/bash-doc-*/COMPAT
かな。



665 名前:login:Penguin mailto:sage [2010/03/07(日) 15:58:04 ID:CtU/xHgd]
俺の認識不足なのかもしれんが
dateコマンドを単独で使っても、1行しか出力しなくね?

$ date
2010年 3月 7日 日曜日 15:50:25 JST

whileにパイプでつなぐ意味がわからん。
もしlsみたく複数行で出力するコマンド実行したならわからなくもないけど、
それなら無理にパイプでwhileにつなぐ必要ないし。

$ ls
sample.sh sample2.sh xyz.txt
$ for i in `ls`; do X="$i"; done; echo "$i"
xyz.txt

別の方法で簡単に解決できることをどうして難しくするのか意味不明。

666 名前:login:Penguin mailto:sage [2010/03/07(日) 16:24:31 ID:/xXz4ARQ]
>>665
おまえは質問者の質問意図がわかってない

667 名前:login:Penguin mailto:sage [2010/03/07(日) 16:27:22 ID:CtU/xHgd]
>>666
わかるわけない。
whileにパイプでつないでサブシェルになるからどうとか、
そういうので困ったことないから。


668 名前:667 mailto:sage [2010/03/07(日) 16:29:06 ID:CtU/xHgd]
っていうか、
実用上、それをどうしても使わないと書けないものなんてあるの?
例を示せるなら示してほしいもんだね。

669 名前:login:Penguin mailto:sage [2010/03/07(日) 16:31:06 ID:lFJTxoe3]
おい、誰かこの馬鹿をつまみだせ

670 名前:login:Penguin mailto:sage [2010/03/07(日) 16:33:48 ID:CtU/xHgd]
>>669
だから、実用上どういう意味があるのか教えてくれれば
言われなくても出ていくけど。

671 名前:login:Penguin mailto:sage [2010/03/07(日) 16:42:38 ID:lFJTxoe3]
変数の扱い方が知りたかっただけろ。
例としてとりあえず適当に思いついたdateを使ったんだろう。
ただの一例なんだから実用上は別に意味ない。

672 名前:667 mailto:sage [2010/03/07(日) 16:47:13 ID:CtU/xHgd]
catコマンドを使ってファイルの中身を出力してパイプでwhileにつないだとか、
そういうのならわかるんだがな。
もっとも、その程度ならパイプ使わないで書けばいいだけだが。
だから、どんなことをキッカケにそんな質問が出てきたのかよくわからん。

まぁ、興味本位で意味のないことする人ってのもいるんだろうけどさ。
ガソリン車に灯油を入れてみるとか、
トラックでレールの上を走ってみるとか。
俺から見ると、そういう変人と同レベルの質問に見えるのさ。

673 名前:login:Penguin mailto:sage [2010/03/07(日) 18:49:32 ID:kzHmHVjG]
(キリッ

674 名前:login:Penguin mailto:sage [2010/03/07(日) 18:57:12 ID:T97Hz24h]
頭の中でdateを適当なものに置き換えればいいだけじゃん。
質問する上での便宜かもしれないってのに
いちいち突っ掛かってくるヤツってなんなの?



675 名前:login:Penguin mailto:sage [2010/03/07(日) 19:44:39 ID:CtU/xHgd]
>>674
dateだからダメとかだけじゃなく、それ以前に変な質問だろ。

>>654
>それがPOSIX仕様なら、一時ファイルを作る以外に、よい回避方法はありますか?
に対する答は「パイプを使うな」。

>>661
>3以上のfdを使う方向でいこうと思います。
に対しては「他に手段がないならさておいて・・・正気か?」。

676 名前:login:Penguin mailto:sage [2010/03/07(日) 22:20:17 ID:EI1vZsn/]
だから、お前はそもそもまともなスクリプトも書けないのに、容喙せんでいい。

677 名前:login:Penguin [2010/03/07(日) 23:06:32 ID:qcuqADXg]
>>676
あれほどアホな質問しない程度には書けるが。
質問者が何をやろうとしてるか知らんが
意地でもパイプでwhileに投げて実現しようとしてんだろ?
まともな神経してたら別の方法でやるのにさ。

っていうか、質問者を擁護してる君も質問者みたいな書き方すんの?
合理性を考えたほうがいいよ。

678 名前:login:Penguin mailto:sage [2010/03/07(日) 23:27:59 ID:s4PVEnib]
見ない間に核心つかれてるし
ここのキチガイはLIFEも低そうだし
なむなむ

679 名前:login:Penguin mailto:sage [2010/03/08(月) 08:59:52 ID:/FTwkaX/]
mkfifoでnamed pipe作って使う手もあるな。

mkfifo fifo;
date > fifo&
while read line < fifo ; do last="$line"; done; echo "THE LAST: $last"
rm fifo

680 名前:login:Penguin mailto:sage [2010/03/09(火) 20:30:43 ID:o5fd938a]
command 2>file.log

で標準エラー出力をファイルに書き出しているのですが、
エラーでない場合も0バイトのfile.logが生成されてしまいます。

エラーでない場合はfile.logは生成しない方法などあるのでしょうか?

681 名前:login:Penguin mailto:sage [2010/03/09(火) 20:44:25 ID:NDaUm8+N]
>>680
終了ステータスでエラーかどうかわかるじゃん。

682 名前:login:Penguin mailto:sage [2010/03/09(火) 20:47:03 ID:LVMm3tsD]

ウォーニングは無視ですか?

683 名前:login:Penguin mailto:sage [2010/03/09(火) 20:48:59 ID:JIyb876K]
0バイトなら削除したらええがな

684 名前:login:Penguin mailto:sage [2010/03/09(火) 20:50:37 ID:NDaUm8+N]
条件後出しか…



685 名前:login:Penguin mailto:sage [2010/03/09(火) 20:52:24 ID:LVMm3tsD]
条件を甘く見たお前さんが悪い。

686 名前:login:Penguin mailto:sage [2010/03/09(火) 20:57:40 ID:NDaUm8+N]
居直られちゃったよ。

687 名前:login:Penguin mailto:sage [2010/03/09(火) 21:03:59 ID:o5fd938a]
>>683
削除することにしました。

ファイル作らないで良い方法はないのかなー?


688 名前:login:Penguin [2010/03/09(火) 22:45:08 ID:wS8nnpNv]
2>file.log でファイルが開かれるのは command が実行される前。
エラーがあったかどうか分かるのは、command の実行が完了した後。
file.log の中身が重要かどうかは、実行終了まで分からないのだから、
普通に考えて、後から削除するのが素直ですよね。

素直じゃない例。長くなっても大丈夫か分かりません。

#!/bin/sh

exec 3>&1
cmd='{ ./some.sh 2>&3 1>stdout.log 3>&- ; } 3>&1 | grep -v warning'
errout=`eval $cmd`
exec 3>&-
if [ -n "$errout" ]; then
echo "there were one or more error"
echo "$errout" >stderr.log
fi


689 名前:login:Penguin mailto:sage [2010/03/10(水) 20:15:59 ID:7RM74zt/]
久しぶりにマニアックなコード見た。

690 名前:login:Penguin mailto:sage [2010/03/12(金) 00:36:34 ID:g58g7Khc]
読み解けん;_;

691 名前:login:Penguin mailto:sage [2010/03/16(火) 06:49:42 ID:+KO51EwF]
一回3に2の出力を出して、空ならthere were one or more errorを1に出力、空じゃなければstderr.logに出力


692 名前:login:Penguin mailto:sage [2010/03/16(火) 08:33:07 ID:L4OU7Nfk]
>>688

だれか解説よろ

693 名前:login:Penguin mailto:sage [2010/03/16(火) 17:36:29 ID:7rwiLleU]
グロブで /etc/pass* のリストを得たいのだが、
list=/etc/pass*
だと展開してくれない。

list=$(ls /etc/pass*) ならおkで、改行文字 '\n' 区切りのリストになる。
だが ls のために fork してしまうのが痛い。
どうにかならんのか。

お願いします m(_ _)m

694 名前:login:Penguin mailto:sage [2010/03/16(火) 17:41:09 ID:7rwiLleU]
あっさり解決した。
printf "%s\n" /etc/pass*

これでいいのか。よくわからんが、printfは組み込みコマンドだったはず。。



695 名前:login:Penguin mailto:sage [2010/03/16(火) 17:55:59 ID:oDvWUAap]
>>693
試したら展開できたけどな。

696 名前:login:Penguin mailto:sage [2010/03/16(火) 17:59:59 ID:jFL6NZ+y]
昔はechoを使ったもんじゃ

697 名前:login:Penguin mailto:sage [2010/03/16(火) 18:00:18 ID:7rwiLleU]
>>695
本当貝?bash?
$ list=/etc/pass*
$ echo "${list[@]}"
/etc/pass*

ダメなんだが。。これをパイプで他のコマンドに渡したいから、ギリギリで展開されても困る。

698 名前:login:Penguin mailto:sage [2010/03/16(火) 18:01:26 ID:oDvWUAap]
>>697
echo $list で。

699 名前:login:Penguin mailto:sage [2010/03/16(火) 18:01:54 ID:7rwiLleU]
>>696
echo だと改行文字 '\n' 区切りのリストにならない。
$ list=$(echo /etc/pass*)
$ echo "${list[@]}"
/etc/passwd /etc/passwd-

700 名前:login:Penguin mailto:sage [2010/03/16(火) 18:03:33 ID:oDvWUAap]
>>699
そんな条件なかったじゃん。

701 名前:login:Penguin mailto:sage [2010/03/16(火) 18:05:27 ID:7rwiLleU]
>>700
だからprintfを使うことにしたよ。
「一行ずつ」読むコマンドにパイプで渡さないといけないから。

702 名前:login:Penguin mailto:sage [2010/03/16(火) 18:06:01 ID:oDvWUAap]
後出しで文句言われても……。

703 名前:login:Penguin mailto:sage [2010/03/16(火) 18:07:08 ID:7rwiLleU]
>>702
いえ事故解決しました、と言った後であなたが展開できましたとおっしゃったので
私はレスをしただけです。

704 名前:login:Penguin mailto:sage [2010/03/16(火) 18:08:01 ID:7rwiLleU]
あ、どうもありがとう(^^)



705 名前:login:Penguin mailto:sage [2010/03/16(火) 18:15:41 ID:m9fA5s2e]
for i in /etc/pass*; do echo "$i"; done | command...

706 名前:login:Penguin mailto:sage [2010/03/16(火) 18:17:49 ID:7rwiLleU]
>>705
すみません、また後出しですが、一応言っておきます。
わざわざ変数 list に格納しているのは、後で自分が参照するからです。

707 名前:login:Penguin mailto:sage [2010/03/16(火) 22:36:09 ID:vMRJlqrh]
はいはい次どぞー

708 名前:login:Penguin mailto:sage [2010/03/16(火) 22:41:29 ID:7rwiLleU]
え、いいんですか?次

709 名前:login:Penguin mailto:sage [2010/03/20(土) 00:18:55 ID:qKxWTBVf]
ファイルから丸括弧(開く) "(" だけの行を読み込んだ際、
if [ \( "$LINE" = "$CHK1" -o "$LINE" = "$CHK2" \) -a \( "$A" = "$B" -o "$C" = "$D" \) ]; then
といったif文でエラーとなってしまいます。
何がまずいのでしょうか?

710 名前:login:Penguin [2010/03/20(土) 07:41:24 ID:SCWfCSZ4]
>>709
if [ \( "x${LINE}x" = "x{$CHK1}x"
だと通りませんか。


711 名前:login:Penguin mailto:sage [2010/03/20(土) 12:14:57 ID:qKxWTBVf]
>>710
早速の回答、ありがとうございます。
マシンが平日しか使えないので、火曜日に試してみます。

ところで、$LINE="("の場合だと、
if [ \( "$LINE" = "$CHK1" \) ]; then だとエラーとなりますが、
if [ "$LINE" = "$CHK1" ]; then だとエラーとなりませんでした。
何か書き方が間違えているのでしょうか?

712 名前:login:Penguin mailto:sage [2010/03/20(土) 12:17:45 ID:qKxWTBVf]
連投すません。

どちらの書き方も、$LINE="(A"とかだとエラーとなりません。
"("の場合のみ、エラーとなります。
なんでだろ?

713 名前:login:Penguin mailto:sage [2010/03/20(土) 22:21:20 ID:7Z9+G9O/]
例外処理ってどうすればいいだろうか。

for x in ...
do
  処理A && \
  処理B && \
  処理C && \
  continue

  # エラー?
  後片付け、そして次のアイテム
done

サブルーチン化するもの手だけど、それも大袈裟な場合ってどうやるのがスマートだろうか。
すべてを && を繋げる方法しか思いつかない。。

714 名前:login:Penguin [2010/03/20(土) 22:33:44 ID:SCWfCSZ4]
>>713
ttp://www.unix.com/shell-programming-scripting/38127-exception-handling.html
に、
cleanup_script()
{
echo "Cleaning ..."
}
trap 'cleanup_script' ERR
set -e
ってコードがあったです。set -e が肝らしい。



715 名前:login:Penguin mailto:sage [2010/03/20(土) 22:43:49 ID:7Z9+G9O/]
>>714
ありがとう。便利ですが、/bin/sh(DebianだとDASH)ではうまく動作しませんでした。
BASHなら問題ありません。

handler()
{
  echo "Trap ERR!"
  exit 1
}

set -e
trap ?handler? ERR
for x in $(seq 1 10)
do
  echo $x
  [ $x -eq 5 ] && false
done

実行結果:
1
2
3
4
5
Trap ERR!

716 名前:login:Penguin mailto:sage [2010/03/20(土) 22:47:11 ID:7Z9+G9O/]
SIGUSR1 30,10,16 Term ユーザ定義シグナル 1
SIGUSR2 31,12,17 Term ユーザ定義シグナル 2

これを使うのもアリか...

717 名前:login:Penguin mailto:sage [2010/03/20(土) 23:28:40 ID:7Z9+G9O/]
あともう一つ質問!

#!/bin/sh
echo $@
exit 0

というプログラムがあったとして(test.shとする)、

./test.sh 'hoge' 'fuga' > fileA
./test.sh > fileB 'hoge' 'fuga'

をすると、fileAとfileBの両方とも同じ結果になるんだけど、これはどう違うの?

718 名前:login:Penguin mailto:sage [2010/03/21(日) 01:59:46 ID:AC+zwoRf]
シェルスクリプトで他のサーバにあるファイルを弄ることは可能ですか?

具体的には、
ローカルPC、サーバA、サーバBという3台のPCがありまして
サーバA上の特定のファイルを編集してサーバBにアップロードし、さらにAにある他のファイルをBにアップロードする
という処理をローカル上のシェルスクリプトで自動化したいのです。

しかしsshコマンドで他サーバに繋ごうとするとパスワードを聞かれる所で止まってしまいます。

719 名前:login:Penguin mailto:sage [2010/03/21(日) 02:04:15 ID:65tFCowN]
つ公開鍵認証

720 名前:login:Penguin mailto:sage [2010/03/21(日) 02:11:15 ID:AC+zwoRf]
なるほど…やはりそうなるのですね
公開鍵とやらを勉強することにします
mysql -u root -prootみたいに指定できればいいのになぁ

721 名前:login:Penguin mailto:sage [2010/03/21(日) 02:16:36 ID:AC+zwoRf]
というか、仮にsshで繋げたとしても
実行環境が他サーバに移るわけじゃないし他サーバのファイルをいじるのは無理なのかな?
シェルスクリプトはcdコマンドの実行結果すら次の行に持ち込まないですよね
全ての実行行は独立したシェルで実行されるとか何とかで。

722 名前:login:Penguin mailto:sage [2010/03/21(日) 02:36:57 ID:65tFCowN]
こんな感じで編集も転送もできる
ssh -i 秘密鍵A ユーザ名A@Aサーバ "任意のコマンド(編集ならsedとかawk)"
ssh -i 秘密鍵A ユーザ名A@Aサーバ "任意のコマンド(転送ならscp -i 秘密鍵B 編集したファイル ユーザ名B@Bサーバ:保存場所 )"

エラー処理とかちゃんとしたいならAサーバに編集、転送用のスクリプト置いてクライアントからは引数だけ渡せばいいし

723 名前:login:Penguin mailto:sage [2010/03/21(日) 06:55:40 ID:s8pDEsGz]
>>721
expectは?

724 名前:login:Penguin mailto:sage [2010/03/21(日) 09:41:21 ID:oiz+h8tr]
>>721
>シェルスクリプトはcdコマンドの実行結果すら次の行に持ち込まないですよね

#!/bin/sh
cd /tmp
./hoge.sh

上記は/tmpに移動して、/tmpにあるhoge.shを実行するけど?



725 名前:login:Penguin mailto:sage [2010/03/21(日) 10:09:43 ID:s8pDEsGz]
ssh host cd /tmp
ssh host ./hoge.sh

こんなアホをやっていると予想。

シェルスクリプトを予めscpで送っておくとか、標準入力の内容をスクリプトとして実効できたり出来ないんかね。

726 名前:login:Penguin [2010/03/21(日) 17:30:12 ID:cuEg7ODK]
echo "( cd /tmp ; ./hoge.sh )" | ssh host
でいいですよね。

727 名前:login:Penguin mailto:sage [2010/03/21(日) 17:55:39 ID:gIM4/doG]
>>712

-x をつけて実行してみるとなんとなくわかるかも。

文字列の比較のときは710氏の方式で前後に固定文字を入れたほうが誤動作しにくい。


ただタイプミスだと思うけど、中括弧の位置が間違ってて
 if [ \( "x${LINE}x" = "x${CHK1}x"
だけどね。

728 名前:login:Penguin mailto:sage [2010/03/21(日) 20:47:12 ID:NvA+aKwG]
>>727
ありがとう。
固定文字列を入れて比較するのは、いいアイディアですね。
(なんで思いつかなかったんだろう…)

729 名前:login:Penguin mailto:sage [2010/03/24(水) 01:16:09 ID:fusHHN2e]
お願いします。

・forの入れ子構造ってOKなんでしょうか?

#!/bin/bash
#nekoneko.sh

for var in aaa
do

for fstype in fs
do
hogehoge=neko
done

echo $var/$hogehoge
done

#sh nekoneko.sh

aaa/neko

期待結果は得られているのですが、勉強中なのであっているかどうかがわかりません。


・forでテキストファイルの読み込みってできないのでしょうか?
dosのバッチで言うところの for /f %%a in (nekoneko.txt) do 〜のような方法です。

よろしくお願いします。

730 名前:login:Penguin mailto:sage [2010/03/24(水) 01:24:36 ID:KIBvvI04]
>・forの入れ子構造ってOKなんでしょうか?
OK

>・forでテキストファイルの読み込みってできないのでしょうか?
DOSのforはしらんが
for a in `cat nekoneko.txt`
でいいのか?


731 名前:login:Penguin mailto:sage [2010/03/24(水) 10:02:51 ID:qcQ/2FhI]
>>729
インデントしようよ。
全角空白で書くけど、半角空白に変換してくれ。

#!/bin/bash
for var in aaa; do
 for fstype in fs; do
  hogehoge=neko
 done
 echo $var/$hogehoge
done

ファイル読んで回すのは while read とか使うんじゃね。

732 名前:login:Penguin mailto:sage [2010/03/24(水) 12:47:43 ID:D4crZAMy]
>>731
全角空白のインデントはやめろ!
半角空白のほうがいい
お前の専ブラ変えろ馬鹿


733 名前:login:Penguin mailto:sage [2010/03/24(水) 12:51:42 ID:D4crZAMy]
#!/bin/bash
for var in aaa; do
for fstype in fs; do
hogehoge=neko
done
echo $var/$hogehoge
done

734 名前:login:Penguin mailto:sage [2010/03/24(水) 12:58:21 ID:pFOtZDrD]
恥ずかしいね。



735 名前:login:Penguin mailto:sage [2010/03/24(水) 13:12:41 ID:D4crZAMy]
usamimi.info/~linux/d/up/up0503.png
usamimi.info/~linux/d/up/up0504.png

生ログにはタブと半角空白はきちんと記録されてるから。
素直に表示する専ブラで見れば奇麗にインデントされる。

736 名前:login:Penguin mailto:sage [2010/03/24(水) 13:18:59 ID:pFOtZDrD]
おいおい、pre要素以外では連続する空白文字は一つにまとめられるのだが。
2ちゃんねるのデータ書式はウンコだけど、連続する空白文字をそのまま
表示する仕様なんてないぜ?

そういうブラウザを押しつけるのはどうなの、って思うけど。

737 名前:login:Penguin mailto:sage [2010/03/24(水) 13:25:53 ID:qcQ/2FhI]
>>732
うちの環境では半角空白でも見えるけど
相手の環境で見えるとは限らないから。

738 名前:login:Penguin mailto:sage [2010/03/24(水) 13:29:31 ID:pFOtZDrD]
これはブラウザ依存だと思うね。

空白文字をそのまま扱うものもあれば、HTMLの仕様に準じて無視するものもある。
&nbsp; を使う手もあるのだが、これを同処理するかもブラウザ依存。
まあ2ちゃんねるがクソなんだが。

739 名前:login:Penguin mailto:sage [2010/03/24(水) 13:31:53 ID:KIBvvI04]
おまいらスクリプトについても語ってやれよ・・・

740 名前:login:Penguin mailto:sage [2010/03/24(水) 13:37:19 ID:D4crZAMy]
>>737
アンタ良い人だね。
でもな、コード貼る事が多いスレを見てるんなら閲覧者のほうでインデントするブラウザにしたほうがお互いに楽だぜ。
貼るほうもコピーする側もそのまま使えるんだから。うっかり全角空白入れたまま使う事もない。
スクリプトスレなら困る事少いかもだが、全角空白の入ったパッチ貼られたりしたら目もあてらんねぇよ?

741 名前:login:Penguin mailto:sage [2010/03/24(水) 13:39:50 ID:qcQ/2FhI]
>>740
だから「変換してくれ」って書いたじゃん。
閲覧者の環境まで責任持てん。

742 名前:login:Penguin mailto:sage [2010/03/24(水) 13:40:45 ID:qcQ/2FhI]
良い人とかってよりも、portability を重視しただけだよ。
書く環境と読む環境が同じとは限らない。
こういう配慮はスクリプト書きもいっしょ。

743 名前:login:Penguin mailto:sage [2010/03/24(水) 13:48:01 ID:D4crZAMy]
とりあえず「全角空白を推奨」するのだけは勘弁してくれ。
それが無きゃ俺も黙ってさ。


744 名前:login:Penguin mailto:sage [2010/03/24(水) 13:53:55 ID:qcQ/2FhI]
推奨なんてしてないよ。



745 名前:login:Penguin mailto:sage [2010/03/24(水) 14:04:24 ID:D4crZAMy]
>インデントしようよ。
>全角空白で書くけど、半角空白に変換してくれ。

インデントは推奨してるが、改めて見直すと全角空白推奨ではないと言われたら確かにそうだな。
いきなり俺の言い方がきつかったのは謝る。数日前にム板で同じような事があってココでもか!と思ったもんだからついな。
すまんかった >ID:qcQ/2FhI

746 名前:login:Penguin mailto:sage [2010/03/24(水) 14:05:59 ID:eh1BmETO]
 
藻前ら、モティツケ
     /\⌒ヽペタン
   /  /⌒)ノ ペタン
  ∧_∧ \ (( ∧_∧
 (; ´Д`))' ))(・∀・ ;)
 /  ⌒ノ ( ⌒ヽ⊂⌒ヽ
.(O   ノ ) ̄ ̄ ̄()__   )
 )_)_) (;;;;;;;;;;;;;;;;;;;)(_(


747 名前:login:Penguin mailto:sage [2010/03/24(水) 15:40:14 ID:8MgVQE42]
全角文字やTABなどを記号で表示するようにしておけば、
そうそう事故はないのでは?jaspace.elとか便利だよ。


748 名前:login:Penguin mailto:sage [2010/03/24(水) 15:52:39 ID:c/AsI/YT]
学習用のネタとかならともかくパッチを 2ch に貼んのはやめたほうがいいんじゃね
書き込み確認のとこに
投稿者は権利の何もかもを管理者に無償譲渡することを承諾しますみたいなこと書いてあるぜ

749 名前:login:Penguin mailto:sage [2010/03/24(水) 16:12:14 ID:o3qxm3DD]
どうしたんだ突然

750 名前:login:Penguin mailto:sage [2010/03/24(水) 18:28:22 ID:JGtYY8P/]
find -exec command {} +
はもっと知れ渡るべき
日経Linux

751 名前:login:Penguin mailto:sage [2010/03/24(水) 21:53:30 ID:LVpGQGYh]
xargsに慣れちゃって、手が勝手に打っちゃうんだよな

752 名前:login:Penguin mailto:sage [2010/03/25(木) 00:42:02 ID:AS83wWPj]
>>730
hww

753 名前:login:Penguin mailto:sage [2010/03/25(木) 05:46:35 ID:bk8Jf0RP]
ちゃんと理解しながら読んでいればインデントなんて枝葉末節。
自分のコードならばこだわるかも知れないけどね。

754 名前:login:Penguin [2010/03/25(木) 07:38:08 ID:woPIYugI]
>>728
UNIX板で知った
ttp://www.opengroup.org/onlinepubs/009695399/utilities/test.html
の、APPLICATION USAGE から先が勉強になったです。
-a や -o より && や || でつなぐ方がよいとか。お題の部分についてはこれ。
test "$1" = "bat" -a "$2" = "ball"
syntax errors occur if $1 evaluates to '(' or '!'.
One of the following forms prevents this; the third is preferred:
test "X$1" = "Xbat" -a "X$2" = "Xball"
test "$1" = "bat" && test "$2" = "ball"
test "X$1" = "Xbat" && test "X$2" = "Xball"



755 名前:login:Penguin mailto:sage [2010/03/25(木) 10:18:07 ID:Bu4gYkWT]
>>750
man find
したら、-exec command {} +の下に
-execdir command
とか
-execdir command {} +
とかを見つけた。勉強になった。

こういう事があると電子辞書より紙の辞書の方がいいかもと思う。


756 名前:login:Penguin mailto:sage [2010/03/25(木) 23:03:23 ID:AS83wWPj]
>>753
とかほざく輩に限ってテストパターンは無限大な開放系のソースを書いちゃうの。
要はモデル化ができてないと。愚直というか馬鹿正直と言うか。

757 名前:login:Penguin mailto:sage [2010/03/25(木) 23:09:11 ID:P4/zjZQS]
>>745
お前いいやつだなw

758 名前:login:Penguin mailto:sage [2010/03/26(金) 03:02:23 ID:y6rsP+OO]
>>756 読解力ないんだな(プ

759 名前:login:Penguin mailto:sage [2010/03/26(金) 07:00:58 ID:joqM+Eq0]
>>758
より多くの人に読解できることを目的にしていないロジックはオナニーだろう。

760 名前:login:Penguin mailto:sage [2010/03/26(金) 07:13:10 ID:jyaRuxPh]
つまり日本語はオナニー

761 名前:login:Penguin mailto:sage [2010/03/26(金) 07:49:22 ID:WwpVuIlf]
セックスよりも気持ちいい

762 名前:login:Penguin mailto:sage [2010/04/02(金) 15:42:26 ID:la5bZF10]
bashなどで標準出力はデフォルトで画面となっていますが、具体的にはどのファイルになりますか?
debianですと/dev以下にあるのだと思いますが。

763 名前:login:Penguin mailto:sage [2010/04/02(金) 16:00:38 ID:FvuB/nMw]
>>762
ls -l /proc/$$/fd/1

764 名前:login:Penguin mailto:sage [2010/04/05(月) 20:18:53 ID:HX4Ssz6U]
フラシュメモリ をマウントするとき
# mount /dev/sdb1 /mnt/usb
こんな感じでやると思いますが、
もし、フラシュメモリが挿されていて、かつ、マウントされていない場合これを実行し
その他の場合、実行しないという、シェルスクリプトを教えてください



765 名前:login:Penguin mailto:sage [2010/04/05(月) 20:31:37 ID:hbFmdj3V]
>>764
問題点は
・フラッシュメモリがささってないことをどうやって判定するか
・マウントされていないことをどうやって判定するか
でしょ。
それシェルスクリプトの話じゃないよ。

766 名前:login:Penguin mailto:sage [2010/04/05(月) 21:02:20 ID:HX4Ssz6U]
>>765
やはり無理ですか、
・フラッシュメモリがささってないことをどうやって判定するか
・マウントされていないことをどうやって判定するか
ここは、Cか何かで実装し、結果によって、振る舞いを決めるしかなさそうですね

767 名前:login:Penguin mailto:sage [2010/04/05(月) 21:12:06 ID:8DwAi4Rq]
/dev/disk/by-uuid/ 見てそのUSBメモリがささってるか判定して
マウントは /proc/mounts とか /etc/mtab 見ればわかる

768 名前:login:Penguin mailto:sage [2010/04/05(月) 21:58:19 ID:HX4Ssz6U]
>>767
できました、ありがとう。
それにしても
>それシェルスクリプトの話じゃないよ。
とは・・・・

769 名前:login:Penguin mailto:sage [2010/04/05(月) 22:26:27 ID:bIAGjuYt]
え、どこがシェルスクリプト?

770 名前:login:Penguin mailto:sage [2010/04/05(月) 22:26:30 ID:V3kmV0qU]
シェルの機能に全く関係ない話だから、スレ違いと言われても仕方ない

771 名前:login:Penguin mailto:sage [2010/04/05(月) 23:04:52 ID:10PWkAma]
>>769-770
君たちはきっとUNIX板のシェルスクリプトスレのほうが馴染むよ
向こうに移ったら?

772 名前:login:Penguin mailto:sage [2010/04/05(月) 23:09:37 ID:Do3l7NFE]
シェルの文法と組み込みコマンド以外は
スレ違い。

773 名前:login:Penguin mailto:sage [2010/04/06(火) 00:29:43 ID:cl/KUIMr]
そこまでは言わないけどさ、
>>764 のスクリプトって

>>765 && mount /dev/sdb1 /mnt/usb

で終わりじゃん。
あとは >>765 の条件をどう書くかだけ。
そこはシェルスクリプトの話じゃない。

774 名前:login:Penguin mailto:sage [2010/04/06(火) 23:07:19 ID:hKo4mn1/]
退屈すぎるんだよ
ただ手順を羅列していくだけの命題はこのスレではシェルスクリブトではない判定



775 名前:login:Penguin mailto:sage [2010/04/08(木) 12:37:33 ID:FdKyqazj]
/path//mydirというディレクトリが確かに存在します。
rm -rf path/mydir
とすれば削除できるのに
if [-d /path/mydir ]; then rm -rf path/mydir
とすると削除できません。

何故でしょうか。

776 名前:login:Penguin mailto:sage [2010/04/08(木) 12:49:32 ID:BdM60+Gl]
すばやくシェルスクリプトを作る方法を教えてください。

777 名前:login:Penguin mailto:sage [2010/04/08(木) 13:03:15 ID:ahHfR+UP]
>>775
if [ -d /path/mydir ]; then rm -rf /path/mydir

778 名前:login:Penguin mailto:sage [2010/04/08(木) 13:11:54 ID:YRM82Sus]
>>776
俺は指におもりをつけて毎日8時間訓練している。
だいぶ重いスクリプトも楽々書けるようになった。
でもやり過ぎには注意な。
知り合いに、焦点性ジストニアになってシェルスクリプターへの道を絶たれたやつが何人も居る。

779 名前:login:Penguin mailto:sage [2010/04/08(木) 15:13:49 ID:FdKyqazj]
揚げ足はいいからさっさと答えろボケ

780 名前:login:Penguin mailto:sage [2010/04/08(木) 15:21:34 ID:0e8PS1D/]
まず服を(ry

781 名前:login:Penguin mailto:sage [2010/04/08(木) 15:24:54 ID:rTqLBiaG]
>>779
問いが支離滅裂なので回答不能です

782 名前:login:Penguin mailto:sage [2010/04/08(木) 15:27:17 ID:ahHfR+UP]
>>779
ん? >>777 じゃ違った?
んじゃ権限まわりを確認。

783 名前:login:Penguin mailto:sage [2010/04/08(木) 16:01:31 ID:P25bssZd]
いきなりifとrmまとめずに

if [-d /path/mydir ]; then echo hoge

がhogeを出力するかどうかぐらい切り分けしようぜ。

784 名前:login:Penguin mailto:sage [2010/04/08(木) 16:03:13 ID:ahHfR+UP]
>>783
[ と -d は離さないとだめだよ。



785 名前:login:Penguin mailto:sage [2010/04/09(金) 16:33:43 ID:8l460jgK]
最近の初心者は、[ も一つのコマンドであることすら知らんのか?

786 名前:login:Penguin mailto:sage [2010/04/09(金) 16:36:53 ID:wbxQcOPK]
昔の初心者もそうだよ。

787 名前:login:Penguin mailto:sage [2010/04/09(金) 17:26:28 ID:ZKESoIes]
おじいちゃん、乙!

788 名前:login:Penguin mailto:sage [2010/04/09(金) 19:57:43 ID:1H+gjPy/]
[ ってコマンドだったの?

玄人だけど始めて知ったよ?orz

789 名前:login:Penguin mailto:sage [2010/04/09(金) 20:04:23 ID:5ssP89Ht]
LPICレベル3coreに受かったばかりの素人だけど
[]はtestコマンドの略式じゃなかったかな

790 名前:login:Penguin mailto:sage [2010/04/09(金) 20:26:24 ID:wbxQcOPK]
>>788
type [
help [

791 名前:login:Penguin mailto:sage [2010/04/09(金) 20:27:45 ID:i0zzyora]
>>788
コマンドじゃないなら何なんだよ

792 名前:login:Penguin mailto:sage [2010/04/09(金) 22:04:47 ID:+RKMLUfB]
>>791
構文。

C言語の == は関数ではないし。

793 名前:login:Penguin mailto:sage [2010/04/09(金) 22:06:05 ID:StH4VNmO]
昔は、[ は test へのハードリンクと決まってたもんだが、
いま手元のFedora 12を見たらそうじゃなかった。(ファイルサイズも違うし…)
やっぱり日々勉強ですな。

794 名前:login:Penguin mailto:sage [2010/04/09(金) 22:10:28 ID:wbxQcOPK]
>>793
coreutils の lbracket.c 読んでみ。



795 名前:login:Penguin mailto:sage [2010/04/09(金) 22:27:52 ID:StH4VNmO]
>>794
読んだ。
面白いけど、Coolとは言えんなぁ…

796 名前:login:Penguin [2010/04/10(土) 23:41:09 ID:IGsQWo8s]
grepで検索行以外の行を抽出する方法は無いでしょうか?

797 名前:login:Penguin mailto:sage [2010/04/11(日) 00:27:05 ID:eH4Novr7]
grep -v '文字列'

798 名前:login:Penguin [2010/04/11(日) 00:34:34 ID:3KDsWIIS]
>>797
ありがとう

799 名前:login:Penguin mailto:sage [2010/04/11(日) 16:13:06 ID:1yJmv1GD]
初めてシェルスクリプトを加工としていまうs

サブルーチンを作る参考にしようと#!/bin/shなファイルを見ているんですが
関数を使ったスクリプトはほとんどありません
こういうものでしょうか?

任意の値を返せないのでグローバルな変数を介する必要があると思いますが
保守性が低下しないうまい定義の仕方というのはあるんでしょうか

あるいは関数を使わなくてもいいようなシェルスクリプトの特有のコンセプト
とか書き方があるんでしょうか

漠然とした質問ですいません

800 名前:login:Penguin mailto:sage [2010/04/11(日) 16:21:22 ID:ESnWs44w]
漠然としてるねぇ。
もうちょっとスクリプト書きに慣れてから考えればいいんじゃないかな。

801 名前:login:Penguin mailto:sage [2010/04/11(日) 17:04:57 ID:btbPPhym]
いやそれより、初心者向きの参考書でも買って
一からじっくり勉強した方が良いと思う。
>>799は、ここで質問して解決するスキルレベルに程遠い。

802 名前:login:Penguin mailto:sage [2010/04/11(日) 17:49:36 ID:O63F6ul8]
>>801さんまじかっけー

803 名前:login:Penguin mailto:sage [2010/04/11(日) 20:21:58 ID:bAKRtVTC]
>関数を使ったスクリプトはほとんどありません
>こういうものでしょうか?
いえ。
ただ、スクリプトは、
1) 手っ取り早く仕上げる事が多いので十分に最適化されない
2) 最適化されたスクリプトは必ずしも可読性がよくないので敢えて最適化しない
といったことはあると思います。

804 名前:login:Penguin mailto:sage [2010/04/11(日) 20:51:15 ID:eH4Novr7]
わざわざ外部関数までつくって何でもシェルスクリプトでやるより多言語から単体のシェルスクリプト叩かせたほうが安心できる



805 名前:login:Penguin mailto:sage [2010/04/12(月) 01:55:25 ID:56zfLj4c]
>>803
回答ありがとうございます

最適化というのがどういうものか具体的には分かりませんが、例えば関数を組み合わせようと
すると値をやり取りするグローバル変数が必要になるのではと考えました。しかし、必要に
なるごとに関数内で定義、参照するとそういった変数がどこでどう利用されているか確認しなければ
ちょっとした変更も危険になると思います。あるいはメインの手続き側に定義を羅列するとしても
どう利用するのかはコメントでもしないかぎり分からないし、そもそも構造内部を関数へと段階的に
隠蔽する目的を果たせなくなってしまい、やはり可読性保守性は低下します。一方でルールベース
の対策でこういった問題を解決できるようにも感じたので、そういったことについてベーシックな議論を
している人たちがいるのではと思い質問しました。

しかしこのスレッドを読んでいると>>803(1)や>>804にあるように、そういう道具だと割りきって使う
ものだという風にも思いました。シェルスクリプトの欠点を何千万人もの人があえて見なかったこと
にして使っているとすると、とても面白いことですね。それだけ目的を満足させる道具で、また知っ
て初めて分かる魅力があるということなんでしょうかね

(2)については一枚目から鱗が落ちました。習作のつもりでUTF8のテキストをEUC-JPに変換して
からa2psでポストスクリプトを生成するコードを再発明しているのですが、たしかに関数を使っても
全然読みやすくなっていない! いや、正確には処理の始点と大枠の処理の流れは把握しやすく
なっていますが、コード量は後付けでどんどん増加するし、ちょっとした読みやすさのために定義
したマクロ的関数は、それ単体でみるとなんとも得体の知れないものになっていました。

色々な機能を試したいというのもあるのですが、やはり簡潔で読みやすいコードを書くということを
前提にして、そのうえでシェルスクリプトらしい書き方を身につけるようにします

806 名前:799,805 mailto:sage [2010/04/12(月) 02:02:53 ID:56zfLj4c]
勢いでいい子ちゃんぶった嘘をつきました・・
たぶん動けば汚くてもいいやの精神でなんだかよく分からないコードを書き続けると思います
ゴメンナサイです

807 名前:login:Penguin mailto:sage [2010/04/12(月) 11:43:55 ID:Qe0ukjkj]
/usr/binの中に'['とかゴミがあったので削除したら、起動しなくなったという
笑い話をよく聞いたな。

808 名前:login:Penguin mailto:sage [2010/04/12(月) 12:14:55 ID:Cm3bm4a3]
>>807
ほう、それは初耳だ。
いまどきの sh は [ を内蔵しているので、
外部コマンドの [ を意図して呼ばないかぎり存在しなくても問題ない。
[ が外部コマンドだった昔は、[ は /usr/bin ではなく /bin にあった。
# つーか、/usr/bin/[ なんて今でも linux だけ。


809 名前:login:Penguin mailto:sage [2010/04/12(月) 13:13:25 ID:s3PYGw84]
ここはLinux板ですから

810 名前:login:Penguin mailto:sage [2010/04/12(月) 13:31:44 ID:FrL0zKPd]
「[ を消してうんぬん」は Linux 以前の時代の話だと思う。

811 名前:login:Penguin mailto:sage [2010/04/12(月) 18:27:16 ID:rk0wy3GT]
プロプラの古いshを使ってないと通じないジョークだな

812 名前:799 mailto:sage [2010/04/17(土) 23:26:31 ID:f4tmK5PF]
先だっては大変お世話になりました
なんとか動くっぽいもの書けました

根本的に間違ってるところやイディオムに直すべきところなど多々あるんだろうと
思うんですが、身近に聞ける人がいなくて困ってます。ので誰かにレビューして欲しいです
なにとぞ、なにとぞー

up.af/015849

813 名前:799 mailto:sage [2010/04/17(土) 23:38:16 ID:f4tmK5PF]
すんません私のファイルはこっちでした
上のTシャツおっぱいは忘れてください^^
up.af/015867

814 名前:login:Penguin mailto:sage [2010/04/17(土) 23:41:35 ID:xq8djkPZ]
わざ。わざ



815 名前:login:Penguin mailto:sage [2010/04/18(日) 13:57:11 ID:XFWJRzoK]
献上品のTシャツおっぱいが404なので眺めるだけな

>#!/bin/sh
dashで動作確認したのなら素直に#!/bin/dash

> file_num=`expr $file_num + 1`
exprいらなそう
file_num=$((file_num + 1))

> local num=0
> for num in `seq 1 $file_num`; do
> source_files_get $num
> MESSAGE "converting: $file"
> cat "$file" | $NKF -e > "$temp_dir/${file##*/}"
> done
seqとcatいらなそう
local num=1
while [ $num -le $file_num ]; do
 source_files_get $num
 MESSAGE "converting: $file"
 $NKF -e "$file" > "$temp_dir/${file##*/}"
num=$((num + 1))
done

>local status=1
local使う意味なし&多分bashでコケる

816 名前:login:Penguin mailto:sage [2010/04/19(月) 01:23:48 ID:ZAvND9//]
>>815
式展開というものが色々あるんですね
むやみに外部コマンドを呼ばないという発想もなかったです
マニュアルを引いてあれこれ確認したいと思います
レスありがとうございました

817 名前:login:Penguin mailto:sage [2010/04/21(水) 22:02:51 ID:CZfDlwcf]
>>813
python風のループだな。
LLみたいに関数を使いたければ値をやり取りするフレームワークを書けばよいかも。

818 名前:login:Penguin mailto:sage [2010/04/22(木) 23:27:27 ID:eajRO0wt]
commandA > file
commandB > file

{ commandA; commandB; } > file

はどっちの方がいいの?
後者の場合は、シェルによってはサブシェルが起動するって聞いたけど本当貝。

819 名前:login:Penguin mailto:sage [2010/04/22(木) 23:48:35 ID:sUoTjkov]
>>818
上意味違うだろ。

820 名前:login:Penguin mailto:sage [2010/04/22(木) 23:52:47 ID:eajRO0wt]
間違えた!
前者は

commandA > file
commandB >> file

821 名前:login:Penguin mailto:sage [2010/04/23(金) 00:01:08 ID:sUoTjkov]
正直、目くそ鼻くそじゃね?


822 名前:login:Penguin mailto:sage [2010/04/23(金) 00:03:10 ID:4U7Ovp/A]
そう?
じゃあ気にしないでいいか。

823 名前:login:Penguin mailto:sage [2010/04/23(金) 00:10:54 ID:Odx5g+6A]
悩んでるうちに書いて実行した方が仕事は早く終わるだろ。

824 名前:login:Penguin mailto:sage [2010/04/23(金) 05:48:09 ID:0SL93pt/]
>>818
後者のほうが効率いい



825 名前:login:Penguin mailto:sage [2010/04/24(土) 12:19:07 ID:uV1EwGDC]
>>824
スクリプトの一文が長すぎる。
パイプラインもメンドイ。

826 名前:login:Penguin mailto:sage [2010/04/24(土) 22:06:24 ID:F/lhQSxk]
>>818
前者の場合、commandAの出力はどうなるのかな?w

827 名前:login:Penguin mailto:sage [2010/04/24(土) 22:21:58 ID:loCBys/t]

大丈夫かな、この人・・・

828 名前:login:Penguin mailto:sage [2010/04/24(土) 22:57:54 ID:XH+rWnSs]
笑っとけ笑っとけ。

829 名前:login:Penguin mailto:sage [2010/04/24(土) 23:02:02 ID:/2NBYvX3]
>>826
修正してるじゃないか、 >>820

830 名前:login:Penguin mailto:sage [2010/04/24(土) 23:03:08 ID:loCBys/t]
恥ずかしいね

831 名前:login:Penguin mailto:sage [2010/04/24(土) 23:51:55 ID:ra/w56Dm]
>>825
あれで長いって、普段どんなスクリプト書いてんだ?

832 名前:login:Penguin mailto:sage [2010/04/25(日) 09:35:32 ID:iXPvNLwg]
>>831
いや、引数が100個とかになってきたら。

潰しが利かない。

833 名前:login:Penguin mailto:sage [2010/04/25(日) 09:37:17 ID:pW61wlqY]
意味不明

834 名前:login:Penguin mailto:sage [2010/04/25(日) 09:39:20 ID:iXPvNLwg]
>>833
脊髄じゃなく、脳で考えてください。



835 名前:login:Penguin mailto:sage [2010/04/25(日) 10:09:49 ID:ZtdJByaw]
その価値のある文章を頼む。

引数とはどの部分の引数なのか?
潰しが利かないという主張の根拠は?

836 名前:login:Penguin mailto:sage [2010/04/25(日) 10:39:21 ID:MLqGsd45]
これ以上この話を続けても有益な情報は得られないと思う。

837 名前:login:Penguin mailto:sage [2010/04/25(日) 11:27:46 ID:iXPvNLwg]
>>818
commandA > file
commandB >> file

{ commandA; commandB; } > file

コマンドが100個になったのでwhileで省力化したい。

上の方
rm -f file 2>/dev/null

while read cmd;do
$cmd >> file
done < cmds.txt


下の方
xargsを使えば出来そうだけど{}が内部コマンドなのが気になる。
1行のコマンドラインの文字数制限があるシェルもある。
ので、汎用性が無い。



838 名前:login:Penguin mailto:sage [2010/04/25(日) 11:34:27 ID:iXPvNLwg]
制御構造の使えないシェルスクリプトなんて、バッチファイルの如く、無価値である。

839 名前:login:Penguin mailto:sage [2010/04/25(日) 11:37:39 ID:GR3waYM0]
>>837
よくわかんねえけど
そのcmd.txtって、事実上シェルスクリプトだよな

単に
sh cmd.txt >file
でいいんじゃねえの

840 名前:login:Penguin mailto:sage [2010/04/25(日) 11:46:22 ID:gQNuPSjh]
wwww

841 名前:login:Penguin mailto:sage [2010/04/25(日) 11:49:42 ID:iXPvNLwg]
>>839
そだな。それが最適解だ。

842 名前:login:Penguin mailto:sage [2010/04/27(火) 22:06:55 ID:HNWNlh/r]
for((i=0; i<6; i++)){
array=("${array[@]}" "i")
}

echo "${array[@]}"

これを実行すると下記のように出力されます。
0 1 2 3 4 5

カンマ区切りで下記のように出力する方法ありますか?
0, 1, 2, 3, 4, 5


843 名前:login:Penguin mailto:sage [2010/04/27(火) 23:08:31 ID:3UTvz9hd]
>>842
最後の出力を実現するのなら seq -s ', ' 0 5 で済むけど、
配列の各要素を任意の区切文字で繋げて出力する方法を知りたいということかな

zsh/ksh なら echo ${(j:, :)array} でできるけど、bash でどうなのかは知らない

844 名前:login:Penguin mailto:sage [2010/04/27(火) 23:18:40 ID:HNWNlh/r]
>>843
説明不足で申し訳ないです。

配列の各要素をカンマ区切りで出力する方法です。

・訂正します
array=(1 2 a b 3 c )
echo "${array[@]}"

これを実行すると下記のように出力されます。
1 2 a b 3 c

カンマ区切りで下記のように出力する方法ありますか?
1, 2, a, b, 3, c


echo ${(j:, :)array} は使えませんでした。



845 名前:login:Penguin mailto:sage [2010/04/27(火) 23:37:13 ID:wOLuHHkh]
>>844
IFS="," ; echo "${array[*]}"


846 名前:login:Penguin mailto:sage [2010/04/28(水) 10:15:03 ID:ttzp8AMm]
echo "${array[@]}" | sed 's/ /, /g'

847 名前:844 mailto:sage [2010/04/28(水) 11:26:50 ID:+626EOW1]
>>845-846
できました!ありがとうございました。







[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前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