5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

【sed】シェルスクリプト総合@LINUX Part2【awk】

1 :ミスターバッシュ:2006/08/03(木) 13:10:00 ID:5dVnjkpT
UNIX板のスレを見ている方も多数おられるかと思いますが、
まあそれはそれとして、BASHウゼーとか言われる心配なく
平和にLINUX的スクリプト談義しましょうよ。

初めての自作スクリプト、自信ないから見てください。な初心者から
トリッキーな技を駆使した作品を披露したい、蘊蓄を語りたい上級者まで
いろいろな人に参加して頂けると嬉しいです。

perlやらPythonやらの話が混ざっても良いんでない?

前スレ
http://pc8.2ch.net/test/read.cgi/linux/1121994321/

>>2-5あたりに色々と。

2 :ミスターバッシュ:2006/08/03(木) 13:12:11 ID:5dVnjkpT
関連スレ
おまいら! sed の使い方教えて下さいm(_ _)m@linux板
http://pc8.2ch.net/test/read.cgi/linux/1067815570/l50
【Shell】どのシェル使ってる?【Script】@LINUX板
http://pc8.2ch.net/test/read.cgi/linux/1067330754/
シェルスクリプト総合 その6
http://pc8.2ch.net/test/read.cgi/unix/1143302182/
sed@UNIX板
http://pc8.2ch.net/test/read.cgi/unix/1085730992/
2ちゃん画像落としまくりスクリプト@UNIX板
http://pc8.2ch.net/test/read.cgi/unix/1003833552/
連番のH画像/動画を一気にダウンロードする2
http://pc8.2ch.net/test/read.cgi/unix/1135533382/

ログを読みたい人はこちら
http://makimo.to/cgi-bin/search/search.cgi?q=%83V%83F%83%8B%83X%83N%83%8A%83v%83g&andor=OR&sf=0&H=&view=table&all=on&shw=

3 :ミスターバッシュ:2006/08/03(木) 13:13:16 ID:5dVnjkpT
参考リンク
bashで始めるシェルスクリプト基礎の基礎 @IT
http://www.atmarkit.co.jp/flinux/rensai/theory08/theory08a.html
シェルスクリプト(Bash)入門 CYBERAM Documents Project
http://cyberam.dip.jp/linux_command/shellscript.html

IBM developerWorks
bash 例解
http://www-6.ibm.com/jp/developerworks/linux/000714/j_bash.html
http://www-6.ibm.com/jp/developerworks/linux/000714/j_bash2.html
http://www-6.ibm.com/jp/developerworks/linux/000714/j_bash3.html
実例でわかるsed
http://www-6.ibm.com/jp/developerworks/linux/010202/j_l-sed1.html
http://www-6.ibm.com/jp/developerworks/linux/010216/j_l-sed2.html
http://www-6.ibm.com/jp/developerworks/linux/010223/j_l-sed3.html
実例でわかるawk
http://www-6.ibm.com/jp/developerworks/linux/010330/j_l-awk1.html
http://www-6.ibm.com/jp/developerworks/linux/010413/j_l-awk2.html
http://www-6.ibm.com/jp/developerworks/linux/010622/j_l-awk3.html
コマンドラインからのグラフィックス操作
http://www-6.ibm.com/jp/developerworks/linux/031031/j_l-graf.html
洗練されたPerl: MP3とPerlで遊ぶ
http://www-6.ibm.com/jp/developerworks/linux/040402/j_l-cpmp32.html
http://www-6.ibm.com/jp/developerworks/linux/040319/j_l-cpmp31.html

4 :login:Penguin:2006/08/03(木) 14:44:47 ID:NQ3T36sk
前スレで

one
two
three

の改行を「,」に置換してつなげたいと質問したものです。
結果として、sedではなく、pasteを使って解決致しました。

$ paste -s -d , file > newfile

sedでやる方法については、結構むずかしそう(Nとか駆使)なので、
時間をかけて勉強していきたいと思います。アドバイスして下さった
方々、ありがとうございました。これからもよろしくお願い致します。

5 :login:Penguin:2006/08/03(木) 17:55:54 ID:TFA/5ZAA
>4
からかって悪いけど、前スレで「tree 」を見たとき笑ってしもうた。

6 :login:Penguin:2006/08/03(木) 21:08:32 ID:NQ3T36sk
>>5
(*・∀・)あわてて、何事もなかったように直しましたとも。

7 :login:Penguin:2006/08/03(木) 21:47:36 ID:tNhCb6YC
>>1

>>4
他のスレで拾った物だけど
sed -ne '1h;1!H;${x;s/\n/,/g;p}' file > newfile

http://pc8.2ch.net/test/read.cgi/tech/1112553783/

8 :login:Penguin:2006/08/03(木) 22:39:28 ID:NQ3T36sk
>>7
ありがとうございます。今、テストしたら完璧でした!
原理はこれから学びます。胸のモヤモヤがとれました。

9 :login:Penguin:2006/08/03(木) 23:27:57 ID:TFA/5ZAA
関係ない話だけど、
「原理」とか「摂理」とかいう比較的重い意味を持つ概念が
怖いものの代名詞というか、近づいてはならぬものに
使われる言葉となってしまったことは悲しいことだ。

なんかbashのスクリプト一発でドカンと世界中の破壊的カルトを消滅させられればいいのに・・・

10 :login:Penguin:2006/08/04(金) 00:24:00 ID:YSnXFLrG
>>9

つ find 世界中 -name カルト -exec rm {}\;

11 :login:Penguin:2006/08/04(金) 00:39:59 ID:eCSPZD0t
どんなに自分(達)だけは違うとか言い張っても
スクリプト書いてる時点で所詮はハッカー夷的カルトだろ。
つか何で又とつぜん???

12 :login:Penguin:2006/08/04(金) 00:48:36 ID:tTQk3to+
>11
んにゃ、単に「原理」→「統一協会(統一=原理)」→
「破壊的カルト」と連想が行ったので、急に
「ビンラディンとか文鮮明とかおかしな連中を一斉に消せないかしら」
と思っただけで深い意味はないわ。
スレ汚し失礼。

13 :login:Penguin:2006/08/04(金) 02:16:12 ID:hXVs7Oof
rm -f /bin/ladin

14 :login:Penguin:2006/08/04(金) 02:20:36 ID:UtLdfbE9
$ gen-riken > /dev/null

15 :login:Penguin:2006/08/04(金) 07:15:35 ID:tTQk3to+
ははは。皆さんノリが良いですねえ。

16 :login:Penguin:2006/08/04(金) 21:29:56 ID:YSnXFLrG
質問です。

カレントに apple orange pine etc というディレクトリがあり、これに
次々とログインして(出来ればetc以外)、

$ myprog

と実行したいのですが、どこから手をつけて良いのやらまったくわかりません。
わかる方、ヒントだけでも結構ですので、ご教授頂けませんでしょうか?

17 :login:Penguin:2006/08/04(金) 22:03:09 ID:YSnXFLrG
微妙に自己解決

ls -1 | sed '/^etc/d' | xargs myprog

で出来たくさいけど、美しくないです。
出来れば、これを

$ myprog

一発でやれたらなと思ってます。

18 :login:Penguin:2006/08/04(金) 22:04:26 ID:YSnXFLrG
たびたびすいません。訂正です。

>>16
誤 次々とログインして
正 次々と移動して

でした。すいません。

19 :login:Penguin:2006/08/04(金) 22:38:41 ID:dXMK20nx
>>16

for workingdir in apple orange pine etc # 「etc」がいらなきゃ削れ
do
    cd $workingdir
    myprog
    cd ..
done

ま、cd .. という流儀が気に入らないという奴がこのスレにはいるかも。
そういう奴は適当にレスつけろや。

20 :login:Penguin:2006/08/04(金) 22:41:39 ID:wY0VtmKQ
sedじゃないからレス付けないわよ

21 :login:Penguin:2006/08/04(金) 22:53:54 ID:dXMK20nx
sedのスレじゃないんじゃない?スレタイの【sed】はpart1の継承と思われ。

22 :login:Penguin:2006/08/04(金) 23:03:25 ID:VDkmAFM5
>>19
>17はlsしてるから、こういうことのような気がする。
for workingdir in !(etc) # bashのみ

myprog一発の意味は良くわからないままだが。

23 :login:Penguin:2006/08/05(土) 09:14:42 ID:O9k+WVF/
ふつーfindじゃね?
ttp://www.linux.or.jp/JM/html/GNU_findutils/man1/find.1.html
-path pattern参照


24 :login:Penguin:2006/08/05(土) 14:47:48 ID:9HX9xiOs
{}\ の意味を教えてください!
GoogleやYahooで出ないよ!!!!なんでー

25 :login:Penguin:2006/08/05(土) 14:48:38 ID:J3gOyxfQ
>>24
引数は特にない。区切り記号

26 :login:Penguin:2006/08/05(土) 15:21:31 ID:4ssKXxYM
>>24

正確にいうと、

{}\ でなく、{} \

スペース空けないとエラーになります。

27 :login:Penguin:2006/08/05(土) 15:23:21 ID:J3gOyxfQ
>>26
正確に言うと{}\;ではないか

28 :login:Penguin:2006/08/05(土) 17:30:27 ID:XjGTvucN
>>24
話が見えないんだが…
find の引数ってことで良いの?


29 :login:Penguin:2006/08/06(日) 01:16:46 ID:Myj22fA7
まずman読もうよ....

>引き数は、 `;' を含む引き数にいたるまで、すべて command の引き数と
>みなされる。文字列 `{}' は現在処理しているファイル名に置き換えられる。

30 :login:Penguin:2006/08/07(月) 19:15:39 ID:C6inuQl7
>>19 >>22

亀レスですいません。アドバイスありがとうございます。
諸事情でネットに繋ぐことが出来ませんでした。

具体的にやりたいことを説明しますと、/var/spool/ml の下に100個程のディレク
トリがあります。etc他、数ディレクトリは無視して、任意のディレクトリ配下の
activeファイルからコメント行(#)を削除。その後、$ cp members actives を実行、
という感じです。
どういう用途かと言いますと、メーリングリストのユーザ設定ファイルのゴミ行を
整理する目的です。で、現在、次の様なmyprogというスクリプトを書き

#/bin/sh
PROGRAM=`basename $0`
HOME=/var/spool/ml/
for x in "$@"
do
if [ -d $x ]; then
if [ -f $x/actives ]; then
cd $x
sed '/^#/d' actives | sort | uniq > members;
cp members actives;
echo "done... $x"
else
echo "actives not found... $x"
fi
cd $HOME
else
echo "not direcotory... $x"
fi
done

31 :login:Penguin:2006/08/07(月) 19:16:14 ID:C6inuQl7
下記コマンドでやりたいことは出来るのですが
$ ls -1 | sed -e '/^bin/d' -e '/^etc/d' -e '/^@/d' -e '/^doc/d' | xargs myprog
出来れば、ls -1 の結果を配列(あるのかな?)に入れて、myprog内で実行したいと
思っています。また、こうすればもっと美しくなるというアドバイスもあれば、とても
うれしく思います。

32 :login:Penguin:2006/08/07(月) 19:30:10 ID:C6inuQl7
少し短くなりました。後は、ls -1 の結果を forに渡せれば完璧
なんですが(´・ω・`)

#/bin/sh
PROGRAM=`basename $0`
HOME=/var/spool/ml/t/

for x in "$@"
do
if [ -f $x/actives ]; then
sed '/^#/d' $x/actives | sort | uniq > $x/members;
cp $x/members $x/actives;
echo "done... $x"
else
echo "actives not found... $x"
fi
done



33 :login:Penguin:2006/08/07(月) 20:48:45 ID:gs8/6rb4
やりたいことできてるならそれでいいじゃん。
きれいに書きたいとか配列使いたいとかなら
もっとまともなスクリプト言語使った方がいいよ。
そういうのをシェルに求めちゃいかん。

34 :login:Penguin:2006/08/07(月) 22:46:57 ID:w0ywXoJn
やきもそ?

35 :login:Penguin:2006/08/07(月) 23:23:40 ID:h+JkAwh7
TOPDIR=/var/spool/ml/t/

cd "${TOPDIR}"
for x in *
do
case "$x" in
bin|etc|doc|@*)
continue
;;
esac

${PROGRAM}はいらないのでは?
${HOME}を書き換えるのも気持ち悪いかと


36 :login:Penguin:2006/08/08(火) 09:51:22 ID:xwC3gQjv
for x in `find hoge`でまわして
除外対象は${x%hoge}でチェックとかはよくやる。

あと、ここの前擦れにwhile+readの例があったと思う。
お、まんまの例があった。
ttp://x68000.q-e-d.net/~68user/unix/pickup?%A5%B7%A5%A7%A5%EB%A5%B9%A5%AF%A5%EA%A5%D7%A5%C8


37 :login:Penguin:2006/08/10(木) 01:17:08 ID:hLDol0PX
>>33-36
アドバイスありがとうございます。
勉強になります。

>>35
PROGRAMは慣習でつけてます。拡張していった時に
echo "usage: $PROGRAM filename"
とかって使ったりするので。たしかにHOMEは気持ち悪いですね。直しました!

>>36
for x in `find hoge`
これは使えるかも!ありがとうございます!コマンド結果をxに渡せるとは
知りませんでした。

38 :login:Penguin:2006/08/11(金) 00:24:55 ID:dPYSw/pT
>>37
$0

39 :login:Penguin:2006/08/11(金) 19:52:52 ID:c1dCdFjO
Cutlist: 0-2731,19014-21714,37651-41262,64752-68382,80903-84503,95557-98910,
という出力を
0 2731 0
19014 21714 0
37651 41262 0
64752 68382 0
80903 84503 0
95557 98910 0
このように整形することはできました。(最後の0は定数)
さらにこの個々の値を全て29.97で割って倍精度出力したいのですが
シェルスクリプトでそこまで出来るでしょうか?
できるという方、その方法を教えてください。お願いします。

今のところのコマンド
mythcommflag --getcutlist -f /mpeg/rec/1007_20060609005300.mpg | grep Cutlist | sed -e 's/Cutlist: //' -e 's/-/\t/g' -e 's/,/\t0\n/g' | sed -e '$,$d'

40 :login:Penguin:2006/08/11(金) 20:41:43 ID:byhCsImE
>>39
最終結果(倍精度出力)はawkあたりを使うと良いと思われ。

41 :login:Penguin:2006/08/11(金) 22:17:16 ID:AQmE1c/e
>>40
#!/usr/bin/gawk -f
/^Cutlist/ {
sub(/^Cutlist: */, "", $0);
sub(/,$/, "", $0);
n = split($0, a, ",");
for(i = 1; i <= n; i ++){
split(a[i], j, "-");
printf("%f %f 0\n", j[1] / 29.97, j[2] / 29.97);
}
}

42 :39:2006/08/11(金) 22:27:22 ID:c1dCdFjO
>>40-41
ありがとうございます。神です。
今から自分で一行ずつ理解していくつもりです。
# ちょっと複雑な物はawkのがいいのかな

ありがとうございました。

43 :login:Penguin:2006/08/12(土) 02:02:48 ID:F5xv4HYx
基本的な質問ですが、このスレって、sed、awk限定ですか?
それとも、「シェルスクリプト総合」とある様に、他の質問などしても大丈夫
なんでしょうか?

44 :login:Penguin:2006/08/12(土) 02:22:13 ID:0D4xQrt3
【】はアホが付けたゴミなので無視すべし。

45 :login:Penguin:2006/08/12(土) 15:55:03 ID:qqxmgQZ0
>39
bcの有無次第という経験がある。
perlの方がawkの実装違いに悩むよりはいい鴨試練。

>43
expectあたりもおk

46 :login:Penguin:2006/08/12(土) 17:23:29 ID:rfgDoil3
wish もシェルの内?


47 :login:Penguin:2006/08/12(土) 17:49:22 ID:0P6HlNMI
仮にそうだとしても、このスレに書いても反応ないと思う。

48 :login:Penguin:2006/08/13(日) 00:22:41 ID:/XLxPgJE
大げさでも遠慮する必要もない、どんどん使え。
どうせperlは必須科目、読み書きできてあたりまえ。
pythonも必須科目になりつつある。
ruby、どうかな。
bashのスクリプトをpythonで書き直すとかはいい訓練になるよ。
古代象形文字を英語に翻訳する感じ。

49 :login:Penguin:2006/08/13(日) 00:33:57 ID:CGwN7DaL
>>48
そうですか。んでは次の方どうぞ。

50 :login:Penguin:2006/08/17(木) 14:26:19 ID:NdJCZwC6
正規表現について質問です。

dir
dir1
dir10
dir.tar
file.php

とあり、dir、dir1、dir10という風にdir[数字0桁〜2桁]へマッチさせたい
のですが、

"^dir[0-9][^\.]"

だと、dir自体にマッチしてくれません。どう書けばいいんでしょうか?
昨日からやってます。アドバイスお願い致します。
ちなみに、PHPのereg()です。

51 :login:Penguin:2006/08/17(木) 14:29:36 ID:1Ek0hIni
>>50
PHP part2
http://pc8.2ch.net/test/read.cgi/tech/1127806509/

52 :login:Penguin:2006/08/17(木) 20:06:26 ID:nAJZh721
>>50
grep -e "^dir[0-9]*$"

53 :login:Penguin:2006/08/18(金) 00:36:00 ID:Dr7kWMUz
>>52
dir111

ハイアウト。


54 :login:Penguin:2006/08/18(金) 00:44:07 ID:RiO8CgXj


55 :login:Penguin:2006/08/18(金) 00:54:13 ID:OVN7tn41
数字は2桁までだそうですよ、センセ

56 :login:Penguin:2006/08/18(金) 00:55:07 ID:RiO8CgXj
なるほど。

>>52は俺じゃないけど

grep -e "^dir[0-9]$" -e "^dir[0-9][0-9]$"

これでいいんか?

57 :login:Penguin:2006/08/18(金) 01:01:10 ID:FNYS+oEf
grep じゃなくて PHP だそうですよ、センセ。

58 :login:Penguin:2006/08/18(金) 01:02:06 ID:K8QeIm2Y
だったらお前が書いてやれ、センセ

59 :login:Penguin:2006/08/18(金) 10:11:45 ID:uU/Ps5z+
(^dir$|^dir\d{1,2}$)


60 :login:Penguin:2006/08/18(金) 10:37:01 ID:FNYS+oEf
http://pc8.2ch.net/test/read.cgi/tech/1127806509/419
で解決してるみたいよ。

61 :login:Penguin:2006/08/18(金) 12:19:14 ID:uU/Ps5z+
dir\D+ともマッチしそうだけど、まいーか

62 :login:Penguin:2006/08/18(金) 12:23:17 ID:uU/Ps5z+
あ、大丈夫だな

63 :login:Penguin:2006/08/19(土) 17:46:13 ID:CKH2sw8O
テキストファイルの中から、 "\b[a-zA-Z]{10}\b" にヒットする単語
(スペース+アルファベット10文字+スペース)を抽出して一覧で出
したいんですが、手も足も出ません。

awkかsedで実現する方法を教えていただけませんでしょうか。

64 :login:Penguin:2006/08/19(土) 21:11:45 ID:lL38en3G
>>63
(step 1)1行複数単語→1行1単語の形式にまず直す。
これは\bを改行にtrすることでほぼ実現できる(余計な空行とか多少入るけど)。
(step 2)grep '^[a-zA-Z]{10}$' のようなことをする。
(grepの実装によっては{}をサポートしてたりしてなかったりするだろう)

65 :63:2006/08/19(土) 21:41:31 ID:CKH2sw8O
>>64
貴殿、頭いいな。方向性は見えた。Thanks。


66 :login:Penguin:2006/08/20(日) 12:36:50 ID:8BT2kJaV
きのうやっとsedとかawkの勉強を始めたOSX使いの俺はお断りですかそうですか。
断られないようにきっちり勉強してくると汁。

でもさあ、
いまいち練習のいいネタが見つからないんだよなあ。
みなさま正規表現の練習とかするときのネタは、どこから仕込んでるんですか?

67 :login:Penguin:2006/08/20(日) 12:45:30 ID:HHyoi7jx
>>66
htmlでも解析してみたらどうだい?

68 :login:Penguin:2006/08/20(日) 15:37:07 ID:6ucGe45P
>>66
俺は初めはviの置換で練習した。sedと同じ表記が可能。
awkは言語としてとらえたほうがいいかも。


69 :66:2006/08/20(日) 15:46:43 ID:8BT2kJaV
>>66
BlogのHTMLの解析をして、それをRSSにでっち上げるとか面白そうだからやってみようと思いますた。

さっきからdatを解析してました。HTMLに吐き出すもの。
この1行で処理するというのには正直感動。

$ cat dat1.dat | awk -F"<>" '{print "<h1>" $3 "</h1><p>" $4 "</p>"}' | sed -e 's/\(http:\/\/.*\/l50\)/<a href=\"\1\">\1<\a>/g' > test.html

こんな具合だけれど…。文章中にリンクがあったときに、自動でタグをくっつけるやり方がいまいちぱっとしない。

sed -e 's/\(http:\/\/[^/]*\)/<a href=\"\1\">\1<\a>/g'
ホストのトップディレクトリにリンクがはれる('A`)。

いわゆる | をつけて処理しようとすると、うちのsedは何も吐き出さないんだけれど、これはバージョンが古いってことかな。

70 :login:Penguin:2006/08/20(日) 16:58:41 ID:jjYenmqQ
1行で実現するより、複数行になってもawkオンリーあるいはsedオンリーで実現した方が美しいだろ。


71 :login:Penguin:2006/08/20(日) 17:00:11 ID:HHyoi7jx
>>70
TPO

72 :login:Penguin:2006/08/20(日) 20:07:25 ID:9C4Qkftc
xmlawkつかうといいよ。

73 :login:Penguin:2006/08/20(日) 23:30:08 ID:OEoaYPnv
それで練習になるのか?

74 :login:Penguin:2006/08/21(月) 02:12:20 ID:Wd9CmAkD
>>69
いわゆる | って正規表現の選択のやつ?
だとしたら、BREには選択はないのでそもそも使えない。

ただし、GNU sed だと \| という表記で使える。


75 :login:Penguin:2006/08/22(火) 21:07:59 ID:+v8xeAHC
初歩的な質問で恐縮です。

user1:AAAAAAAA
user2:BBBBBBBB
user3:CCCCCCCC

という中身のファイルがあったとします。で、user3の行があれば、第2カラムを
DDDDDDDDに変更。無ければ、user3:DDDDDDDDの行を追加したいのですが、何の
コマンドを使えばよろしいんでしょうか?希望としては、コマンド一発で出来る
方法を探っています。※Perlなどでスクリプトを組まない

お知恵をお借り出来ればと思います。宜しくお願い致します。


76 :login:Penguin:2006/08/22(火) 21:11:51 ID:iaWm4QvQ
>>75
(grep -v '^user3:' srcfile ; echo user3:DDDDDD) > tmpfile ; mv tmpfile srcfile

77 :login:Penguin:2006/08/22(火) 21:29:52 ID:+v8xeAHC
>>76

ありがとうございます。
でも、これだと、user1,user2が上書きされて消えてしまいます(T.T)

78 :login:Penguin:2006/08/22(火) 21:33:49 ID:iaWm4QvQ
ぇー

79 :login:Penguin:2006/08/22(火) 21:39:31 ID:+v8xeAHC
なんか例がわかりずらかったですね。
もっと細かく説明します。

adminファイル
admin:AAAAAAAA
power:CCCCCCCC

userファイル
user:DDDDDDDD

とあり、userファイルに、adminファイルの内容を追加したいのです。
追加だけなら

$ cat admin >> user

で済むのですが、既に追加済みの場合は、新しく、adminとpowerの行を
上書きしたいのです。わかりずらくてすみません。

80 :login:Penguin:2006/08/22(火) 21:46:24 ID:iaWm4QvQ
細かくも何もぜんぜん要求仕様ちがうやん。
いつのまにかファイル2個あるし。

81 :login:Penguin:2006/08/22(火) 22:10:49 ID:NABXSFVh
joinつうコマンドでできるような気がするが、オプション覚えるのがめんどくさいから、
俺はその手の処理にはawkを使うようにしている。


82 :login:Penguin:2006/08/22(火) 22:10:59 ID:+v8xeAHC
すいません。m(__)m
説明不足でごめんなさい。

83 :login:Penguin:2006/08/22(火) 22:36:43 ID:iaWm4QvQ
join 微妙だなぁ。cat してワンライナー組んじゃった方が早い感じ。

84 :login:Penguin:2006/08/22(火) 22:37:55 ID:qaN2f1N0
>>75を無理矢理一行で書いてみた。sed -iを使ったので反則気味。

#!/bin/sh

grep -q -c "user3:" userfile \
&& sed -i 's/^user3:.*$/user3:DDDDDDDD/' userfile \
|| echo "user3:DDDDDDDD" >> userfile

85 :login:Penguin:2006/08/22(火) 23:46:45 ID:90hvAnWP
Linuxをインストールする時のパッケージや設定とかをシェルスクリプトにまとめたことある人いますか?
シェルスクリプトはやったことがないので、こんな感じでまとめていいものか、
途方にくれています。


「スクリプト前」
# cd /etc
# mv -i logrotate.conf logrotate.conf.org
# cp -i -p logrotate.conf.org logrotate.conf
# vi logrotate.conf
# ci -u -zLT logrotate.conf



「スクリプト後」
if [ cd /etc];
then
mv -i logrotate.conf logrotate.conf.org &&
cp -i -p logrotate.conf.org logrotate.conf &&
cp -p /home/SHELL/logrotate.conf logrotate.conf &&
ci -u -zLT logrotate.conf
else
echo"logrotate Error!!!"
fi

86 :login:Penguin:2006/08/23(水) 02:58:44 ID:LeEwpLMn
>85
行動の成否で判定したいだけなら[]は余計。

87 :login:Penguin:2006/08/23(水) 05:01:38 ID:B3/HAlAd
引数に特定の文字列があるかどうか grep で確かめたい場合、
どういう書き方が一番いいでしょうか?
今は

if echo "$1" | grep 'h[ao]ge' > /dev/null ;then

こんな感じでやってるんですけど、
echo と /dev/null へのリダイレクトが冗長に思えるので、
もっと簡潔なやり方があれば教えてください。

88 :login:Penguin:2006/08/23(水) 06:01:06 ID:uCowIUgO
>>87
case $1 in h[ao]ge) echo found ;; *) echo notfound ; esac
正規表現じゃなくてパス名展開なので注意

89 :login:Penguin:2006/08/23(水) 19:14:08 ID:XWE7YPDO
>>87
grep -q

90 :login:Penguin:2006/08/23(水) 21:54:25 ID:m8SvDdPt
>>89
grep -s な環境もあるので、>/dev/null の方がポータブル。

91 :login:Penguin:2006/08/29(火) 10:44:29 ID:LacrCZoW
>>86の補足。

シェルスクリプトの文法では、if文は、
if コマンド; ...
なので、if cd ...; と書くという意味ね。

[ はif文の括弧じゃなくてtestコマンドへのリンク。
if [ ... ]; then は if test ...; then と等価。
test ではなく [ という名前で実行した場合は最後に ] という引数が
ないとエラーになるという作りになっている。

92 :login:Penguin:2006/08/30(水) 08:56:40 ID:ptUsDypX
あぁ、]は引数なのか。どうりでスペースが。。。
勉強になった。ありがと。>>85じゃないけど

93 :login:Penguin:2006/09/01(金) 20:00:08 ID:lCcTQKLy
bashで、ファイルAとファイルBの
タイムスタンプの同一性が確認したいのですが、
どーやればいいのでしょうか。
内容の同一性ではなく、あくまでタイムスタンプの同一性です。

Cでかけば、多分こんな感じ。
struct stat stat1=fstat(file1);
struct stat stat2=fstat(file2);
if( stat1.mtime==stat2.mtime){....}

bash ではどうするのでしょうか?


94 :login:Penguin:2006/09/01(金) 20:08:17 ID:5aC2i0M0
test ! tstest1 -nt tstest2 -a ! tstest1 -ot tstest2 && echo hoge

95 :login:Penguin:2006/09/01(金) 20:46:18 ID:9V2XQm3y
>>93
statを使えば可能かと

96 :login:Penguin:2006/09/03(日) 02:05:43 ID:F8zNeDUy
ディレクトリを755
ファイルを644で一括して変換したいんですが、

$ chmod -R 755 dir

だと、ファイルも755になってしまします。何か良い方法かコマンドがあったら
教えて下さい。chmodのman見たけど、ないっぽいのでこちらで質問します。

97 :login:Penguin:2006/09/03(日) 02:10:10 ID:Ke5Muy7n
find -type

98 :login:Penguin:2006/09/03(日) 11:45:21 ID:bshh0ysH
>>96
find tmp \( -type d -exec chmod 0755 {} \; \) -o \( -type f -exec chmod 0644 {} \; \)


99 :login:Penguin:2006/09/03(日) 11:47:59 ID:O81fbTM3
findってキモいなぁ

100 :login:Penguin:2006/09/03(日) 11:54:50 ID:Kb773J88
chmod -R a+r,u+w

160 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.02 2018/11/22 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)