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 あたりに色々と。
185 名前:login:Penguin mailto:sage [2009/07/31(金) 10:47:53 ID:dFOhVUdW] >>182 どう違うの?
186 名前:login:Penguin [2009/07/31(金) 11:03:30 ID:JVm6T/2T] Bashで設定を変更するものを作ってるんですがCtrl + C とかでプロンプトに抜けられないようにするにはどうすればいいんでしょうか?
187 名前:login:Penguin mailto:sage [2009/07/31(金) 11:08:16 ID:dFOhVUdW] >>186 trap
188 名前:186 [2009/07/31(金) 11:16:14 ID:JVm6T/2T] >>187 ありがと。 出来ました。
189 名前:login:Penguin [2009/07/31(金) 16:40:28 ID:YezVKpJb] コンフィグ情報から DEVICEとIPADDRだけを抜き出したいのですが下記だとDEVICEの行が5行表示され ます。 構文が間違っているからだと思いますがアドバイスもらえないでしょうか。 eth0=/etc/sysconfig/network-scripts/ifcfg-eth0 while read eth0 do echo $eth0 | sed -n '/DEVICE/p' /etc/sysconfig/network-scripts/ifcfg-eth0 done < /etc/sysconfig/network-scripts/ifcfg-eth0
190 名前:login:Penguin mailto:sage [2009/07/31(金) 16:49:00 ID:Q0h6j6GB] sed -n '/DEVICE/p;/IPADDR/p' /etc/sysconfig/network-scripts/ifcfg-eth0
191 名前:login:Penguin mailto:sage [2009/07/31(金) 16:51:37 ID:dFOhVUdW] なんで何度も /etc/sysconfig/network-scripts/ifcfg-eth0 を書いてんだろ。
192 名前:login:Penguin mailto:sage [2009/07/31(金) 16:52:11 ID:sKGfGulX] >>189 答え先に書かれちゃったか。 1行目のeth0はどこで使ってるの?とか、whileでループさせる意味は?とか ちょっと落ち着いて考えた方が良い
193 名前:login:Penguin mailto:sage [2009/07/31(金) 16:56:53 ID:IvZ7j8yJ] >>189 今後の為に基礎から勉強しなおしてきた方がいいよ
194 名前:login:Penguin mailto:sage [2009/07/31(金) 16:57:14 ID:6mUE4jrQ] > 1行目のeth0はどこで使ってるの?とか、whileでループさせる意味は?とか > ちょっと落ち着いて考えた方が良い 落ち着いて考えてもわかんねーよ 1行目のeth0がどこにも使われてないのはわかるけど
195 名前:189 [2009/07/31(金) 17:37:11 ID:YezVKpJb] みなさん回答ありがとうございます。 改めて見ると意味わからないことしてました。 下記のコードで意図する事ができました。 ありがとうございました。 while read do echo | sed -n '/DEVICE/p;/IPADDR/p' /etc/sysconfig/network-scripts/ifcfg-eth0 break done < /etc/sysconfig/network-scripts/ifcfg-eth0
196 名前:login:Penguin mailto:sage [2009/07/31(金) 17:45:29 ID:sKGfGulX] >>195 全力で釣られてやる。 >>190 さんが書いてるように、sed1行でいける sed -n '/DEVICE/p;/IPADDR/p' /etc/sysconfig/network-scripts/ifcfg-eth0 whileしたあげくに無条件でbreakとか意味わからん。 各行で何をしているのかもう少し考えよう
197 名前:login:Penguin mailto:sage [2009/07/31(金) 20:49:41 ID:M2gWEg8T] >>195 まずその「よく分からないけどとにかく丸写しでそれらしく作っとけばいいだろう」 という思想を改めるべきだな。
198 名前:login:Penguin [2009/07/31(金) 21:59:52 ID:JVm6T/2T] 何やら上でもsedの質問出てますが質問させてください。 sedでtet.txt内にあるhogeをhogehogeに書き換えるものをつくりました。 sed -i 's/hoge/hogehoge/g' /tmp/test.txt 次にhogeとhogehogeの部分を変数にしたのですが今度は書き換わってくれません。 $aにはhoge $bにはhogehoge sed -i 's/$a/$b/g' /tmp/test.txt test.txtを見ると更新はされているので何らかのアクションがあるみたいなんで すが何か指定方法間違ってますでしょうか?
199 名前:login:Penguin mailto:sage [2009/07/31(金) 22:03:23 ID:Y1b6fdMF] sed -i "s/$a/$b/g" /tmp/test.txt
200 名前:login:Penguin mailto:sage [2009/07/31(金) 22:06:26 ID:Gbr9waoH] >>199 ""だとシェル変数展開されないっすか?
201 名前:sage mailto:sage [2009/08/01(土) 01:27:09 ID:2gkCvOw5] シェルでリスタートとかかけると 活性化しますとか表示されるんですが、これ表示させないようにする方法ありますか? /dev/nullとかしても表示されたので表示させない方法あれば教えてください。
202 名前:login:Penguin mailto:sage [2009/08/01(土) 01:38:27 ID:MXySzGMG] >>201 使ってるディストリのスレへ。
203 名前:login:Penguin mailto:sage [2009/08/01(土) 02:29:31 ID:SZCdXM7k] >>198 $ a='hoge' $ b='hogehoge' $ cat >/tmp/test.txt hogepiyo$a$b$c $ sed -i 's/$a/$b/g' /tmp/test.txt $ cat /tmp/test.txt hogepiyo$b$b$c # hogeはそのまま、$aは$bに。 $ cat >/tmp/test.txt hogepiyo$a$b$c $ sed -i "s/$a/$b/g" /tmp/test.txt $ cat /tmp/test.txt hogehogepiyo$a$b$c # hogeがhogehogeに、$aはそのまま。
204 名前:login:Penguin mailto:sage [2009/08/01(土) 04:42:15 ID:SZCdXM7k] >>181 入れ子のとき注意がいる。 $ echo $(echo a:$(echo b:$(echo c:$(echo d)))) a:b:c:d $ echo `echo a:`echo b:`echo c:`echo d```` a:echo b:c:echo d $ echo `echo a:\`echo b:\\\`echo c:\\\\\\\`echo d\\\\\\\`\\\`\`` a:b:c:d
205 名前:login:Penguin mailto:sage [2009/08/02(日) 01:23:15 ID:tM/nSNrk] 画面を切り替えたりするとselect文が数行表示されない(実際には選択は出来る)ことが よくあるんですが、データの受信が表示までに間に合ってないような感じです。 これを避ける方法などはあるんでしょうか? 使用しているターミナルはPoderosaになります。
206 名前:login:Penguin [2009/08/03(月) 09:09:05 ID:J0mTyN5X] 今までbashでスクリプト組んで表示はExiteで翻訳とか適当にコピペってたのですが シェルスクリプトって日本語表示出来ますか? お偉いさんが英語じゃわからんとかぬかしやがったので・・・
207 名前:login:Penguin mailto:sage [2009/08/03(月) 09:14:24 ID:+8DYA08E] >>206 文字コード決めうちでよければ比較的簡単だな。 問題はそれで表示できるかどうかは実行する人が 使ってるターミナルに依存するということだ。一般的に やろうとするとロケール見て切り替えみたいなことを しなきゃならないが結構面倒だね。 ま、お偉いさんの環境に合わせておけばいいんじゃね?
208 名前:206 [2009/08/03(月) 09:29:50 ID:J0mTyN5X] >>207 やっぱりそうですよね。 アクセスしてきたターミナルの文字コードを判別してとか切り替えられればいいんですが さすがに無理ですよね。 お偉いさんだけじゃなくてユーザーも使うんで文字コードって混在してるんですよね。 標準的な文字コードってどんなの使われてるのかはよくわかりませんが まぁ無理って方向で進めていこうかと思います。 ありがとうございます。
209 名前:login:Penguin mailto:sage [2009/08/03(月) 09:57:12 ID:pu8sCNil] ローマ字でいいんじゃね。
210 名前:login:Penguin mailto:sage [2009/08/03(月) 10:31:49 ID:3RzsW8i/] exciteのわけわからん翻訳貼り付けるのは ユーザーが可哀想だろw 自分の英語に自信が持てないなら、いっそ日本語の方がいいんじゃね。 そのディストリビューションで日本語選んでインストールしたとき デフォルトになる文字コード選んどけば 誰も文句いわないんじゃね? 自分でLANGいじるようなやつは、文字化けのなおしかたぐらい知ってるだろ。
211 名前:login:Penguin mailto:sage [2009/08/03(月) 10:52:42 ID:3RzsW8i/] なんか変だ。 ユーザー作ったときデフォルトでなってる文字コードにしとけばいいんじゃね、だ。 LANGとかLANGUAGEとかいじるやつは文字化けの直し方ぐらい知ってるだろ。 デフォルトがCとかenとかなら…シラネ
212 名前:login:Penguin [2009/08/04(火) 12:15:50 ID:OyyR8ocQ] 動けばいいって程度で作ってたものをどうやら他にもリリースするとかで見栄えをよくしろと言われました。 bashで文字を寄せたり全体を中央寄せにしたりするコマンドとか関数ってありますか?
213 名前:login:Penguin mailto:sage [2009/08/04(火) 12:53:29 ID:h5jokg18] COLUMNS見て計算する。 いっそwhiptailやdialog使うとかな。
214 名前:login:Penguin mailto:sage [2009/08/04(火) 21:45:57 ID:1cLNSoFd] printf ? あとよく知らないけど fmt とか groff とか?
215 名前:212 [2009/08/04(火) 22:25:14 ID:OyyR8ocQ] >>213 文字数はじき出して何とか出来ました。 あとスクリプトの中で /etc/rc.d/network restart といれているんですが、手動で/etc/rc.d/network restartすると大丈夫なんですが #!/bin/bash /etc/rc.d/network restart とかで実行するとshould not be world writeable users cannnot control this device と表示されて実行されていないようです。 権限の問題かと思い色々と変えてみましたがダメでした。 なにか他に注意すべき点があればご教示いただければと思います。
216 名前:login:Penguin mailto:sage [2009/08/04(火) 22:32:07 ID:ACq2bWOB] > 色々と変えてみましたがダメでした。 そりゃダメだろうな。
217 名前:login:Penguin mailto:sage [2009/08/04(火) 22:49:56 ID:p9z/5JkD] もしかして: should not be world writable users cannot control this device
218 名前:212 [2009/08/05(水) 09:09:45 ID:Sso6+/38] >>217 すいません スペル間違えてました。 217で記述されている内容が表示されておりました。
219 名前:login:Penguin mailto:sage [2009/08/05(水) 09:38:19 ID:gztfuFMV] いろいろgrepしたけどうちのマシンには そのメッセージを吐くプログラムは入ってないようだ。 ディストリビューションと、どのプログラム/スクリプトが そのメッセージ出してるか書けば? ちなみにそのスクリプトはrootで実行してるんだよね?
220 名前:212 [2009/08/05(水) 10:47:05 ID:Sso6+/38] >>219 すいません。 CentOS5.3 です。スクリプト内容は膨大なのですがエラーが出る場所は /etc/rc.d/init.d/network restart の部分になります。 実行しているのは別のユーザーでてっきりrootで実行してるもんだと思ったら別ユーザーで実行していたようです。 ファイルは -rwxr-xr-x 1 root root 1234 7月 31 00:00 test.sh 実際に実行していたログインユーザーはtestというユーザーでした。 上記の事とエラー内容から権限がないために出ていると思います。 testユーザーでもrestartをかけれる権限を付与するか、testユーザーを rootのグループに入れるような事が出来れば出来そうな気もしますが自分には少しレベルが高そうですね。
221 名前:login:Penguin mailto:sage [2009/08/05(水) 13:12:18 ID:gztfuFMV] のりピーが心配で仕事が手に着かない。 init.dのスクリプトは一般ユーザーが使うようには出来てない。 仮にパーミッション緩めまくって実行できるようにしても、 インターフェースの設定はuid=0じゃないと出来ないので どこかで権限を昇格するかrootのプロセスに引き継ぐかしないと行けない。 具体的な実装方法の話に入ると、 そもそも一般ユーザーがインターフェースupdownする必要が 本当にあるのかという事から検討したくなって 長くなりそうなのでとりあえずがんばれと言っておく。
222 名前:219 [2009/08/05(水) 13:35:06 ID:Sso6+/38] >>221 ありがとうございます。 ネットワークの設定を一般ユーザー(といっても特定のユーザーのみですが) が出来るようにしたいと思っております。 そんなに頻繁にあるわけではないのですがroot権限を持ったものが常駐しているわけでは ないということもありましたのでネットワーク周りだけを触るスクリプトを組みました。 権限の昇格やrootのプロセスをシェルスクリプトで引き継げるようであれば行いたいと思います。 ご存じのかたおられましたらアドバイスいただけると助かります。
223 名前:login:Penguin mailto:sage [2009/08/05(水) 14:02:44 ID:gztfuFMV] そのぐらいならsudoでどぞ。
224 名前:login:Penguin mailto:sage [2009/08/05(水) 21:35:22 ID:dz5dEKuL] >>222 ifcfg-eth0とかに「USERCTL=yes」でroot以外でもできそう www.redhat.com/docs/manuals/enterprise/RHEL-4-Manual/ja/ref-guide/s1-networkscripts-interfaces.html
225 名前:login:Penguin [2009/08/08(土) 16:14:34 ID:Nnr+lme9] rebootやshutdownはrootでなくても使用できるんでしょうか? 試しにrootではないsampleユーザーで #!/bin/bash reboot を実行させたら再起動かかったんですが、てっきり弾かれるかパスワード聞かれると思ってました。 上のほうで権限がどうのこうのって質問があったんですが、OSとかによって違うってことですかね。
226 名前:login:Penguin mailto:sage [2009/08/09(日) 11:26:19 ID:1P+Q9AS+] そんなのあんの? rebootやshutdownは管理者権限だろ
227 名前:login:Penguin mailto:sage [2009/08/09(日) 11:34:22 ID:IkGSFCMm] sudoersに書いてたとしてもsudo rebootじゃないと駄目だろうし 何だろ
228 名前:login:Penguin mailto:sage [2009/08/09(日) 11:46:08 ID:0aZIEnpY] >>225 rebootはできてもshutdownはできないんじゃない?
229 名前:login:Penguin [2009/08/09(日) 12:55:17 ID:aaFRdfIZ] ディストリ次第じゃないんですか。Debian ではできないみたいだけど、Vine では 一般ユーザでも shutdown できる (Red Hat 系はみんなできるのかも)。Vine の場合、 /usr/bin/shutdown はシェルスクリプトで、中で halt や reboot を呼び出している。 そして、この halt や reboot はリンクで、実体は /usr/bin/consolehelper。 あとは、man consolehelper ですね。
230 名前: ◆Zsh/ladOX. mailto:sage [2009/08/09(日) 14:01:11 ID:/ZeBm1qf] んーできない。 % cat /etc/redhat-release CentOS release 5.3 (Final) % id uid=500(hage) gid=500(hage) 所属グループ=500(hoge) context=user_u:system_r:unconfined_t % /sbin/shutdown -r now shutdown: you must be root to do that! % /sbin/reboot reboot: must be superuser.
231 名前:229 mailto:sage [2009/08/09(日) 14:18:48 ID:PRPNML+y] >>230 CentOS の場合、/sbin/shutdown じゃなくて、/usr/bin/shutdown はないんですか。 だとしたら、Vine だけなのかな。たしか、「一般ユーザに電源をぶち切られるより、 shutdown を許した方がマシだ」という考えだったと思います。
232 名前: ◆Zsh/ladOX. mailto:sage [2009/08/09(日) 14:27:23 ID:/ZeBm1qf] % /usr/bin/shutdown -r now zsh: そのようなファイルやディレクトリはありません: /usr/bin/shutdown % locate shutdown|grep bin /sbin/shutdown /usr/bin/pm-shutdown なんで無いね。
233 名前:login:Penguin mailto:sage [2009/08/09(日) 16:35:29 ID:CB8fkMOP] # ながいこと Vine しか使ってないから他のディストリのことはわからない。 >>225 シェルスクリプトの "reboot" を /sbin/reboot とか /usr/bin/reboot とかに書き換えてみると動作に違いがでると思う。 > 権限 pam って仕組みで管理されてると思う。/etc/pam.d/ 以下のファイル。 >>225-232 Vine だと usermode っていうパッケージに /usr/bin/consolehelper /usr/bin/halt /usr/bin/poweroff /usr/bin/reboot /usr/bin/shutdown /usr/sbin/userhelper とかいったものが入ってる。usermode-gtk ってパッケージもある。 Description : usermode パッケージには、一般ユーザが設定されたプログラムをスーパーユー ザとして実行できるようにするユーザヘルパープログラムが含まれています。
234 名前:login:Penguin [2009/08/09(日) 22:04:40 ID:ivLlFzN/] シェルスクリプトでコマンド番号を選択したりIPを入力したりするツールつくったんですが、 ctrl+cやIP入力にコマンドを入れてみて実行されるかどうかといった確認はしてみましたが それ以外にセキュリティやテストしてみるといいことなどあれば教えてください。
235 名前:login:Penguin mailto:sage [2009/08/09(日) 22:52:55 ID:C0J3iJDt] スクリプト晒して!
236 名前:login:Penguin mailto:sage [2009/08/09(日) 23:03:57 ID:IVuBeWRI] 晒されても答えようがないような。 C-c が入れられたときの正しい処理とか本人でないと知らないし。
237 名前:234 [2009/08/09(日) 23:20:52 ID:ivLlFzN/] >>235 IP以外の文字が入れられたらといった時の処理はまだいれてませんが 下記のような事を繰り返してconfを書き換えて再起動するという感じです。 read newip $newip="IPADDR=""$newip" sed -i "s/$oldip/$newip/g" /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/rc.d/init.d/network restart menufunc
238 名前:login:Penguin mailto:sage [2009/08/10(月) 00:04:28 ID:CdStD5IJ] >>227 sidを知らんのか。
239 名前:login:Penguin mailto:sage [2009/08/10(月) 01:28:19 ID:qfqY90wM] a b c ... と一語ごとに改行された一つのテキストファイルを a b c d e f g h i j k l m n o ... と言うように10列ごとに改行するテキストにしたいと思い、 スクリプトを組んだのですが動作が遅く、重くなってしまって困惑しています どなたかお知恵をお貸しくださると助かります。 #/bin/bash FILE=$1 LINENUM=`expr 1` OFILE=/dev/shm/hoge while read line do if [ $LINENUM -lt 10 ];then echo -n "$line" >> $OFILE echo -n -e "\t" >> $OFILE LINENUM=`expr $LINENUM + 1` else echo "$line" >> $OFILE LINENUM=`expr 1` fi done <$FILE
240 名前:login:Penguin mailto:sage [2009/08/10(月) 01:50:52 ID:vmT7yJCz] #!/bin/sh FILE=$1 OFILE=/dev/shm/hoge LINENUM=1 while read line do if [ $LINENUM -lt 10 ] then echo -n "$line" echo -n -e "\t" LINENUM=$(( LINENUM + 1 )) else echo "$line" LINENUM=1 fi done <$FILE >$OFILE
241 名前:login:Penguin mailto:sage [2009/08/10(月) 02:00:08 ID:qfqY90wM] >>240 ありがとうございます! 処理が覿面に早くなりました! いちいち書き出さないで最後に一括して書けばよかったんですね…
242 名前:login:Penguin mailto:sage [2009/08/10(月) 02:10:30 ID:vmT7yJCz] >>241 たぶんexprの呼び出しのほうがコストが高いよ
243 名前:login:Penguin mailto:sage [2009/08/10(月) 12:26:13 ID:5IcilgjJ] 自分で動かすだけならこれでいいやと思ったら、そんだけで改善できたのか… ---- #!/bin/sh FILE=$1 OFILE=/dev/shm/hoge sed -e '$!N;$!N;$!N;$!N;$!N;$!N;$!N;$!N;$!N;s/\n/\t/g' <$FILE >$OFILE
244 名前:login:Penguin [2009/08/10(月) 15:31:57 ID:oeYkUDqx] 数字の判定は[0-9]と正規表現使って判定してるんですが IPアドレスかどうかの判定が出来るような正規表現ってあるんでしょうか。 無い脳みそひねってもいい案が出なかったのであれば教えてください。
245 名前:login:Penguin [2009/08/10(月) 15:41:18 ID:86RyWVEw] >>244 ググレばサンプルたくさんあるよ。
246 名前:login:Penguin mailto:sage [2009/08/10(月) 15:59:59 ID:BhLss4cE] お前ならどうするかを教えてやりゃーいいじゃん。
247 名前:login:Penguin mailto:sage [2009/08/10(月) 16:10:10 ID:sXOG+s90] PowerShell神すぎだろ。 このスレ見てると原始人が石斧振り回してるように見えてくるぜ。
248 名前:login:Penguin mailto:sage [2009/08/10(月) 17:33:20 ID:6xgY8KY4] 僕には端末エミュとシェルの違いもわかってないマヌケが見えます。
249 名前:login:Penguin mailto:sage [2009/08/11(火) 00:20:03 ID:GKnhcfe3] >>247 型の概念が邪魔。 コマンドが無駄に長い。 重い。
250 名前:login:Penguin [2009/08/11(火) 00:27:50 ID:4esITO9l] Macのbashもここでいいんでしょうか… OSは10.5.8です。 test.shを ---- #!/bin/sh echo $1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12 ---- とします。 ./test.sh 1 2 3 4 5 6 7 8 9 10 11 12 と実行すると素直に 1,2,3,4,5,6,7,8,9,10,11,12 となるのに ./test.sh 1.0 2 3 4 5 6 7 8 9 10 11 12 と小数を入れて実行すると 1.0,2,3,4,5,6,7,8,9,1.00,1.01,1.02 となってしまうのはなぜでしょうか。
251 名前:login:Penguin mailto:sage [2009/08/11(火) 00:35:21 ID:XDXqx0+D] ./test.sh a 2 3 4 5 6 7 8 9 10 11 12 としてごらんなさい
252 名前:login:Penguin [2009/08/11(火) 01:01:07 ID:4esITO9l] >>251 な、な、な、なんでしかこりは! はっ!そうか!… $1,$2...って書いてあるサイトが多いからけっこうな個数使えるのかと思ってました。 ありがとうございました。
253 名前:login:Penguin mailto:sage [2009/08/11(火) 01:07:27 ID:e9ttEiKp] echo $1,$2,$3,$4,$5,$6,$7,$8,$9,${10},${11},${12}
254 名前:login:Penguin [2009/08/11(火) 02:19:40 ID:4esITO9l] >>253 $(10)は試したのに${10}は試してませんでした…orz ありがとうございます。 >>251 を受けてshiftを使う対処法を知りました。 10個以上の引数を扱いたいという目的においては、shiftと${10}の善し悪しはあるんでしょうか。
255 名前:login:Penguin mailto:sage [2009/08/11(火) 02:26:00 ID:MclIhwRq] こーいうトラップがあるからperlに逃げる人が多い
256 名前:login:Penguin mailto:sage [2009/08/11(火) 02:52:40 ID:e9ttEiKp] >>254 $ man bash /位置パラメータ 2 桁以上の数値を含む位置パラメータを展開するときには、ブレース ({}) で 囲まなければなりません。 よって${n}が正解だと思います
257 名前:login:Penguin [2009/08/11(火) 05:29:40 ID:4esITO9l] >>255 僕はこのツンデレな感じが好きです。 >>256 やっぱりそうですよねw 正式名称は位置パラメータかー"引数"という呼び方しか認識してませんでした。
258 名前:sage mailto:sage [2009/08/11(火) 16:31:12 ID:ggsX9yQb] topコマンドの内容をテキストに書き出したいんですが top >> /tmp/top.test とした場合に延々と書き込まれていきます。1度だけtopの内容を取得したいんですが どのように変更すればよいでしょうか?
259 名前:login:Penguin mailto:sage [2009/08/11(火) 16:36:53 ID:zgCywBrU] >>258 man top
260 名前:258 mailto:sage [2009/08/11(火) 17:33:42 ID:ggsX9yQb] >>259 すいません。 manにありました。 現在topの内容をテキストに書き出して、テキストをsedで切り出して表示してるんですが コマンドの戻り値を求めたいと思っておりますが hogera=$(top -i -n1) cpu=`sed -n '/Cpu(s)/p' "$hogera"` こうすると「読み込めません: ファイル名が長すぎます」と出ます。 本来ファイル名の指定なのでうまくいかないのはあたりまえなのですが、 ファイルに書き出す事無くスマートに切り出す方法がありましたら教えてください。
261 名前:login:Penguin mailto:sage [2009/08/11(火) 17:42:23 ID:zgCywBrU] >>260 いまいちやりたいことがわからんが cpu=`top -b -n1 | grep '^Cpu'` か?
262 名前:258 mailto:sage [2009/08/11(火) 17:54:30 ID:ggsX9yQb] >>261 ありがとうございます。 そうか、grepすればいいだけの事ですね。 どうやら無意味にテンパってしまってるようです。 すいません。最後に1つだけ疑問に思っていることがあるのですが シリアルコンソールで見る画面は横70文字にしとけって言われたんですが 何かそういった規格かなにかあるんでしょうか。検索してみてもそられしいものが 引っかからなかったんですが、70文字だとなかなか厳しいものがあるので 特に根拠のない文字数であるなら超えても構わないのではないかと思っております。 たびたびの質問で申し訳ありませんが、識者の方でご存じの人いたら教えてください。
263 名前:login:Penguin mailto:sage [2009/08/11(火) 17:55:36 ID:zgCywBrU] >>262 スレ違い。
264 名前:258 mailto:sage [2009/08/11(火) 18:03:42 ID:ggsX9yQb] >>263 解答ありがとうございます。 スレ違いとのことですが、これはどういったスレで質問するのがよろしいのでしょうか。 シェルスクリプトの表示だったのでこちらに投げさせていただいたのですが どういった方面のスレかだけでも助言いただけないでしょうか。
265 名前:login:Penguin mailto:sage [2009/08/11(火) 18:07:41 ID:zgCywBrU] >>264 くだらねえ質問はここに書き込め! Part176 pc11.2ch.net/test/read.cgi/linux/1246986882/
266 名前:login:Penguin mailto:sage [2009/08/12(水) 00:03:08 ID:0UM4nevW] >>263 きびしー
267 名前:login:Penguin [2009/08/12(水) 00:05:03 ID:I1tOnENr] >>264 VGAとかSVGAとか解像度で違うっての聞いたことある。 もしかしたら全然違うかもしれんがそういうときはきっと誰か激しく突っ込んでくれるはず。
268 名前:login:Penguin mailto:sage [2009/08/12(水) 00:10:31 ID:u9/Em9/R] >>267 ぜんぜん違う話。
269 名前:login:Penguin mailto:sage [2009/08/12(水) 05:02:52 ID:0UM4nevW] $ cat<<<h$(cat<<<e$(cat<<<l$(cat<<<l)o)\!)
270 名前:login:Penguin [2009/08/12(水) 14:49:33 ID:/9MBM8gW] 特定文字列が含まれてるかどうかの判断って出来ますか? sedとかで文字の置き換えとか入れ替えが出来る程度のレベルです。 dg=`route | grep '192.168.24.1'` でdgの中にug含まれているかどうかを確認したいと思ってます。
271 名前:login:Penguin mailto:sage [2009/08/12(水) 14:51:54 ID:u9/Em9/R] >>270 route | grep '192.168.24.1' | grep ug ってこと?
272 名前:login:Penguin mailto:sage [2009/08/12(水) 14:59:52 ID:LZ159q8G] >>270 case "${dg}" in *ug*) # match ;; *) # not match ;; esac
273 名前:270 [2009/08/12(水) 15:13:57 ID:/9MBM8gW] >>271 そうでした。パイプでさらにgrepすればよかったですね。 こちらの方法でも出来ました。 ありがとうございます。 >>272 判定までしていただいて助かります。 こちらの方法で出来ました。 ありがとうございます。 まだまだよくわかってないですがここで質問しなくてもすむように勉強したいと思います。
274 名前:login:Penguin [2009/08/12(水) 18:46:07 ID:jKHDnL7q] シェルスクリプトでサーバーのチェックをしてます。 それ自体はcronで定期的に行ってますが、これと併せて定期的にデータを送信出 来ればと考えてます。 実際にはチェックして引っかかったサーバーにzipを送り、サーバーは時間が来 れば勝手に実行するという感じですが、シェルスクリプトでzipデータを別サー バーに送るとかいうことが可能でしょうか。 可能ならどんな関数を使えばよいかアドバイスもらえないでしょうか。 初歩的な質問かと思いますが宜しくお願いいたします。
275 名前:login:Penguin mailto:sage [2009/08/12(水) 18:54:50 ID:8iPFdi1w] 金玉 → >>274 。゜( ゜^∀^゜)゜。アーッハハハハノヽノヽノヽノ\ / \
276 名前:login:Penguin mailto:sage [2009/08/12(水) 21:03:12 ID:0s7n/+F7] >>274 sshの鍵交換してパスワードを聞かれないようにしておいて scpなりrsyncなりで送れば良いと思う。
277 名前:login:Penguin mailto:sage [2009/08/12(水) 23:35:06 ID:tCsvaW+m] >>239 これはどう? #/bin/bash FILE=$1 OFILE=/dev/shm/hoge xargs < $FILE -n10 | tr " " "\t" > $OFILE
278 名前:login:Penguin mailto:sage [2009/08/12(水) 23:40:23 ID:tCsvaW+m] >>277 じこれす まちがった xargs < $FILE -n10 | tr ' ' \\t > $OFILE です。
279 名前:login:Penguin mailto:sage [2009/08/12(水) 23:56:35 ID:0UM4nevW] すげー
280 名前:login:Penguin mailto:sage [2009/08/14(金) 09:45:57 ID:vesWTwzQ] 変数COUNTER の値が10より小さければ MMF0009 と表示 100より小さければ MMF0099 と表示 1000より小さければ MMF0999 と表示 1000ならば MMF1000 と表示 というスクリプトをcase 文を用いてすっきり書きたくて下記の通り書きましたが、 算術式及び、case の構文の違いでしょうか間違っています、ご教示願えないでしょうか。 #!/bin/bash COUNTER=0 DIGIT3=000 DIGIT2=00 DIGIT1=0 while [ ${COUNTER} -lt 999 ] do case "$COUNTR" in `expr ${COUNTER}` -lt 10) echo "MMF$DIGIT3$COUNTER";; `expr ${COUNTER}` -lt 100) echo "MMF$DIGIT2$COUNTER";; `expr ${COUNTER}` -lt 1000) echo "MMF$DIGIT1$COUNTER";; `expr ${COUNTER}` = 1000) echo "MMF$COUNTER";; esac COUNTER=`expr ${COUNTER} + 1` done
281 名前:login:Penguin mailto:sage [2009/08/14(金) 09:56:51 ID:HEs3iRVc] >>280 manpageより case word in [ [(] pattern [ | pattern ] ... ) list ;; ] ... esac A case command first expands word, and tries to match it against each pattern in turn, using the same matching rules as for pathname expansion (see Pathname Expansion below).
282 名前:login:Penguin mailto:sage [2009/08/14(金) 10:03:19 ID:GRUhI9LP] こういうこと? seq -f 'MMF%04.f' 0 1000
283 名前:login:Penguin mailto:sage [2009/08/14(金) 15:19:52 ID:VHMVUNf7] >>280 すっきり書いてみた。 #! /bin/sh COUNTER="$1" DIGIT1=000 DIGIT2=00 DIGIT3=0 DIGIT4= eval 'echo "MMF${DIGIT'"${#COUNTER}"'}${COUNTER}"'
284 名前:283 mailto:sage [2009/08/14(金) 15:31:27 ID:VHMVUNf7] printfがあれば更にすっきり。 #! /bin/sh COUNTER="$1" printf 'MMF%04d\n' "${COUNTER}"
285 名前:login:Penguin mailto:sage [2009/08/14(金) 23:08:31 ID:vesWTwzQ] >>280 です 皆さんどうもありがとうございます。 C のswitch〜case構文のようなものかと勘違いし、case の使い方が全然間違ってましたし他にも細かなミスがありましたが、調べてこんな感じで期待通りの振る舞いができました case $COUNTR in ?) echo "MMF$DIGIT3$COUNTER" ??) echo "MMF$DIGIT2$COUNTER" ??) echo "MMF$DIGIT1$COUNTER" 1000) echo "MMF$COUNTER" esac それから、seq とかeval の使い方も調べて見ます、どうもありがとう。