1 名前:login:Penguin [2007/07/10(火) 23:17:13 ID:qGthZdME] UNIX板のスレを見ている方も多数おられるかと思いますが、 まあそれはそれとして、BASHウゼーとか言われる心配なく 平和にLINUX的スクリプト談義しましょうよ。 初めての自作スクリプト、自信ないから見てください。な初心者から トリッキーな技を駆使した作品を披露したい、蘊蓄を語りたい上級者まで いろいろな人に参加して頂けると嬉しいです。 perlやらPythonやらの話が混ざっても良いんでない? 【sed】シェルスクリプト総合@LINUX Part2【awk】 pc11.2ch.net/test/read.cgi/linux/1154578200/ pc8.2ch.net/test/read.cgi/linux/1121994321/ >>2-5 あたりに色々と。
892 名前:login:Penguin mailto:sage [2008/03/30(日) 16:16:42 ID:SBrBro/C] >>891 過去ログ読め。
893 名前:login:Penguin mailto:sage [2008/04/01(火) 00:07:30 ID:mTzNKv6N] ニコ動の動画IDをwgetで落とせる直リンに変換するスクリプトないっすか?
894 名前:login:Penguin mailto:sage [2008/04/01(火) 00:12:45 ID:+SHNTduy] >>893 仕様出てるだろ。
895 名前:login:Penguin mailto:sage [2008/04/01(火) 00:12:57 ID:bWFHq2/G] >>893 nicovideo-dl
896 名前:login:Penguin mailto:sage [2008/04/01(火) 22:06:47 ID:Mk5CpRwr] $ oppai bash: oppai: command not found
897 名前:login:Penguin [2008/04/04(金) 13:09:23 ID:Lie/X+/S] 質問させて下さい。 ubuntu7.1 server を使用しています。 シェルスクリプトを勉強し始めてLinuxの設定セットアップシェルを作ろうとしています。 ■入力受付状態を省略し、自動入力にするにはどのようにすればいいのでしょうか? 例えばsambaのコマンドですが smbpasswd -a root をするとパスワードの入力を求められます。 普段なら手動でxxxxと入力するのですが、この作業を自動化したいのです。 色々調べてsedの使い方等はわかりファイルの書き換えによる設定はおおむね出来たのですが 上記のやり方は見つけることができませんでした。 どうかアドバイス頂けないでしょうか? 宜しくお願い致します。
898 名前:login:Penguin mailto:sage [2008/04/04(金) 21:25:51 ID:WDSwmhLm] >>897 Windowsから接続しているなら、TeraTermのマクロで何とかできるかもね。 ただユーザー名やパスワードが見えてしまう状態でファイルに保存するから セキュリティ上には良くないかも sambaの設定ファイルだけバックアップ取って ユーザーとパスワードはその都度入力するのが無難かと
899 名前:login:Penguin mailto:sage [2008/04/05(土) 11:09:58 ID:co3/wC9l] >>897 expectスクリプト expectに突いてくるサンプルを読んで
900 名前:login:Penguin mailto:sage [2008/04/05(土) 11:16:23 ID:co3/wC9l] すまん、サンプルついてないわ。 apt-get source expect して、サンプル見て。
901 名前:login:Penguin mailto:sage [2008/04/06(日) 14:52:52 ID:20te6qz4] シェルスクリプトできるけどPerlスクリプト出来ないやつなんなの?
902 名前:login:Penguin mailto:sage [2008/04/06(日) 15:42:41 ID:6d0Si0sC] 単にawkとかpythonが好きなんじゃないの?
903 名前:login:Penguin mailto:sage [2008/04/06(日) 17:08:40 ID:Y81bdbYI] >>901 シェル・スクリプトは基本だが、perl は awk やら python やらのワン・オブ・ゼムに過ぎないので、それが普通。 MS-Windows95の頃、cgiはperlスクリプトでという謎の風潮があった名残で、あなたのような疑問が出て来るのだろう。
904 名前:login:Penguin [2008/04/07(月) 02:13:58 ID:WGY+O99D] >>903 そうそう。 別に、cgiがシェルスクリプトでも問題ないし(使いにくいけど)、なんでもいい。 perlだろうが難だろうが、所詮手段なんだから、どうでもいいじゃんw
905 名前:login:Penguin mailto:sage [2008/04/07(月) 08:01:37 ID:DKzh8iuy] >>901 多分、 同じ構造化手続き型言語なのに何で方言によって使える使えないみたいなこと言ってんの? ということかと。
906 名前:login:Penguin mailto:sage [2008/04/07(月) 20:27:53 ID:ky4RCRjO] >>905 そうなら「シェル」スクリプトスレで何言ってんだこのバカは? ってな話しにしかならんからそれはなかろ。
907 名前:login:Penguin mailto:sage [2008/04/08(火) 00:22:25 ID:xWC78uSv] つまり、シェルスクリプターはアホです。
908 名前:login:Penguin mailto:sage [2008/04/08(火) 21:18:54 ID:mlftshp4] Aho氏 ttp://en.wikipedia.org/wiki/Alfred_V._Aho
909 名前:login:Penguin mailto:sage [2008/04/08(火) 21:20:29 ID:L1HkWImv] ahoさんはawkの偉い人でしょ
910 名前:login:Penguin mailto:sage [2008/04/09(水) 01:18:06 ID:8anDW64k] フィンランドではよくある名字。
911 名前:login:Penguin mailto:sage [2008/04/09(水) 01:40:20 ID:vyKS0pT6] えっほ
912 名前:login:Penguin mailto:sage [2008/04/09(水) 02:03:59 ID:JRgbXb6K] スキーでアホネンさんっていたな この人もフィンランドだったな
913 名前:login:Penguin mailto:sage [2008/04/09(水) 13:12:39 ID:vyKS0pT6] だれがあほやねん!
914 名前:login:Penguin mailto:sage [2008/04/09(水) 18:16:40 ID:pjxRKuKN] >>911 ,913 しょーもないレスして悲しくなってこないか?
915 名前:login:Penguin mailto:sage [2008/04/09(水) 19:47:59 ID:D07VbGXN] $ shoumo bash: shoumo: command not found
916 名前:login:Penguin mailto:sage [2008/04/09(水) 21:12:29 ID:HudBzGNB] $ which show /usr/local/mh/bin/show なんていう時代もありました。
917 名前:login:Penguin mailto:sage [2008/04/11(金) 16:25:19 ID:3vnovWPW] 000から999までリストを作りたいんですが、どうすればいいでしょう?
918 名前:login:Penguin mailto:sage [2008/04/11(金) 16:30:16 ID:p4V9vMAs] seq -w 0 999
919 名前:login:Penguin mailto:sage [2008/04/11(金) 16:38:37 ID:3vnovWPW] >>918 めちゃくちゃありがとうございます!!!
920 名前:login:Penguin mailto:sage [2008/04/11(金) 16:41:55 ID:h4xwic1O] 最近の bash なら echo 00{0..9} 0{10..99} {100..999} zsh なら echo {000..999}
921 名前:login:Penguin mailto:sage [2008/04/13(日) 00:08:59 ID:C50QhsEF] 端末に他の端末から書き込むようなデーモンとクライアントが欲しいです 例として、mltermとurxvtを立ちあげ、 mltermでhogedを起動して、もうurxvtでhogec -e 'echo aaa'ってやったら mltermの画面にaaaとか表示されるようなものです 同時に複数の作業をさせてるときにその進捗を1つのコンソールで見通せたらなとか思いまして…
922 名前:login:Penguin mailto:sage [2008/04/13(日) 00:37:03 ID:tBy+WuAg] 適当なログファイルに書き出して、端末の方にはtail -f (tailf)で流せば
923 名前:login:Penguin mailto:sage [2008/04/13(日) 08:41:28 ID:LTuSsBD0] 端末A $ echo 'term A' > /dev/console 端末B $ echo 'term B' > /dev/console に類したことは、まれにやる。
924 名前:login:Penguin mailto:sage [2008/04/13(日) 09:11:42 ID:DHms7wov] >>921 mlterm$ screen urxvt$ screen -x
925 名前:login:Penguin mailto:sage [2008/04/13(日) 09:16:44 ID:DHms7wov] つ ttysnoop
926 名前:login:Penguin mailto:sage [2008/04/13(日) 10:23:50 ID:+bcR3tRW] >>921 wall
927 名前:login:Penguin mailto:sage [2008/04/13(日) 15:29:10 ID:7nxEkg5V] >>924 それは違うんじゃね?
928 名前:login:Penguin mailto:sage [2008/04/14(月) 21:52:01 ID:yIAGZ+M9] rm -rf /* ┐('〜`;)┌ モウツカレタ
929 名前:login:Penguin mailto:sage [2008/04/15(火) 07:03:22 ID:KF+FiULr] dd if=/dev/zero of=/dev/hda
930 名前:login:Penguin mailto:sage [2008/04/18(金) 07:50:33 ID:9axeonkq] 運用しているマシンでちょっとした作業を行うとき、 nice bash したシェルで作業することがあるのですが、 いま自分が動かしているシェルの nice 値を簡単に 知る方法ってないですかね・・・
931 名前:login:Penguin mailto:sage [2008/04/18(金) 08:23:44 ID:JZJIXmIH] $ ps -o %n $$ そんなことも知らない人がniceするの? それに対話型のコマンドにniceはあまり意味がない。
932 名前:login:Penguin mailto:sage [2008/04/18(金) 09:08:39 ID:9axeonkq] その中でmakeしまくるので
933 名前:login:Penguin mailto:sage [2008/04/18(金) 09:57:57 ID:JZJIXmIH] alias make='nice --adjustment=-30 make'
934 名前:login:Penguin mailto:sage [2008/04/18(金) 11:45:33 ID:u356hJZU] reniceじゃダメなんでしょうか?
935 名前:login:Penguin mailto:sage [2008/04/18(金) 20:06:00 ID:xUbq9+ce] alias nice='ジャズ + クラシック / ロック'
936 名前:login:Penguin mailto:sage [2008/04/18(金) 23:11:33 ID:cOa8NbkQ] nice boat.
937 名前:login:Penguin [2008/04/19(土) 13:43:25 ID:khf4hkQE] >>934 >reniceじゃダメなんでしょうか? topでもいいよな。
938 名前:login:Penguin [2008/04/19(土) 16:17:44 ID:SCXXqtIf] bashのシェルスクリプトで、 文字列に正規表現のフィルタをかけたいのですが 以下の場合、なぜエラーになるかわかりません。 何が悪いですか? expr `ps` : ".*" -> expr: syntax error var1="aaa" expr $var1 : ".*" -> expr: syntax error
939 名前:login:Penguin mailto:sage [2008/04/19(土) 18:02:41 ID:XPjpMm+j] expr "`ps`" : ".*" var1="aaa" expr "$var1" : ".*"
940 名前:login:Penguin [2008/04/19(土) 20:46:24 ID:SCXXqtIf] >>939 それで出来ました。ありがとうございます。 でも理由がいまいちわかりません。 ” ”で囲っていない為 → 文字列型ではない為 → では$var1は何を返すのか?
941 名前:login:Penguin mailto:sage [2008/04/19(土) 21:02:50 ID:SyasDtFa] hdやbdみたいに 2進数表示するプログラムありませんか?
942 名前:login:Penguin mailto:sage [2008/04/19(土) 22:41:34 ID:QZlXANdf] >>941 od
943 名前:login:Penguin mailto:sage [2008/04/19(土) 22:50:17 ID:SyasDtFa] odだと2進数は表示ですう。 もう自分で作っちゃいました・
944 名前:login:Penguin [2008/04/20(日) 10:43:22 ID:C3cqRfnQ] >>940 >” ”で囲っていない為 → 文字列型ではない為 → では$va >r1は何を返すのか? 確かに、おれも気になるぞ
945 名前:login:Penguin mailto:sage [2008/04/20(日) 13:49:25 ID:yhaYk8sL] なんというか、このスレで話をするための最低限の知識レベルを、>>940 や941は遥かに割り込んでいる気がするんだが。
946 名前:login:Penguin [2008/04/20(日) 14:55:30 ID:3JVOMAOF] >>938 は、自分なりに考えた結果、以下のような結論になりました。 シェルスクリプトは、型だのなんだのはなくて C言語でいう単純なマクロの展開レベルのものしかしない。 例えば、先の例だと、 expr `ps` : ".*" ↓ expr PID TTY TIME CMD 2295 pts/1 00:00:00 bash 2407 pts/1 00:00:00 ps : '.*' ↓ シンタックスエラーでNG ""で囲うと、 expr "`ps`" : ".*" ↓ expr 'PID TTY TIME CMD 2295 pts/1 00:00:00 bash 2407 pts/1 00:00:00 ps' : '.*' ↓ OK 「echo "aaa " `ps`」が通るんで矛盾しているなぁと思っていたんですが よく考えるとそんなことは無かったですね。
947 名前:login:Penguin mailto:sage [2008/04/20(日) 17:11:52 ID:oNW0JD98] 逆に文字列処理を一通りしてから実行させられるから、 >>938 が最初考えていたみたいに単語区切りが強い場合より、 出来ることが増えるんだけどな。 その代わりプログラマがちゃんと構文構成の責任を持たないといけないけども。
948 名前:login:Penguin mailto:sage [2008/04/23(水) 22:57:21 ID:xEICV4cP] grepの結果で AAAとBBBのOR検索をしたいのですが、 tail -f /var/log/maillog | grep [AAA|BBB] とやってもだめでしたorz どうすれば、OR検索ができるのでしょうか? ANDは、パイプで追加すれば可能なのですが・・。
949 名前:login:Penguin mailto:sage [2008/04/23(水) 23:29:21 ID:Y+58Od8z] なんで tail -f なんてする必要が有るんだ?
950 名前:login:Penguin mailto:sage [2008/04/23(水) 23:33:35 ID:M4AkpEZt] >>948 grep -E "(AAA|BBB)" もしくは egrep "(AAA|BBB)"
951 名前:948 mailto:sage [2008/04/24(木) 04:44:09 ID:8uaGXJVC] >>950 egrepでしたか、ありがとうございます。 >>949 1秒に100行以上流れるログなので、速すぎて読めないのよねw
952 名前:login:Penguin mailto:sage [2008/04/24(木) 09:43:23 ID:C5h8jkbM] 一秒に100行以上流れるとか全然関係ないと思うぞ。
953 名前:login:Penguin mailto:sage [2008/04/24(木) 10:09:04 ID:iBrwQJHF] そんなにおかしいか? おれもよくやるけどな。
954 名前:login:Penguin mailto:sage [2008/04/24(木) 19:19:48 ID:BuhR71Gk] >>952 logの監視は他にどんな手段でやってるの?
955 名前:login:Penguin mailto:sage [2008/04/24(木) 19:42:01 ID:28W2p82+] tail -fしても速く流れるのは変わらないだろ? 大きなファイルの増分だけ見たい時は有効だけど。
956 名前:login:Penguin mailto:sage [2008/04/24(木) 19:54:48 ID:iBrwQJHF] たとえば tail -f access_log | grep 10.99.78.22 とかやっといて、10.99.78.22 からアクセスしながらログを見たりする。 tail -f access_log だけだとログが多過ぎるし grep 10.99.78.22 access_log ではリアルタイムに見れない。 つーか、なんでそんなに否定したがるんだ?
957 名前:login:Penguin mailto:sage [2008/04/24(木) 20:51:49 ID:PIJRHfrL] そんなのは常識。 tail -fするのは、増分を見たいからだろ? 速く流れるのは関係ない。それはgrepの役目。 >>949 に対する>>951 の答えはおかしい。 それが読み取れない>>953 も疑問。
958 名前:login:Penguin mailto:sage [2008/04/24(木) 23:00:30 ID:amh/02/G] >>956 基本だよな。それって。
959 名前:login:Penguin mailto:sage [2008/04/25(金) 01:12:52 ID:05aUO6OC] 役に立たないのは949,952,957のレスだろ つegrep -v '(949|952|957)'
960 名前:login:Penguin mailto:sage [2008/04/26(土) 03:30:44 ID:2buln9M4] ファイルを検索して、 ファイル名によって分岐させたいと思っています。 以下のようにスクリプトを書いたのですが、 if [ $file = *.o ] がうまく動作してくれません。 どこが間違っているのでしょうか? # $1はディレクトリ for file in `find $1` do if [ -x $file ]; then echo "x: Name=$file" else if [ $file = *.o ]; then # .oで終わるファイル echo ".o: Name=$file" else echo "not .o: Name=$file" fi fi done
961 名前:login:Penguin mailto:sage [2008/04/26(土) 03:41:55 ID:l2xr5sbr] [ $file = *.o ] の * がパス名展開されるから。 こういう時は case 文使うと楽。 case "$file" in *.o) echo ".o: Name=$file" ;; *) echo "not .o: Name=$file" ;; esac
962 名前:960 mailto:sage [2008/04/26(土) 04:22:04 ID:2buln9M4] >>961 ありがとうございます! >* がパス名展開される なるほどです。 今後のためにお聞きしたいのですが、 このままifで処理するには どのようにしたらよいのでしょうか?
963 名前:login:Penguin mailto:sage [2008/04/26(土) 05:02:51 ID:+ITD/myA] expr でパターンマッチさせた結果を判定するのが常套手段だと思う。 でも解り易さで俺も>>961 おすすめ。 shでなくbashやzshに依存するやり方で良いなら他にもあるので、manするとエエでがす。
964 名前:960 mailto:sage [2008/04/26(土) 11:07:16 ID:2buln9M4] >>963 expr、なるほど。 C++やってるときも、caseなんてifがあるから要らね、 とか言ってるのをshにも持ち込んでしまったわけですが、 shではcaseを格上げします。 ありがとうございました。
965 名前:login:Penguin mailto:sage [2008/04/26(土) 11:09:05 ID:zBt65CRz] >>964 ざけんな。switchの方がコードの見通しがよくなる場面が多々ある。 適材適所だ。
966 名前:login:Penguin mailto:sage [2008/04/27(日) 00:22:17 ID:FoD+QJwV] 一文字のみ、小文字を大文字に置換の方法、教えてください _linux から _Linux へ (この場合、小文字lを大文字Lへ、一文字のみ) trとかsedでぐぐってみましたが、すべての文字に適用される例のものばかりで。。。
967 名前:login:Penguin mailto:sage [2008/04/27(日) 00:31:12 ID:mG61TWcx] echo _linux | sed -e 's/[a-z]/\U&/'
968 名前:login:Penguin mailto:sage [2008/04/27(日) 01:13:49 ID:FoD+QJwV] >>967 ありがとうございます 期待通りの動作になりました、感謝