シェルスクリプト総合@LINUX Part3
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001login:Penguin
2007/07/10(火) 23:17:13ID:qGthZdMEまあそれはそれとして、BASHウゼーとか言われる心配なく
平和にLINUX的スクリプト談義しましょうよ。
初めての自作スクリプト、自信ないから見てください。な初心者から
トリッキーな技を駆使した作品を披露したい、蘊蓄を語りたい上級者まで
いろいろな人に参加して頂けると嬉しいです。
perlやらPythonやらの話が混ざっても良いんでない?
【sed】シェルスクリプト総合@LINUX Part2【awk】
http://pc11.2ch.net/test/read.cgi/linux/1154578200/
http://pc8.2ch.net/test/read.cgi/linux/1121994321/
>>2-5あたりに色々と。
0853851
2008/03/26(水) 22:04:51ID:B6BxqxUi# which tree
/usr/bin/which: no tree
残念なことに入ってないんです。
いろいろ調べまわった結果がこれなんです。
もう少し自分でも調べてきます。
0854login:Penguin
2008/03/26(水) 22:31:33ID:f9ufLLgD0855login:Penguin
2008/03/26(水) 23:21:22ID:5Znd97qm0856login:Penguin
2008/03/27(木) 00:04:09ID:ZXE2f6WUPATH が通ってないだけとか。locate 辺りで調べてみたら?
他に何かあったっけ>探す方法
0857851
2008/03/27(木) 00:35:50ID:yDbPGpUf下記のシェルスクリプトを「/usr/bin/tree」に置いて代用することにしました。
#!/usr/bin/perl
use strict;
my($top)=$ARGV[0];
if($top eq ""){ $top="."; }
print "[$top]\n";
&tree("",<$top/*>);
sub tree
{
my($bar,@dir)=@_;
for my $i(0..$#dir){
my($bl1)=($i<$#dir)?"┣":"┗";
my($bl2)=($i<$#dir)?"┃":" ";
my(@path)=split(/\//,$dir[$i]);
if(-d $dir[$i]){
print "$bar $bl1 [$path[$#path]]\n";
tree("$bar $bl2",<$dir[$i]/*>);
}else{
print "$bar $bl1 $path[$#path]\n";
}
}
}
ちょっと中身を理解するのは難しいですけど、使いこなせたらperlも結構便利そうですね。
0858login:Penguin
2008/03/27(木) 01:47:43ID:nVTK+35Z> 下記のシェルスクリプト
ちょっとマテ
0859login:Penguin
2008/03/27(木) 04:19:25ID:LOwKjqa0ちなみに、鳥は何なの?
0860851
2008/03/27(木) 19:23:00ID:yDbPGpUfちなみに鳥はCentOS4.6で、サーバー構築の勉強用で使ってます。
最小構成でインストールしたからtreeコマンドが入って無かったのかもしれないです。
0861login:Penguin
2008/03/27(木) 19:43:49ID:ysMS9Gn70862login:Penguin
2008/03/27(木) 19:56:21ID:ORW3s1IJemerge beautiful_girl
0863login:Penguin
2008/03/27(木) 23:51:02ID:QsCLAAygpstreeだと思うんだ・・
0864login:Penguin
2008/03/28(金) 00:18:06ID:jk3nWqNP0865login:Penguin
2008/03/28(金) 00:18:55ID:deyesKz0そだったw
0866789
2008/03/28(金) 01:42:56ID:QgSpL7VJもりあがってんじゃねーかw
0867login:Penguin
2008/03/28(金) 01:46:42ID:deyesKz0javascriptをjavaと呼ぶひと、こんばんはw
0868login:Penguin
2008/03/28(金) 14:06:32ID:Z7X2dF3N下記のように変数をperlに渡したいんですが、変数を認識してくれません。
どうすれば良いですか?
set hoge = funi
perl -pe 'print $hoge' file
0869login:Penguin
2008/03/28(金) 15:16:41ID:KjmTtujqシングルクォートをダブルクォートに変える
0870login:Penguin
2008/03/28(金) 15:47:45ID:Z7X2dF3Nありがとうございます。
試してみましたが、ダメのようです。
setenvで与えると上手く行きましたが、setで出来る方法も知りたいです。
0871login:Penguin
2008/03/28(金) 16:04:18ID:UFHtgKJCあえてやるなら
perl -e 'print "'"$hoge"'"'
これはperlに print "funi" という式を渡したに等しい。
0872login:Penguin
2008/03/28(金) 17:22:58ID:Z7X2dF3Nありがとうございます。
やってみたら出来ました。
意味は分かんないのでこれから調べてみようと思います。
0873login:Penguin
2008/03/28(金) 17:26:00ID:s6QtoqP9sh 系で書いた方がいいんじゃない?
0874login:Penguin
2008/03/29(土) 22:39:26ID:Je2/7f5V(manpage でなくともそれに準ずる文書であれば構いません)
JM Project の bash(1) などや google で検索してみたのですが見つかりません。
>&- を使用しているシェルスクリプトは見つかりましたが、そこには正式な説明はありませんでした。
google って記号検索がとても弱いようなので シェルスクリプトとか GAME言語みたいな記号で頑張るタイプのを探すのは大変。
何か効果的な検索技があるんですかね。
0875login:Penguin
2008/03/29(土) 22:48:22ID:6BdICwv71から100を1、2、3…ではなく
001、002、003…と出力させたい場合どうしたらよいでしょう?
val=1
while $val lt 100
do
echo $val
val=expr`$val+1`
done
0876login:Penguin
2008/03/29(土) 22:53:17ID:z7EKOxA5for i in {0..9}; do printf "%03d\n" ${i}; done
0877login:Penguin
2008/03/29(土) 22:57:09ID:ZodWq0Ht0878874
2008/03/29(土) 23:01:58ID:Je2/7f5V0879875
2008/03/29(土) 23:02:33ID:6BdICwv7凄まじくソッコーのレス ありがとうございます。
形式を指定してるってことくらいは分かりました。
調べてきます!
ありがとございました。
0880login:Penguin
2008/03/29(土) 23:06:18ID:z7EKOxA5単純に、必要な個数の名前のリストがありゃいいだけなら、
これでもいいと思う。
seq -f "moe_ero_guro_%03g.png" 0 9
0881login:Penguin
2008/03/29(土) 23:16:52ID:U1N+QPd9{0..9} は bash3 じゃないと動かないはず。
まだ bash 2.05b の環境ってけっこうあるよね?
0882login:Penguin
2008/03/29(土) 23:19:47ID:ZodWq0Ht0883login:Penguin
2008/03/29(土) 23:23:13ID:ZodWq0Ht単に連番がつくりたいとき個人的によくやるのは
yes '' | cat -n | sed 100q
とか。
0884login:Penguin
2008/03/29(土) 23:30:36ID:WiwCN3W0seq -f %03g 1 100
0885login:Penguin
2008/03/29(土) 23:33:55ID:z7EKOxA5聞かれたから一応、答えておこう。そんな環境は知らん。
bash 2.05bなのはRHEL3かVineか、2005年ぐらいで閉鎖空間へ移行したやつだけだろ。
0886login:Penguin
2008/03/29(土) 23:36:52ID:WiwCN3W00887874
2008/03/29(土) 23:41:18ID:Je2/7f5VLa Fonera の seq は -f オプションなんか無いので
printf "%03d\n" `seq 1 10`
0888login:Penguin
2008/03/30(日) 00:08:49ID:36hI9fyL$ printf "%03d%03d\n" 1 2 3 4 5
001002
003004
005000
0889login:Penguin
2008/03/30(日) 00:34:47ID:91o/3wOFseq -w 1 100
0890874
2008/03/30(日) 00:48:35ID:VLE1BQADUsage: seq [first [increment]] last
Print numbers from FIRST to LAST, in steps of INCREMENT.
-w ? そんなオプション見たこと無い。(笑)
0891login:Penguin
2008/03/30(日) 15:18:36ID:AAKkqqTbfor f in *.hoge; do
mv $f ${f%.hoge}.fuga
done
っていちいち打ち込んでるんだけど、なんかいい方法ない?
0892login:Penguin
2008/03/30(日) 16:16:42ID:SBrBro/C過去ログ読め。
0893login:Penguin
2008/04/01(火) 00:07:30ID:mTzNKv6N0894login:Penguin
2008/04/01(火) 00:12:45ID:+SHNTduy仕様出てるだろ。
0895login:Penguin
2008/04/01(火) 00:12:57ID:bWFHq2/Gnicovideo-dl
0896login:Penguin
2008/04/01(火) 22:06:47ID:Mk5CpRwrbash: oppai: command not found
0897login:Penguin
2008/04/04(金) 13:09:23ID:Lie/X+/Subuntu7.1 server を使用しています。
シェルスクリプトを勉強し始めてLinuxの設定セットアップシェルを作ろうとしています。
■入力受付状態を省略し、自動入力にするにはどのようにすればいいのでしょうか?
例えばsambaのコマンドですが
smbpasswd -a root
をするとパスワードの入力を求められます。
普段なら手動でxxxxと入力するのですが、この作業を自動化したいのです。
色々調べてsedの使い方等はわかりファイルの書き換えによる設定はおおむね出来たのですが
上記のやり方は見つけることができませんでした。
どうかアドバイス頂けないでしょうか?
宜しくお願い致します。
0898login:Penguin
2008/04/04(金) 21:25:51ID:WDSwmhLmWindowsから接続しているなら、TeraTermのマクロで何とかできるかもね。
ただユーザー名やパスワードが見えてしまう状態でファイルに保存するから
セキュリティ上には良くないかも
sambaの設定ファイルだけバックアップ取って
ユーザーとパスワードはその都度入力するのが無難かと
0899login:Penguin
2008/04/05(土) 11:09:58ID:co3/wC9lexpectスクリプト
expectに突いてくるサンプルを読んで
0900login:Penguin
2008/04/05(土) 11:16:23ID:co3/wC9lapt-get source expect
して、サンプル見て。
0901login:Penguin
2008/04/06(日) 14:52:52ID:20te6qz40902login:Penguin
2008/04/06(日) 15:42:41ID:6d0Si0sC0903login:Penguin
2008/04/06(日) 17:08:40ID:Y81bdbYIシェル・スクリプトは基本だが、perl は awk やら python やらのワン・オブ・ゼムに過ぎないので、それが普通。
MS-Windows95の頃、cgiはperlスクリプトでという謎の風潮があった名残で、あなたのような疑問が出て来るのだろう。
0904login:Penguin
2008/04/07(月) 02:13:58ID:WGY+O99Dそうそう。
別に、cgiがシェルスクリプトでも問題ないし(使いにくいけど)、なんでもいい。
perlだろうが難だろうが、所詮手段なんだから、どうでもいいじゃんw
0905login:Penguin
2008/04/07(月) 08:01:37ID:DKzh8iuy多分、
同じ構造化手続き型言語なのに何で方言によって使える使えないみたいなこと言ってんの?
ということかと。
0906login:Penguin
2008/04/07(月) 20:27:53ID:ky4RCRjOそうなら「シェル」スクリプトスレで何言ってんだこのバカは?
ってな話しにしかならんからそれはなかろ。
0907login:Penguin
2008/04/08(火) 00:22:25ID:xWC78uSv0908login:Penguin
2008/04/08(火) 21:18:54ID:mlftshp4ttp://en.wikipedia.org/wiki/Alfred_V._Aho
0909login:Penguin
2008/04/08(火) 21:20:29ID:L1HkWImv0910login:Penguin
2008/04/09(水) 01:18:06ID:8anDW64k0911login:Penguin
2008/04/09(水) 01:40:20ID:vyKS0pT60912login:Penguin
2008/04/09(水) 02:03:59ID:JRgbXb6Kこの人もフィンランドだったな
0913login:Penguin
2008/04/09(水) 13:12:39ID:vyKS0pT60914login:Penguin
2008/04/09(水) 18:16:40ID:pjxRKuKNしょーもないレスして悲しくなってこないか?
0915login:Penguin
2008/04/09(水) 19:47:59ID:D07VbGXNbash: shoumo: command not found
0916login:Penguin
2008/04/09(水) 21:12:29ID:HudBzGNB/usr/local/mh/bin/show
なんていう時代もありました。
0917login:Penguin
2008/04/11(金) 16:25:19ID:3vnovWPW0918login:Penguin
2008/04/11(金) 16:30:16ID:p4V9vMAs0919login:Penguin
2008/04/11(金) 16:38:37ID:3vnovWPWめちゃくちゃありがとうございます!!!
0920login:Penguin
2008/04/11(金) 16:41:55ID:h4xwic1Oecho 00{0..9} 0{10..99} {100..999}
zsh なら
echo {000..999}
0921login:Penguin
2008/04/13(日) 00:08:59ID:C50QhsEF例として、mltermとurxvtを立ちあげ、
mltermでhogedを起動して、もうurxvtでhogec -e 'echo aaa'ってやったら
mltermの画面にaaaとか表示されるようなものです
同時に複数の作業をさせてるときにその進捗を1つのコンソールで見通せたらなとか思いまして…
0922login:Penguin
2008/04/13(日) 00:37:03ID:tBy+WuAg0923login:Penguin
2008/04/13(日) 08:41:28ID:LTuSsBD0端末B $ echo 'term B' > /dev/console
に類したことは、まれにやる。
0924login:Penguin
2008/04/13(日) 09:11:42ID:DHms7wovmlterm$ screen
urxvt$ screen -x
0925login:Penguin
2008/04/13(日) 09:16:44ID:DHms7wov0926login:Penguin
2008/04/13(日) 10:23:50ID:+bcR3tRWwall
0927login:Penguin
2008/04/13(日) 15:29:10ID:7nxEkg5Vそれは違うんじゃね?
0928login:Penguin
2008/04/14(月) 21:52:01ID:yIAGZ+M9┐('〜`;)┌ モウツカレタ
0929login:Penguin
2008/04/15(火) 07:03:22ID:KF+FiULr0930login:Penguin
2008/04/18(金) 07:50:33ID:9axeonkqnice bash したシェルで作業することがあるのですが、
いま自分が動かしているシェルの nice 値を簡単に
知る方法ってないですかね・・・
0931login:Penguin
2008/04/18(金) 08:23:44ID:JZJIXmIHそんなことも知らない人がniceするの?
それに対話型のコマンドにniceはあまり意味がない。
0932login:Penguin
2008/04/18(金) 09:08:39ID:9axeonkq0933login:Penguin
2008/04/18(金) 09:57:57ID:JZJIXmIH0934login:Penguin
2008/04/18(金) 11:45:33ID:u356hJZU0935login:Penguin
2008/04/18(金) 20:06:00ID:xUbq9+ce0936login:Penguin
2008/04/18(金) 23:11:33ID:cOa8NbkQ0937login:Penguin
2008/04/19(土) 13:43:25ID:khf4hkQE>reniceじゃダメなんでしょうか?
topでもいいよな。
0938login:Penguin
2008/04/19(土) 16:17:44ID:SCXXqtIf文字列に正規表現のフィルタをかけたいのですが
以下の場合、なぜエラーになるかわかりません。
何が悪いですか?
expr `ps` : ".*"
-> expr: syntax error
var1="aaa"
expr $var1 : ".*"
-> expr: syntax error
0939login:Penguin
2008/04/19(土) 18:02:41ID:XPjpMm+jvar1="aaa"
expr "$var1" : ".*"
0940login:Penguin
2008/04/19(土) 20:46:24ID:SCXXqtIfそれで出来ました。ありがとうございます。
でも理由がいまいちわかりません。
” ”で囲っていない為 → 文字列型ではない為 → では$var1は何を返すのか?
0941login:Penguin
2008/04/19(土) 21:02:50ID:SyasDtFa0942login:Penguin
2008/04/19(土) 22:41:34ID:QZlXANdfod
0943login:Penguin
2008/04/19(土) 22:50:17ID:SyasDtFaもう自分で作っちゃいました・
0944login:Penguin
2008/04/20(日) 10:43:22ID:C3cqRfnQ>” ”で囲っていない為 → 文字列型ではない為 → では$va
>r1は何を返すのか?
確かに、おれも気になるぞ
0945login:Penguin
2008/04/20(日) 13:49:25ID:yhaYk8sL0946login:Penguin
2008/04/20(日) 14:55:30ID:3JVOMAOFシェルスクリプトは、型だのなんだのはなくて
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`」が通るんで矛盾しているなぁと思っていたんですが
よく考えるとそんなことは無かったですね。
0947login:Penguin
2008/04/20(日) 17:11:52ID:oNW0JD98>>938が最初考えていたみたいに単語区切りが強い場合より、
出来ることが増えるんだけどな。
その代わりプログラマがちゃんと構文構成の責任を持たないといけないけども。
0948login:Penguin
2008/04/23(水) 22:57:21ID:xEICV4cPtail -f /var/log/maillog | grep [AAA|BBB]
とやってもだめでしたorz
どうすれば、OR検索ができるのでしょうか?
ANDは、パイプで追加すれば可能なのですが・・。
0949login:Penguin
2008/04/23(水) 23:29:21ID:Y+58Od8z0950login:Penguin
2008/04/23(水) 23:33:35ID:M4AkpEZtgrep -E "(AAA|BBB)" もしくは
egrep "(AAA|BBB)"
0951948
2008/04/24(木) 04:44:09ID:8uaGXJVCegrepでしたか、ありがとうございます。
>>949
1秒に100行以上流れるログなので、速すぎて読めないのよねw
0952login:Penguin
2008/04/24(木) 09:43:23ID:C5h8jkbMレス数が950を超えています。1000を超えると書き込みができなくなります。