1 名前:login:Penguin mailto:sage [2008/05/17(土) 13:44:57 ID:9hFWtCOD] UNIX板のスレを見ている方も多数おられるかと思いますが、 まあそれはそれとして、BASHウゼーとか言われる心配なく 平和にLINUX的スクリプト談義しましょうよ。 初めての自作スクリプト、自信ないから見てください。な初心者から トリッキーな技を駆使した作品を披露したい、蘊蓄を語りたい上級者まで いろいろな人に参加して頂けると嬉しいです。 perlやらPythonやらの話が混ざっても良いんでない? 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 あたりに色々と。
428 名前:login:Penguin mailto:sage [2008/08/10(日) 21:22:42 ID:3WlJmUth] >>426 >> こんな風に定義すると要素の数 ${#x[@]} は 5 を返しますが > うちでは 6 になる。 あれ?自分の環境 (bash 2.05b @ debian) では 5 なんだけどな。 そちらの環境を教えてくれますか?
429 名前:login:Penguin mailto:sage [2008/08/10(日) 21:51:14 ID:uOwkyJaM] あ、ごめん。zsh でやっていた。 bash で set すると、 $ set x=([0]="a" [1]="b" [2]="c" [4]="e" [6]="g") で、添え字と要素がセットでズバり出るじゃないですか。
430 名前:login:Penguin mailto:sage [2008/08/10(日) 23:04:19 ID:3WlJmUth] >>429 ああ、そうでした。確かに表示されますね。 [] とか = とか変な文字が要素に入らないという前提なら そこから添え字のみを取り出せればいけそうですね。
431 名前:login:Penguin mailto:sage [2008/08/14(木) 21:23:54 ID:6SkumsSk] 基本的なことで、すいまん bashで、たとえば # login : root # passwd : foo なんて場合、シェルからの問い合わせに対して、スクリプト側で rootやfooを自動的に入力したいのですが、どのように書いたらいいのでしょうか?
432 名前:login:Penguin mailto:sage [2008/08/14(木) 21:24:45 ID:6SkumsSk] BATU 基本的なことで、すいまん MARU 基本的なことで、すいません
433 名前:login:Penguin mailto:sage [2008/08/14(木) 21:44:42 ID:Q5H0d7m9] >>431 expect
434 名前:login:Penguin mailto:sage [2008/08/14(木) 21:52:17 ID:6SkumsSk] >>433 イクスペクトですか、ありがとう
435 名前:login:Penguin mailto:sage [2008/08/17(日) 13:04:54 ID:id1iDBNz] >>433 bashで
436 名前:login:Penguin mailto:sage [2008/08/18(月) 22:17:27 ID:P4gPyZDt] グループ sumo が存在するか? を調べる方法が思いつかない。 ユーザ hakuho の存在を調べるのは、 id hakuho などとやろうと思うが、グループの方をhelp!! grep /etc/group はやりたくない。
437 名前:login:Penguin mailto:sage [2008/08/18(月) 23:25:02 ID:Wi4hQzW9] >>436 くだらねえ質問はここに書き込め! Part166 pc11.2ch.net/test/read.cgi/linux/1217051698/
438 名前:login:Penguin mailto:sage [2008/08/18(月) 23:35:20 ID:tdXNnNro] LANG=C chgrp hakuho / 2>&1 | grep -q '^chgro: invalid group' || echo ok
439 名前:login:Penguin mailto:sage [2008/08/19(火) 08:01:52 ID:GbBy+Szp] chgrpされたら困るやん。
440 名前:login:Penguin mailto:sage [2008/08/19(火) 08:17:46 ID:yV2lM3C5] root じゃなきゃ大丈夫でしょ。
441 名前:login:Penguin mailto:sage [2008/08/19(火) 11:14:23 ID:i/uDMj66] んな罠みたいなスクリプトはちょっと。
442 名前:login:Penguin mailto:sage [2008/08/19(火) 11:19:47 ID:yV2lM3C5] 他に思いつかないんだよな。 素直に /etc/group を grep するのが一番だと思う。
443 名前:login:Penguin mailto:sage [2008/08/19(火) 11:30:56 ID:Z4idUwk9] grep /etc/group はやりたくないそうだから仕方ない
444 名前:login:Penguin mailto:sage [2008/08/19(火) 11:31:37 ID:yV2lM3C5] NIS とか LDAP とか使ってるなら perl あたりで getgrnam とか。
445 名前:login:Penguin mailto:sage [2008/08/19(火) 22:33:06 ID:/3aOZv4D] NISもLDAPも使ってないが、これは良いかもしれない。ありがとう。 $ perl -e '($n, $p, $g, $m) = getgrnam 'lp'; printf "%s\n", $g' 7
446 名前:login:Penguin mailto:sage [2008/08/21(木) 00:34:13 ID:uS1Qpazh] bash使ってるのですが lsすると何も返ってこないです set +mするとかえってきます 何が悪いのかさっぱりわかりません
447 名前:login:Penguin mailto:sage [2008/08/21(木) 02:06:11 ID:hLnB3a+h] >>446 type ls するとどう出る?
448 名前:login:Penguin mailto:sage [2008/08/25(月) 22:22:20 ID:q8+dK05f] echo $"Starting XXXX daemon..." という一文の「$」の意味を解しかねてるんだども…
449 名前:login:Penguin mailto:sage [2008/08/25(月) 22:30:19 ID:TaEIkWlk] % echo $"Starting XXXX daemon..." $Starting XXXX daemon... % echo "$Starting XXXX daemon..." XXXX daemon... %
450 名前:login:Penguin mailto:sage [2008/08/25(月) 22:34:16 ID:i+OsnagO] >>448 ja.po とか作るときに $" " で囲んだところが 翻訳の対象として切り出される。 メッセージ カタログ化 とかでググれ。
451 名前:login:Penguin mailto:sage [2008/08/25(月) 23:32:42 ID:w1+LX6rA] これすか… bash(1) > --dump-po-strings > Equivalent to -D, but the output is in the GNU gettext po (portable object) file format. 試しに /usr/share/locale/ja/LC_MESSAGES/XXXX.mo を作ってみたが、日本語にならない。 あうあう。。。 「$」はぶった切ることにします。
452 名前:login:Penguin mailto:sage [2008/08/25(月) 23:49:02 ID:i+OsnagO] >>451 急ぎじゃなかったら少し頑張ってみるといいかも。 前作ったもの見たらこんな感じで作業してたらしい。 $ xgettext -o hoge.po hoge.sh $ gtranslator hoge.po $ msgfmt -o hoge.mo hoge.po hoge.sh の中にはこんなのが書いてあった。--> if [ -z "$TEXTDOMAIN" ] ; then TEXTDOMAIN="hoge" TEXTDOMAINDIR="/usr/share/locale" fi <-- TEXTDOMAIN="hoge.sh" じゃなくて TEXTDOMAIN="hoge" にしてあるのは hoge.sh をインストール時に /usr/bin/hoge に改名(hoge.sh から hoge に)するため。
453 名前:login:Penguin mailto:sage [2008/08/26(火) 23:01:28 ID:JsSv3XDz] gtranslator てのが無かったので、 $ sh --dump-po-strings XXXX > ~/XXXX.po とし、msgfmt 以降同様にすると日本語になりました。 どうもありがとう。
454 名前:login:Penguin mailto:sage [2008/08/31(日) 15:42:27 ID:aoYJcwTK] ?$
455 名前:login:Penguin [2008/09/01(月) 09:58:54 ID:LEXE4Xrt] C言語でいう for (float a=0.1;a<1.5;a+=0.1){ } の様なループはどのように書けばよいのでしょうか?
456 名前:login:Penguin mailto:sage [2008/09/01(月) 10:38:54 ID:zLmvj5ED] >>455 小数とか使いたいなら もっとまともな言語使った方がいいよ。
457 名前:login:Penguin mailto:sage [2008/09/01(月) 12:17:57 ID:qt+GSvTX] for i in `seq 1 20` do i=`echo "scale=1; $i / 10" | bc` echo $i done
458 名前:login:Penguin mailto:sage [2008/09/01(月) 17:56:42 ID:gt+0kg/y] やっぱループ変数は整数だよな。 少数は気持ち悪い。
459 名前:login:Penguin mailto:sage [2008/09/01(月) 23:52:23 ID:yMJ8hMF5] $ cat aso killall fukuda
460 名前:login:Penguin mailto:sage [2008/09/02(火) 01:01:15 ID:iTMiNYXN] >>458 気持ち悪いどころか、有害。 for(float a=0;a<=1.0;a+=0.1){printf("%g ",a);} ⇒ 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9
461 名前:login:Penguin mailto:sage [2008/09/02(火) 02:16:22 ID:NrY9TL/o] >>460 勉強になります。 使った事ないし、使う場合はテストするのでだいじょぶだけど。 でも絶対やらんよねw Cやってるやつは。 すれち
462 名前:login:Penguin mailto:sage [2008/09/02(火) 04:38:59 ID:dzMMfnry] bcで計算させたとき、0以下の小数は最初の0を抜いた.2のように表示されますが、 0.2の様な表示にはできませんか?
463 名前:login:Penguin mailto:sage [2008/09/02(火) 09:52:47 ID:bHR8SDTE] 0 ≧ .2 なのか。
464 名前:login:Penguin mailto:sage [2008/09/03(水) 00:04:05 ID:aqC4nv+U] >>463 浮動小数点の比較を工夫なく行う奴はアホ。
465 名前:login:Penguin [2008/09/05(金) 21:49:46 ID:eUOT1mPo] sed を | で つなぐんじゃだめ?
466 名前:login:Penguin mailto:sage [2008/09/06(土) 00:00:19 ID:x4tIq2Vd] #!/bin/sh echo '%A4%A2' | tr % = | nkf -emQ 「あ」と表示させたいのですが、「、」」と表示されてしまいます。 正しい書き方を教えてください。
467 名前:login:Penguin mailto:sage [2008/09/06(土) 05:03:55 ID:/FPWBzOe] うち(EUC環境)では「あ」と表示される。
468 名前:login:Penguin mailto:sage [2008/09/06(土) 08:59:05 ID:6Sr65r/p] >>466 テキストに落とすとEUCで「あ」に見える
469 名前:login:Penguin mailto:sage [2008/09/06(土) 23:40:32 ID:O24UR7Eo] >>466 の環境がUTF-8なら #!/bin/sh echo '%A4%A2' | tr % = | nkf -wmQ
470 名前:login:Penguin [2008/09/08(月) 22:09:56 ID:tYV0ghqH] 引数 output-file input-file1 input-file2 ... を受け取ってinput-fileN に some-dir/ を付加したコマンド引数を他のプログラムの引数として与えたいのです。 つまり、 foo yaruo.out vip.txt vipper.txt vippest.txt でfooを実行して、そのfoo内では bar yaruo.out www/vip.txt www/vipper.txt www/vippest.txt を実行するということがしたいのです。 こんなスクリプトを作成するには、fooをどのように記述すればいいのでしょうか。 よろしくお願いします。
471 名前:login:Penguin mailto:sage [2008/09/08(月) 22:27:43 ID:UFg0tXoN] もう宿題の季節なのか?一箇所直してから使ってくれ。 #!/bin/bash org=www; ARG1=${1}; shift; echo bar ${ARG1} ${@/#/${org}/}
472 名前:login:Penguin mailto:sage [2008/09/08(月) 22:50:15 ID:4IH3dQd+] >>470 あのね、 宿題を出す先生は、このスレもチェックしてるからね、 >>471 のを出しても 0 点だからwww ゆっくり 0 点にしてってね!
473 名前:login:Penguin [2008/09/08(月) 22:54:09 ID:tYV0ghqH] >>471 残念ながら宿題ではないのです〜 ありがとうございました。
474 名前:login:Penguin mailto:sage [2008/09/08(月) 23:03:49 ID:QeMmaTeA] うちの大学の先生はプログラム板も見ていた
475 名前:login:Penguin mailto:sage [2008/09/08(月) 23:09:05 ID:/XLojU6V] 先生も激務だな
476 名前:login:Penguin mailto:sage [2008/09/08(月) 23:45:08 ID:lCRZh05X] 悪いな、おいらは数学板だけでなく、 日本語のあらゆる数学質問掲示板を巡回している。 必ず学生が質問をしやがるから。 レポートを返すときに、そのスレおよび掲示板のコピーを添付して、念のため確認をとる。 初めから正直に引用したと書いてあるものについては、改めて口頭で説明させている。
477 名前:login:Penguin mailto:sage [2008/09/09(火) 08:43:21 ID:7p63VvoV] 院生にやらせそうな案件だな
478 名前:login:Penguin mailto:sage [2008/09/11(木) 23:43:43 ID:6JSrg1Nn] 実際に教授がやってたら笑いものだな。 そこまで熱心にありがとうございます、と学生ながらに思うべきか。 ただ、ねぇ・・・
479 名前:login:Penguin mailto:sage [2008/09/12(金) 01:07:51 ID:Hfrl7+Fx] >>478 いや、日本だけってわけでなく海外でも今や引用元チェックとか行っているよ。
480 名前:login:Penguin mailto:sage [2008/09/12(金) 18:08:43 ID:9WCeRGBW] へー
481 名前:login:Penguin mailto:sage [2008/09/12(金) 21:11:04 ID:lKrrIxw4] 3年前ほどにアメリカのテレビドラマで高校の先生がエッセイの宿題を返す場面を見た。 ある学生に返しながら、「素晴らしいエッセイだったわ。 essay.com(のような感じ)ね? 月曜までに自分で書いて来てね」
482 名前:login:Penguin mailto:sage [2008/09/13(土) 02:57:01 ID:+1Gk57wR] 問題も自分で作ってね
483 名前:login:Penguin mailto:sage [2008/09/19(金) 18:18:28 ID:0H1973GE] >>479 手作業じゃないよね。日本語を解析できるツールはまだできてないよ。
484 名前:login:Penguin mailto:sage [2008/09/25(木) 00:19:59 ID:t0y6Jov+] fdisk /dev/sdb n p 1 w ↑こんな感じで、入力させていきたいのですが、 方法がわかりません。キーボード 入力 シェル スクリプト あたりでぐぐると、キーボードからの入力を受け付ける、しか見つかりませんでした。 方法を教えてください。
485 名前:login:Penguin mailto:sage [2008/09/25(木) 01:43:59 ID:Khd+tIc7] >>484 expect
486 名前:login:Penguin mailto:sage [2008/09/25(木) 09:57:28 ID:fRZ/kmS9] >>484 sfdisk
487 名前:login:Penguin mailto:sage [2008/09/25(木) 19:47:43 ID:wpIij73K] >>484 >> EOF
488 名前:login:Penguin mailto:sage [2008/09/25(木) 19:55:28 ID:oa1dgrD9] ( echo n; echo p; echo 1; echo w ) | fdisk /dev/sdb 入力が端末かどうかちゃんとチェックしてるようなモノだと動かないが、 fdisk はそんなことしてなかったはずなので、ふつーに標準入力からつっこめばよし。
489 名前:login:Penguin mailto:sage [2008/09/27(土) 00:45:11 ID:9WMmgXah] ゴミ箱スクリプト使ってるひといる?
490 名前:login:Penguin mailto:sage [2008/09/27(土) 01:12:09 ID:s/QKRkEt] あい。
491 名前:login:Penguin mailto:sage [2008/09/28(日) 03:42:58 ID:yjLf4XT+] ゴミ箱に入ってるファイルを復元させるやつなら使ってる
492 名前:login:Penguin mailto:sage [2008/09/29(月) 04:13:28 ID:nMbRNXLX] ティルダ(~)展開について質問。 #!/bin/bash ls ~/ directory="~/" ls $directory 上側のように直接書いたものは展開されますが、下側のように変数に入れたものは展開されません。 変数に入った「~」を展開するにはどうすればいいのでしょうか。
493 名前:login:Penguin mailto:sage [2008/09/29(月) 04:17:44 ID:dNtmh/2+] directory=~/
494 名前:492 mailto:sage [2008/09/29(月) 08:48:30 ID:dqlgrzbc] うわ、そんなことだったのか。ありがとうございます。 では、read directory; などでファイルから読んだ場合はどうすればいいんでしょう。
495 名前:492 mailto:sage [2008/09/29(月) 10:56:52 ID:dqlgrzbc] あ、わかりました。eval 使えばいいんですね。 ファイルからティルダ(チルダ)含んだパスを読み込むことなんかよくあると思うんだけど、 そういったシチュエーションでの展開は解説されてませんねえ。 基本的な展開の話ばかりで。
496 名前:login:Penguin mailto:sage [2008/09/29(月) 11:06:17 ID:6KBzfDQe] eval って書こうとしたら自己解決してたか。 >ファイルからティルダ(チルダ)含んだパスを読み込むこと 俺は経験無いけど、良くあることなの?
497 名前:login:Penguin mailto:sage [2008/09/29(月) 12:14:07 ID:PrjYZQYT] > 俺は経験無いけど、良くあることなの? んー、俺もそもそもスクリプトはあんまり書かないんだけど、 ちょっと今回必要があって、とあるファイルにつらつらと書かれたパスに対して 順番に処理かけていくスクリプトを組んだ。 よくあるかと思ったのは単なる想像。使ったスクリプトが悪かったかな?
498 名前:login:Penguin mailto:sage [2008/09/29(月) 12:15:02 ID:PrjYZQYT] アレ、ID 変わってる。 >>495 です。
499 名前:login:Penguin mailto:sage [2008/09/29(月) 13:09:37 ID:M1tw2hRO] むしろ勝手に解釈されたら困ることの方が多そう。
500 名前:login:Penguin mailto:sage [2008/09/29(月) 17:00:59 ID:DE65cKXI] $HOMEの方がいいと思う
501 名前:login:Penguin mailto:sage [2008/10/14(火) 23:13:02 ID:IUh0ZsYq] 16進数がずらーっと並んでいるテキストファイルを手で入力しています。 手入力なのでうっかり16進数の[0-9a-f]以外の文字がはいってしまうこと があるのですが、「このファイルには[0-9a-f]以外がはいってる」ということ を検出するいい方法はないでしょうか。
502 名前:login:Penguin mailto:sage [2008/10/14(火) 23:18:11 ID:peqExbxa] とりあえず grep -v '[0-9a-f]' みたいな
503 名前:login:Penguin [2008/10/14(火) 23:55:57 ID:VVRxoluk] >>501 なつかしい作業だね。 いまどき、そんな事やるひつようあるの?
504 名前:login:Penguin mailto:sage [2008/10/15(水) 01:23:45 ID:oM4m5G9h] >>502 試してから書けよ。 $ echo 00 | grep -v '[0-9a-f]' $ echo 0x | grep -v '[0-9a-f]'
505 名前:login:Penguin mailto:sage [2008/10/15(水) 01:26:34 ID:YCs9R2r/] grep '[^0-9a-f]' ですね、失礼しました
506 名前:login:Penguin mailto:sage [2008/10/15(水) 01:34:48 ID:IbpEXu/h] [ x"$hoge" = "x" ]というようなのをたまに見かけるんだけど [ "$hoge" = "" ]となにがちがうの?
507 名前:login:Penguin mailto:sage [2008/10/15(水) 01:46:00 ID:Z5rHmxLW] >>506 - で始まる文字列返されると困るから。
508 名前:login:Penguin mailto:sage [2008/10/15(水) 02:11:39 ID:IbpEXu/h] なるほど、どうも
509 名前:login:Penguin mailto:sage [2008/10/15(水) 21:42:29 ID:bOOa1s77] >>502-505 ありがとう。シンプルでそれでよかったんだね。なんか考えすぎてたらしい。 >>503 大昔のパソコン雑誌を押入れから発掘したんです。 そこにあったのは16進ダンプファイルで掲載されていたゲーム・・・。 そして、入力して動かそうとしてあーだこーだやっているうちに 「16進数テキストファイルの処理」が目的になってるという状態w
510 名前:login:Penguin mailto:sage [2008/10/16(木) 08:22:19 ID:tCBPvnpY] シェルの操作とかってそうやって覚えるもんだよねー 懐かしさに惹かれておいらも引っ張り出してみようかしら
511 名前:login:Penguin [2008/10/17(金) 01:32:36 ID:6ubwN3MV] >>>503 >大昔のパソコン雑誌を押入れから発掘したんです。 >そこにあったのは16進ダンプファイルで掲載されていたゲーム >・・・。 やっぱりw なつかしすぎる。てか、bit数が違うから動かない予感
512 名前:login:Penguin mailto:sage [2008/10/17(金) 11:08:59 ID:4pVt9n9N] 携帯やデジカメでダンプリストを取り込んでocrソフトでテキスト化 エディタで編集修正したものをデバッガへ食わせるなんてスレ違い
513 名前:login:Penguin [2008/10/22(水) 20:50:34 ID:VC8ljHmq] $ cat love.sh what=LOVE echo "ALL YOU NEED IS $what" というファイルを改変することなく、2行目のecho文で "ALL YOU NEED IS CASH" と出力することは可能だろうか? $ cat cash.sh declare -r what=CASH source ./love.sh というのを考えてみたが実現できなかった。
514 名前:login:Penguin mailto:sage [2008/10/22(水) 21:16:44 ID:l3U9XvVs] $ sed s/LOVE/CASH/ love.sh | sh これだと改変になる?
515 名前:login:Penguin mailto:sage [2008/10/22(水) 22:28:26 ID:VC8ljHmq] あーなるほど。いただきます。
516 名前:login:Penguin mailto:sage [2008/10/22(水) 23:35:12 ID:xR/eB2K4] what=MONEY;echo '#'`cat a.sh` | sh
517 名前:login:Penguin mailto:sage [2008/10/23(木) 19:09:43 ID:+CTFy1at] 質問なんですが、atコマンドなどのログを取得して 特定のディレクトリーに吐き出すスクリプトを作成したいと思っています。 しかし、PHPやCなどはかなり触っているのでわかるのですが シェルスクリプトは全くの初心者のため、どのようにしたらいいのか見当がつきません。 簡単な例でけっこうですので、教えていただけないでしょうか。 サーバー:CentOS5.2
518 名前:login:Penguin mailto:sage [2008/10/23(木) 19:41:07 ID:ueeORYHp] え、丸投げ!?
519 名前:login:Penguin mailto:sage [2008/10/23(木) 20:18:32 ID:y4uaRh/4] Cで書きゃええではないか。
520 名前:login:Penguin mailto:sage [2008/10/24(金) 10:02:49 ID:2zYy9Dkj] >簡単な例でけっこうですので grep 'atコマンドなど' /var/log/messages > /tmp/hoge
521 名前:login:Penguin [2008/10/24(金) 20:25:05 ID:14T+pOpU] >>517 /etc/syslog.conf とか? 外してたらごめん
522 名前:login:Penguin mailto:sage [2008/11/02(日) 21:57:45 ID:AykxzKW2] シェルスクリプト関連の本って今では結構いろいろ出てるけど、どれがいいんだろう? シェルって何?って人に最適な本もあるだろうし、実務でスクリプトを書く人に最適な本もあるはず。
523 名前:login:Penguin mailto:sage [2008/11/02(日) 22:12:17 ID:XwJU1nJV] >>522 Advanced Bash-Scripting Guide tldp.org/LDP/abs/html/
524 名前:login:Penguin mailto:sage [2008/11/02(日) 22:51:26 ID:AykxzKW2] >>523 な、なにこれスゲー。今悩んでる問題が二つ解消した。たった数分読んだだけで。
525 名前:login:Penguin mailto:sage [2008/11/03(月) 00:18:52 ID:iKa/7Y2g] その2つを語ってみたまい。 「そんなことで悩んでいたのかクソ馬鹿」と罵倒してあげるから。 …いえ、ウソです。
526 名前:login:Penguin mailto:sage [2008/11/03(月) 01:46:09 ID:jQDIWjiF] 板違いだったらごめんなさい なぜ find には -exec があるんですか?パイプ では駄目?
527 名前:login:Penguin mailto:sage [2008/11/03(月) 02:48:26 ID:bJlJMSV4] #スレ違いと思うけど、それは置いて。 findに-print0が無かった頃、 find ... -print | xargs rm としたら思わぬ結果になり、 find ... -exec rm {}\; と習慣づけるようにしたような、淡い記憶がある。 記憶違いかもしれないけれど。
528 名前:login:Penguin mailto:sage [2008/11/03(月) 11:40:47 ID:+Mz0PYlF] >>526 一個一個に対してコマンドを実行したいとき。 whileとreadで回すほどでもないときに使う。 xargsはなんかそんな気分の時に使う。