[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 05/09 21:40 / Filesize : 275 KB / Number-of Response : 969
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

シェルスクリプト総合@LINUX Part3



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あたりに色々と。


5 名前:login:Penguin [2007/07/14(土) 11:17:49 ID:29sQfd47]
>>4
nkf とか iconv とか。

6 名前:login:Penguin [2007/07/14(土) 22:31:28 ID:Lb+uQxni]
シェルスクリプトの引数にワイルドカードを渡すと、
該当するファイルがファイルシステム上にある場合はそのファイルが変わりに
引数として渡されるみたいですが、ワイルドカード自体を取得したいのです。
何か方法はないでしょうか?
ちなみにダブルクォーテーションをつければ展開されないのは知っていますが、面倒で。。

(例)
$ test.sh *.txt
$ echo $1
とするとカレントにあるXXX.txtを表示するのではなく
「*.txt」を表示したいのです。

7 名前:login:Penguin mailto:sage [2007/07/14(土) 22:53:16 ID:29sQfd47]
>>6
呼ばれるスクリプトの側でなんとかしたいってことなら
無理だよ。

8 名前:login:Penguin [2007/07/14(土) 23:13:50 ID:Lb+uQxni]
>>7
そんな気はしていましたが、そうですか。。
残念です。

9 名前:login:Penguin mailto:sage [2007/07/14(土) 23:26:42 ID:29sQfd47]
呼ぶシェル側でなんとかするなら
$ set -o noglob
$ test.sh *.txt
とか。

10 名前:login:Penguin [2007/07/15(日) 05:00:56 ID:OzInTFfn]
>>6
test.sh '*.txt'
(シングルコーテーションならてんかいされないはず)

11 名前:login:Penguin mailto:sage [2007/07/15(日) 11:22:44 ID:oGW94xFn]
>2
おまけの関連スレ

シェルスクリプト相談室
pc11.2ch.net/test/read.cgi/tech/1112553783/
awkについて語るスレ $2
pc11.2ch.net/test/read.cgi/tech/1172242542/

12 名前:login:Penguin [2007/07/15(日) 12:37:56 ID:llPpP8sT]
>>8
よく仕様がわからんが、スクリプトの多段階呼び出しで展開されたくないんだったら、
$ test.sh @.txt
みたいに、擬似ワイルドカード指定指定しておいて
使ううときに、
fs=`eco $1 | sed 's/@/*/'`
echo $fs


13 名前:login:Penguin mailto:sage [2007/07/15(日) 22:24:45 ID:ZpXAubZ6]
>>6
complete とかで、補完のルールを作れるんじゃないか?

bashで補完スレ [UNIX板]
pc11.2ch.net/test/read.cgi/unix/1013019416/




14 名前:login:Penguin [2007/07/16(月) 12:28:16 ID:MK2VLXxK]
すみませんちょっとヘルぽ

/homeの中にある複数のファイル・ディレクトリーをrm -rf したいのですが
/home/hogeとlost+found だけは消したくないので

何とかそれ以外を消す方法をご教示頂きたいのですが
おしえてたもれ

15 名前:login:Penguin mailto:sage [2007/07/16(月) 13:05:49 ID:fC+1yCpQ]
>14
shell script関係ないが、lsでリストとって、リストから削除したくないファイル・ディレクトリを削除し、
その後 rm -rf `cat 〜` なんかするのが間違いなくて確実だとおもー。

16 名前:login:Penguin mailto:sage [2007/07/16(月) 13:13:37 ID:hTbLQxc+]
>>14
bashだったら、GLOBIGNORE="hoge:lost+found" に賭けてみたまえ

17 名前:login:Penguin mailto:sage [2007/07/16(月) 13:32:26 ID:xW/HZyHj]
/home/hogeとlost+foundに書き込み禁止属性をつけてから一気に rm -rf
その後戻せばいいのでわ

18 名前:login:Penguin mailto:sage [2007/07/16(月) 21:41:14 ID:J/qZmNrt]
>>14?!(xxx|yyy)

19 名前:login:Penguin mailto:sage [2007/07/17(火) 03:37:44 ID:I2w4SVYd]
awk の出力をコマンドとして実行したいでつ。
どうやればいいでつか?

20 名前:login:Penguin mailto:sage [2007/07/17(火) 10:02:57 ID:ZxaQD0ZF]
awk ... | sh


21 名前:login:Penguin mailto:sage [2007/07/18(水) 08:18:48 ID:Dw+iZryL]
>>5
遅くなりましたが、ありがとうございます。
試してみたいと思います。

22 名前:login:Penguin mailto:sage [2007/07/18(水) 16:34:40 ID:cvC9pUm6]
>>20
ありがとう。
できまちた。

23 名前:login:Penguin mailto:sage [2007/07/19(木) 07:38:39 ID:gg1Is+TJ]
>>16 >>17 >>18 
dクス

とりあえず、試験機でゴリゴリしてみます



24 名前:login:Penguin mailto:sage [2007/07/19(木) 07:41:44 ID:gg1Is+TJ]
あ、>>15 もdクスです
その方法でやってみたいと思います

25 名前:login:Penguin [2007/07/20(金) 01:54:45 ID:bZea7ZdA]
スクリプトに実行時間制限を設けたいんですが、いい方法はないですか?
厳密さは求めていません。暴走防止程度です。
(因みにLinux初心者のプログラマです、あまり複雑な概念は未だ理解できていないと思います。

今は大体こんな感じでやろうとしています、
(sleep 10; kill $$)&
時間制限を設けたいコマンド

これだと、時間内に終了しなかったとき、スクリプトのみ終了し、実際に終了させたいコマンドは生き残ります。
時間内に終了したときにkillさせないために最後に kill `jobs -p` すると「(sleep 10; kill $$)&」は終了しますが、sleepだけが残ります(自然消滅はする
だからといって kill 0 とするとこのスクリプトの呼び出し元まで死んでしまいます。

プロセスを kill するときに、その子も殺せればいいんですが如何でしょうか。

26 名前:login:Penguin mailto:sage [2007/07/20(金) 02:25:54 ID:zucTG+iZ]
>>25
ps --ppid とか pstree -p とかで
子の pid を調べれば
kill できると思う。

27 名前:login:Penguin mailto:sage [2007/07/20(金) 07:34:06 ID:0zbWXhyq]
ulimit -tはだめ?
CPU使った時間になっちゃうけど。


28 名前:login:Penguin mailto:sage [2007/07/20(金) 13:11:40 ID:VbE5NJtk]
killのman見ればprocess groupを殺す方法書いてあるだろうに。

29 名前:login:Penguin mailto:sage [2007/07/22(日) 01:17:56 ID:MkzMxIYh]
>>26
pstree -p からpidだけ取り出す方法が分かりません。
ps --ppid の再起で殺すようにしてみましたが思い通り動いてくれません。
間違えている可能性は大いにありますが。

>>27
CPU時間でも構いません。寧ろその方が良いかもしれません。
ありがとうございます。調べてみます。

>>28
でしょうね。

30 名前:login:Penguin mailto:sage [2007/07/24(火) 02:36:44 ID:TdZoIfh3]
>>29

% pstree -p 親PID
親cmd(親PID)-+-子cmd(子PID)

と表示されるんだから、

% pstree -p 親PID | perl -nle '/親PID\)[^\(]+\((\d+)\)/ && print $1'
子PID

とならないかな?awkでもsplitを使えば同じようにできると思う。
そもそもperl使うならpstreeもkillも内部で呼び出せば済むけど。
それ以前にプロセスをアレコレする関数かmodがあるんだろうな...

31 名前:login:Penguin [2007/08/04(土) 23:01:23 ID:prsNz29A]
awkの区切り文字に'|'を指定するにはどうすればいいですか
awk -F'|'
ではパイプとみなされてしまいます

32 名前:login:Penguin mailto:sage [2007/08/04(土) 23:37:42 ID:dhi36EzE]
やってみた。
% echo 'a|b|c' | gawk -F'|' '{print $2}'
b

33 名前:login:Penguin mailto:sage [2007/08/05(日) 03:46:06 ID:a+1tcmkL]
>>31

-F'[|]' とか




34 名前:login:Penguin mailto:sage [2007/08/05(日) 23:10:51 ID:ftJrAaPL]

非rootのアカウントからシェルを実行して
規定のHDDをマウントしたいと思っています。
問題は非rootなのでmountの実行権が無い点です。

sudo は設定方法がよく分からないので、
もちょっと簡単なやり方ないかと探しているのですが
何かよい方法ないもんでしょうか?

スクリプトの中でrootでログインして、そのまま
実行してほしい。(passwd入力はOK)

ちなみにSuSE 10.2を使ってます。


35 名前:login:Penguin mailto:sage [2007/08/05(日) 23:39:27 ID:YQ3bjemY]
>>34
sudo の設定くらいわかれ。
そんなに難しくないよ。

36 名前:login:Penguin mailto:sage [2007/08/06(月) 01:50:25 ID:xhWrZGpQ]
sudo -u USER /dev/hd ...

いかん、だるい。

37 名前:login:Penguin mailto:sage [2007/08/06(月) 02:18:34 ID:AKmvozj+]
>>34
/etc/fstabの規定のHDDのエントリ内に user というオプションを書いておけば、
そこは一般ユーザでもmount/unmountできるようになる。
もちろんこの場合、mountコマンド自体のxビットは、一般ユーザが実行できるように
設定する必要がある。

38 名前:login:Penguin [2007/08/06(月) 22:17:00 ID:LTHEPNn8]
テキストファイルが2つあると仮定して、(a.log、b.txt)
a.logはソフトのログファイル。
b.txtはerror、badなどの複数行の文字列が入っています。

で、a.logに対して、b.txtの中を一行ずつgrepさせたいときはどうすればいいの?

↓のようにしたい。b.txtは50行程度の行数があるとする。
grep -i error a.log
grep -i bad a.log
grep -i ...... a.log
などをしたい。



39 名前:login:Penguin mailto:sage [2007/08/06(月) 22:32:01 ID:kQOiX48t]
$ cat b.txt | while read keyword; do grep -i "$keyword" a.log; done

bshしか知らね。

40 名前:login:Penguin mailto:sage [2007/08/06(月) 22:50:29 ID:q2/C5Z+3]
grep -f b.txt a.log

41 名前:login:Penguin [2007/08/09(木) 03:57:05 ID:q+NJZ5PJ]
スクリプトの中から、
スクリプト自身のパスを知るにはどうすればいいですか?

42 名前:login:Penguin mailto:sage [2007/08/09(木) 06:28:33 ID:EHaDR+6/]
echo $0

43 名前:login:Penguin mailto:sage [2007/08/09(木) 08:01:28 ID:NwjhxE+f]
>>42
www.nurs.or.jp/~asada/FAQ/UNIX/section4.4.html



44 名前:login:Penguin mailto:sage [2007/08/09(木) 11:34:05 ID:EHaDR+6/]
>>43
俺? $0で十分だと思うけど?

45 名前:login:Penguin mailto:sage [2007/08/09(木) 21:51:00 ID:8UsjPRp6]
うわ。あさたくの文章、久しぶりに見た。

46 名前:login:Penguin mailto:sage [2007/08/10(金) 18:42:50 ID:hRezB52r]
こんなの作った。

#!/bin/sh

for i in "$@"
do
a="$(echo $i | nkf -w)"
mv $i $a
done

convmv は元の文字コードを指定しなきゃならないのが面倒なので。
良かったらどぞ。

47 名前:46 mailto:sage [2007/08/10(金) 18:44:30 ID:hRezB52r]
書き忘れたので一応。
./myconvmv.sh *
とかで使える。

48 名前:38 mailto:sage [2007/08/11(土) 02:02:30 ID:h4twNLWe]
>>39
>>40
できました。神様ありがとう。


49 名前:login:Penguin mailto:sage [2007/08/15(水) 18:16:19 ID:oxw3opBU]
・ファイルを指定フォルダ内へコピー
・同名ファイルが存在する場合は、
既に存在するファイル名を「ファイル名.1」へ変更し、
既にファイル名.1が存在しているのであれば、それをさらにファイル名.2へ変更し、、、(繰り返し)

というコピーシェルスクリプトがほしいんですが、
簡単な記述方法などがあったらおながいします。


50 名前:login:Penguin mailto:sage [2007/08/15(水) 18:22:48 ID:vI6OWTR9]
>>49
自分ではどこまでできたの?

51 名前:49 mailto:sage [2007/08/15(水) 18:30:05 ID:oxw3opBU]
シェルスクリプト自体ほとんど作成経験がないので、
mv とかのオプションでそんな機能ないかな〜と
調べている程度の状態です。
--------------------------------------------------
・同名ファイルが存在する場合は、
既に存在するファイル名を「ファイル名.1」へ変更し、
既にファイル名.1が存在しているのであれば、それをさらにファイル名.2へ変更し、、、(繰り返し)
--------------------------------------------------
この部分を数行で教えていただけるとありがたいでつ。
ループ処理が必要になるのはなんとなく予想がつくのですが、、、

52 名前:login:Penguin mailto:sage [2007/08/15(水) 18:34:51 ID:vI6OWTR9]
>>51
ファイルが何番まであるかを先にチェックして
番号大きい方から順に mv してくのが楽かな。
[ とか expr 使え。

53 名前:login:Penguin mailto:sage [2007/08/15(水) 23:30:14 ID:BP+0zqca]
番号をrotateすることに大した意味がないことに気付き、--backupオプションとかで安易に済ます。
そんな自堕落な道を私は選びました。



54 名前:login:Penguin mailto:sage [2007/08/16(木) 07:16:56 ID:D/eLf54Q]
ディレクトリにあるすべての*.cファイルを
全部*.cppにするにはどういう風に書いたらよいのでしょうか?
mv *.c *.cpp
としてみましたがだめでした
どなたかお知恵を...

55 名前:login:Penguin mailto:sage [2007/08/16(木) 07:57:42 ID:Uoi1O64b]
rename コマンドで出来そうな気がする。

56 名前:login:Penguin mailto:sage [2007/08/16(木) 10:10:37 ID:MWEjh3WB]
まあそうだけど。シェルスクリプトスレであることだし
for f in *.c; do mv "$f" "${f}pp"; done

57 名前:login:Penguin mailto:sage [2007/08/16(木) 13:33:29 ID:D/eLf54Q]
>>56
Thx,できますた!

58 名前:login:Penguin mailto:sage [2007/08/23(木) 16:17:17 ID:n9QZBMiJ]
flashの動画をダウンロードできる
シェルスクリプトある?

59 名前:login:Penguin mailto:sage [2007/08/23(木) 16:36:59 ID:lPn22JjI]
kurekure厨

60 名前:login:Penguin mailto:sage [2007/08/23(木) 16:53:47 ID:C+I5hIDu]
>>58
普通にwgetでダウンロードすればいいだけでは?
youtubeから簡単に落としたいとかであればyoutube-dlとかが便利。

61 名前:login:Penguin mailto:sage [2007/08/24(金) 19:56:13 ID:k2Yrnokn]
すごく基本的なことなんだろうけど、
いくつかのディレクトリの中にあるファイルのそれぞれの名前を変数に入れたいんだけど、

files=ls dir* | sort

for i in files
do

done

みたいなことは出来ませんか?
要するに標準出力する内容を変数に入れたいだけなんだけど。

62 名前:login:Penguin mailto:sage [2007/08/24(金) 20:25:50 ID:iKvrTLai]
>>61
「コマンド置換」でぐぐってみ

63 名前:login:Penguin mailto:sage [2007/08/24(金) 20:43:22 ID:k2Yrnokn]
>>62
理解できました。どうもありがとりんこです。



64 名前:login:Penguin mailto:sage [2007/08/26(日) 16:36:55 ID:sDCP6Pah]
ファイル一覧だと長大になって溢れるので

 ls ... | sort | while read i; do echo $i; done

とかも定番。

65 名前:login:Penguin mailto:sage [2007/08/27(月) 08:44:07 ID:mTK43/6/]
for i in dir*
do

done

sortを挟むのは良くわからんが、単純にこんなんで済む話じゃね?

66 名前:login:Penguin mailto:sage [2007/08/27(月) 18:32:24 ID:Vup2OsE3]
>>64
それだとlsの時点ですでに溢れる

67 名前:login:Penguin mailto:sage [2007/08/27(月) 20:04:00 ID:5Y4ThyNx]
find DIR -exec (ここで好きなことやれ) \;


68 名前:login:Penguin mailto:sage [2007/08/28(火) 00:17:04 ID:Gt/lw90m]
/home/200708/1200・・・1300・・・1400/と100刻み1800までディレクトリーがあるとして
A.PDFとかファイルが格納されてて

0KB〜150MBなら 「ne-yo」
500〜600MBなら 「OK」 とfile.txtを出力したいのでつが・・・・・
if,thenの繰り返ししかないでしょうかね?

69 名前:login:Penguin mailto:sage [2007/08/28(火) 00:58:46 ID:is4Tjxw4]
なんのバイト数? そのディレクトリ内ファイルの総和?

70 名前:login:Penguin mailto:sage [2007/08/28(火) 08:13:17 ID:k11zEdxe]
こんな感じ?

 $ du -s * | awk '{ print $2," ", ($1 > 10000 ? "ne-yo" : "OK") }'

条件文のところは自分で書き換えてくれ。

71 名前:login:Penguin mailto:sage [2007/08/28(火) 09:07:28 ID:LHhLJxDo]
なるほどdu か。。。。と、>68とはちがう漏れ様が感心しますたーw

72 名前:login:Penguin mailto:sage [2007/08/28(火) 14:07:23 ID:LHPFC9xp]
du 以外だと例えば何が?

73 名前:login:Penguin mailto:sage [2007/08/28(火) 16:21:13 ID:N3nQTqrG]
すいません、初心者の質問です。

# time = 0.1000000000000000E-01
0 0.0000000000000000E+00 0.9108669739482692E-01 0.2058642824721793E-04 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00
1 0.3175362884490020E+01 0.5150471547462544E+01 0.2241689225773500E-03 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00

# time = 0.2000000000000000E-01
0 0.0000000000000000E+00 0.9108669739482692E-01 0.8246429583076927E-04 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00
1 0.3176583636040012E+01 0.5152080697165893E+01 0.8959185481550624E-03 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00
2 0.1132676183258557E+01 0.5482797684864557E+01 0.1300893227929982E-03 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00

# time = 0.3000000000000000E-01
0 0.0000000000000000E+00 0.9108669739482692E-01 0.1858117181080544E-03 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00
1 0.3178027531327324E+01 0.5153971284976635E+01 0.2013740280923297E-02 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00

という形式で出力されるデータで、# time = 0.2000000000000000E-01からはじまって、# time = 0.3000000000000000E-01の手前までを切り出すスクリプトを教えてもらえないでしょうか。できればawk(perlかrubyでも構いません)で教えていただけるとありがたいです。




74 名前:login:Penguin mailto:sage [2007/08/28(火) 16:31:19 ID:kk6ZVe0N]
>>73
つcsplit

75 名前:login:Penguin mailto:sage [2007/08/28(火) 22:47:28 ID:WiEkAmOg]
cat /tmp/test.txt | gawk '/^# time = 0\.3/{exit} /^# time = 0\.2/{flag=1} flag==1 { str = str$0"\n" } END{print str}'

こんな漢字か。酔っているので合っているのかどうだか。
0.000000...の部分は付け足してクレイ

76 名前:login:Penguin mailto:sage [2007/08/28(火) 23:05:57 ID:WiEkAmOg]
cat /tmp/test.txt | gawk '/^# time = 0\.20+E-01 *$/,/^ *$/ {print $0}'

あと仕様の意味が、#time=...から始まる一ブロックだけ出す(空行が出たらオシマイ)
という意味ならもっと単純になる

77 名前:login:Penguin mailto:sage [2007/08/28(火) 23:48:14 ID:Gt/lw90m]
>>70 すげーまさにOK!ですた! 
awk の ? と : の使い方に感動

>>71-72  ls -lh とかでやろうとしたのは漏れ様も同じww



78 名前:login:Penguin mailto:sage [2007/08/29(水) 12:08:46 ID:NEtL1MxO]
>>74
>>75
さっそくにありがとうございます。
試してみます。


79 名前:login:Penguin [2007/08/29(水) 22:41:00 ID:4pERO676]
再帰的に2つのディレクトリをdiffしたいのですが存在するかしないか
と違うファイルだということだけわかればいいので
わかりやすく比較する方法はありませんか?
diffのマニュアルみてもそれらしいのはないようで

80 名前:login:Penguin mailto:sage [2007/08/29(水) 22:50:35 ID:UIgvqpQI]
>>79
diff -rq dir1 dir2 ではだめなの?

81 名前:login:Penguin mailto:sage [2007/08/29(水) 22:51:26 ID:N3MeiS9e]
>>79
www.gnu.org/software/diffutils/manual/html_node/Comparing-Directories.html#Comparing%20Directories
$ LANG=C diff -r dir1 dir2 | grep Only
とかである程度分かるかも。


82 名前:login:Penguin mailto:sage [2007/08/29(水) 22:52:42 ID:N3MeiS9e]
む、-qで違いが分かるのか orz


83 名前:login:Penguin mailto:sage [2007/08/29(水) 23:16:46 ID:9GyP78LH]
デジャヴなんだが俺だけか?



84 名前:login:Penguin [2007/08/30(木) 01:02:14 ID:F11xsKF5]
パッケージようなのバージョンを比較する方法がわかりません。

イメージ的には、こんなことがしたいんです↓
----------------------------------
hoge="1.3.37"
foo="1.11.12"
if [ "$hoge" -gt "$foo" ]; then
echo "OK"
else
echo "NG"
fi
----------------------------------

これだと、以下のようjにエラーになってしまいます。。。。
[: 1.3.37: bad number
NG



85 名前:login:Penguin mailto:sage [2007/08/30(木) 04:22:00 ID:GmS5dPb3]
hoge="1.3.37"
foo="1.11.12"

hoge=`echo $hoge | gawk -F. '{print (($1*100+$2)*100)+$3}'`
foo=`echo $foo  | gawk -F. '{print (($1*100+$2)*100)+$3}'`

if [ "$hoge" -gt "$foo" ]; then
echo "OK"
else
echo "NG"
fi

ピリオド区切りの数が固定(この場合は3)
ピリオド内の桁数が固定(この場合は1-2桁)

という条件付だけど。これらが不定なら、$1,$2,$3...を$iにして、
NFまでループさせればいいと思う

86 名前:login:Penguin mailto:sage [2007/08/30(木) 07:19:55 ID:QpfKAJKg]
そのバージョン表記の書式にもよるけど、

 oldv=1.11.12
 newv=1.3.37

として

 if [ `echo $newv -gt $oldv | sed 's/\.//g'` ]; then
  echo OK;
 fi

もしくは、

 if [ `echo $newv.$oldv | tr . ' ' | xargs printf "%d%.3d%.3d -gt %d%.3d%.3d"` ]; then
  echo OK
 fi

あたりでどうかな。


87 名前:login:Penguin mailto:sage [2007/08/30(木) 18:00:56 ID:bHskgKzh]
>>84
rpmver ってのがある。
$ rpmver -v 1.3.37 1.11.12
RPM version 1.3.37 is lesser than version 1.11.12.

Vine,VineSeed の RPMS.main SRPMS.main にある。
他のディストリは知らないけど
パッケージが用意されてるかもしれない。

88 名前:login:Penguin mailto:sage [2007/08/30(木) 23:05:03 ID:nhWZyH15]
$ which rpmver
rpmver not found

うえーん。。。

89 名前:login:Penguin mailto:sage [2007/08/31(金) 00:47:12 ID:U99N+hxP]
>>84
Linux板だからbashでもいいよね。
#!/bin/bash
v2n () {
local IFS=.
set $1
echo -n $(($1 * 1000000 + $2 * 1000 + $3))
}
hoge="1.3.37"
foo="1.11.12"
echo $(v2n $hoge) $(v2n $foo)
if [ $(v2n $hoge) -gt $(v2n $foo) ]; then
echo "OK"
else
echo "NG"
fi
添削してぇ

90 名前:73ですが mailto:sage [2007/09/01(土) 15:15:18 ID:uwRTp3HZ]
>>76
おくればせながらありがとうございました。

91 名前:73ですが mailto:sage [2007/09/01(土) 22:39:45 ID:uwRTp3HZ]
>>76
仕様はおっしゃるとおりです。
その際のスクリプトも教えてくだされば幸いです。
なお、他のスクリプトは現在のところ動作していません。わたしの知識不足なのだろうと思うのでもうすこし調べてみます。
#0は補ってはあるのですが...
ついでといってはなんですが、awkの本でおすすめの本などありましたら教えていただけませんか?

92 名前:login:Penguin mailto:sage [2007/09/02(日) 04:19:30 ID:WMH1r7G1]
>>91
オライリーの sed & awk
てかawkの本なんて何冊もないって。


93 名前:login:Penguin mailto:sage [2007/09/02(日) 08:46:56 ID:ToB27R8d]
本命 足立さんの訳してる awk 本
大穴 awk 256 本



94 名前:login:Penguin mailto:sage [2007/09/02(日) 20:47:44 ID:VmAuZafy]
awk256倍はDOS時代からある骨董本で内容もふざけまくっているが、初心者が
「正規表現」「連想配列」という二つのキモを学習するにふさわしい内容。
読み終わったあとも、巻末の関数一覧がずっと使える。未だに刷を重ねてるけど
愛用者もおおいんじゃない?
大して御本家3人の書いたawk本は内容が高度な上に散発的で、調べたいことが
すぐに出てこなくて使いにくい

>>91
>>76のがその仕様のスクリプトなんだけど。うまく動かないのは、スペースとかが
ちゃんとコピペされてないからなんじゃないの?

95 名前:73ですが mailto:sage [2007/09/02(日) 21:37:03 ID:71yMDj2y]
>>92-94
本の紹介ありがとうございました。
>>94
気づきませんでした。すいません。スペースの問題などを再確認してみます。
またなにかあったら伺うかもしれません。よろしくおねがいします。

96 名前:login:Penguin mailto:sage [2007/09/02(日) 21:40:05 ID:QLbcFUyG]
DOS時代ってのはいつまでを言うんだ?

97 名前:login:Penguin mailto:sage [2007/09/02(日) 21:55:05 ID:ToB27R8d]
awk 256 本の話の文脈としては、MS-DOS上のawk実装の時代かな

98 名前:login:Penguin mailto:sage [2007/09/02(日) 22:03:47 ID:VmAuZafy]
>>97
そう。今の版じゃ改訂されてるのかもしれないが、俺の持ってるのだと
gawkをDOSに移植したjgawkとかいうのを下敷きにしていて、中には486を乗せたキューハチだと
スクリプトの速度が向上したとか、パイプの実行速度が遅いのはUNIXみたいな本物のパイプじゃないからとか、
そんな話題が満載

99 名前:login:Penguin mailto:sage [2007/09/02(日) 22:04:37 ID:QLbcFUyG]
MS-DOS上のawk実装の時代ってのはいつを言うんだ?

100 名前:>>84 [2007/09/04(火) 00:34:58 ID:3rxVdbk9]
おくらばせながら、ありがとうございますm(_ _)m

101 名前:login:Penguin mailto:sage [2007/09/06(木) 08:15:09 ID:33eRwNa2]
指定されたディレクトリ以下にあるディレクトリ一覧を返してくれるコマンドはありませんか?

/data/ をTOPディレクトリとしますと
/data/hoge/
/data/piyo/
/data/moge/

等が帰ってくるコマンドです。で、この際 /data/hoge/direc/ みたいに、TOPディレクトリの
孫ディレクトリ以下は返さないで欲しいんです。TOPディレクトリの子ディレクトリのみを
返して欲しいのです。そして for TARG in command; do 処理; done のように
for文で1つ1つのディレクトリを処理したいのです。

それからもう1つ、指定されたディレクトリ以下の子ディレクトリの数を返すには
ls -l /data/ | grep ^d | wc -l
でいいのでしょうか?ディレクトリだと ls -l した時に必ず最初が dから始まるので
これでディレクトリのみがマッチして、後はwcでその行数を数えればいいかと思っているのですが
今の所これでちゃんと動作していますが、不具合が発生するようなケースは想定されますか?
ディレクトリの数も孫ディレクトリ以下は数えません(再帰処理しない)。

昨日 basename と言う便利なコマンドを知った程度のレベルの人間ですので
awk や sed 等の難しいコマンドはなるべく使わずに実現したいのですが、出来ませんかねぇ?
宜しくお願い致します。

102 名前:login:Penguin mailto:sage [2007/09/06(木) 08:27:57 ID:QTrKtnCG]
>>101
ls -d /data/*/

103 名前:login:Penguin mailto:sage [2007/09/06(木) 08:30:08 ID:QTrKtnCG]
/data/.x/ とかも考慮したいなら find で。



104 名前:login:Penguin mailto:sage [2007/09/06(木) 08:31:55 ID:33eRwNa2]
>>102
あっちゃー・・・・そんな簡単なコマンドでこんな素晴らしい出力が得られるんですか!
LinuxのCUIって本当に高機能ですね・・・素晴らしいです。本当にありがとうございます。

ls -l /data/ | grep ^d | wc -l
ってやるより
ls -ld /data/*/ | grep ^d | wc -l
ってやる方が良いのでしょうか?どんなファイルやディレクトリがあっても確実に動作するような
書き方をしたいのですが・・・。

105 名前:login:Penguin mailto:sage [2007/09/06(木) 08:32:01 ID:QFjDOBHf]
属性が見えて良ければ
ls -d /data/*|grep "^d"








[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<275KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef