- 1 名前:名無しさん@お腹いっぱい。 [2008/02/11(月) 19:21:07 ]
- シェルスクリプトの総合スレです。
スクリプトのお勉強・自慢・腕試しなどにどうぞ。 まずは注意点、リンク、地鎮祭など(>>1-6くらい)をご覧ください。 □お約束 ・特記なき場合はBourne Shell(/bin/sh)がデフォルトです。 bash/zsh/ksh/ashなどに依存する場合は明示しましょう。 Linuxユーザは/bin/shの正体がbashなので特に注意。 ・csh/tcshのシェルスクリプトは推奨されません。 (理由は「csh-whynot」でググれ) ・UNIXにはシェルスクリプトに便利な小さなコマンドがいろいろあります。 manや参考リンクを見ましょう。 aproposないしはman -kでそれらしい単語による簡単な検索もできます。 ・シェルスクリプトのことをシェルってゆーな ・シェルで使えるワイルドカード等は正規表現ではありません。 正規表現の話題はスレ違い(正規表現スレへ) □初心者へのアドバイス: ・適した道具を判断するのも頭の重要な使い方。シェルスクリプトよりも RubyやPerlの方が適した仕事には素直にそちらを使いましょう。 ・知らないコマンドが出てきたらmanを引きましょう。 ・思い通りに動かないときは、まずは sh -x でトレースしましょう。 前スレ シェルスクリプト総合 その9 pc11.2ch.net/test/read.cgi/unix/1187130302/
- 818 名前:名無しさん@お腹いっぱい。 [2008/05/06(火) 20:45:33 ]
- unix初心者ですが、シェルについて教えてください。
if文で、if〜then〜else〜endif を使用しています。 if文の判定は、ファイル有無の判定です。 判定対象のファイルを正規表現で記述すると、elseまで辿り着きますが、 メタキャラ"?"で判定すると、elseまで辿り着かず、 「照合パターンに合いません」 と出力され終了してしまいます。 シェルの構文は下記の通りです。 #!/bin/csh if ( -f /tmp/a?a.log ) then echo "ファイルが見付かりました" else echo "ファイルが見付かりませんでした" endif メタキャラを使用して、ファイル判定をする方法を教えて頂けませんでしょうか。 宜しくお願い致します。
- 819 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/06(火) 20:50:12 ]
- >>818
cshでスクリプトを作ってはいけません。 どうしてもcshが良いなら独学でどうぞ。
- 820 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/06(火) 21:05:42 ]
- >>818
#!/bin/sh if [ -f /tmp/a?a.log ]; then echo 'ファイルが見付かりました' else echo 'ファイルが見付かりませんでした' fi
- 821 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/06(火) 21:15:22 ]
- #!/bin/sh
[ -f /tmp/a?a.log ] && { echo 'ファイルが見付かりました' } || { echo 'ファイルが見付かりませんでした' }
- 822 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/06(火) 21:19:42 ]
- #!/bin/sh
s=; [ -f /tmp/a?a.log ] || s='せんで'; echo 'ファイルが見付かりま'"$s"'した'
- 823 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/06(火) 21:27:57 ]
- s=;(</tmp/a?a.log)2>/dev/null||s='せんで';echo 'ファイルが見付かりま'"$s"'した'
- 824 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/06(火) 22:16:35 ]
- ゴルファーがいるw
- 825 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/06(火) 22:21:36 ]
- すんません、検索したけど見つからなかったので教えてください。
bash + awk, bc, perl あたりで、小数部が3桁の計算をして、 その結果を変数に格納してます。その後、その変数の値を 絶対値にして返してくれるコマンドはありませんか? 上記のbash, awk, bc, perl あたりでできれば一番良いのですが。 よろしくお願いしまつ。
- 826 名前:名無しさん@お腹いっぱい。 [2008/05/06(火) 22:44:52 ]
- > 820、821
ありがとうございました。 Bシェルで作成します。 … 作成したのですが、複数ファイルがマッチした場合、 ファイル名: binary operator expected が表示され、マッチしたにも関わらず、elseが適用されます…。 ご存知でしたら、複数マッチしても、真となるような方法を教えて頂けませんでしょうか。
- 827 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/06(火) 22:58:20 ]
- >>825
マイナス符号を取ったらいいだけだろ $ var1=-123.456 $ expr $var : '-*\(.*\)' 123.456 $ var2=123.456 $ expr $var : '-*\(.*\)' 123.456
- 828 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/06(火) 23:01:42 ]
- >>826
#!/bin/sh if ls /tmp/a?a.log 2>/dev/null; then echo 'ファイルが見付かりました' else echo 'ファイルが見付かりませんでした' fi
- 829 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/06(火) 23:14:46 ]
- >>825
$ var=-123.456 $ echo ${var#-} 123.456 $ var=123.456 $ echo ${var#-} 123.456
- 830 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/06(火) 23:22:26 ]
- bash依存乙。
- 831 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/06(火) 23:29:02 ]
- だからksh由来だと何度(ry
まあテンプレにもあるようにsh以外ならそう明記すべきだな。
- 832 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/07(水) 11:40:42 ]
- カレントディレクトリ配下のファイルにsedをかけたいのですが、
どのようにしたらできますか?
- 833 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/07(水) 11:50:19 ]
- >>832
要エスパー質問だなw for file in * do sed 's/hoge/hage' "$file" > "$file".new done てことをやりたいのか?
- 834 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/07(水) 11:54:09 ]
- >>832
OSやシェルの種類/バージョンは秘密ですか? それを秘密にしたままでは誰も答えられないでしょう。 このレス以外、レスは0件でしょう。
- 835 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/07(水) 11:58:42 ]
- OSはわかりません。(アウトソーシングでunameが使えないため)
ShellはBashです。 $ bash --version GNU bash, version 3.1.17(1)-release >>833 それだと、カレントディレクトリのファイルしか置き換えできません。 カレントディレクトリ配下をすべて置き換えたいです。 また、置き換えしたいので、.newファイルを作成したいのではないです。 (名前を変更すればいいだけですが。)
- 836 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/07(水) 12:02:49 ]
- >>835
find . -type f -exec sed -i 's/hoge/hage' {} \;
- 837 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/07(水) 12:06:32 ]
- >>834
OS関係ないだろw すでに適切な回答がなされた後で再読み込みもせずに余計なことを書いた >>834 は今ごろ赤面。
- 838 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/07(水) 12:09:01 ]
- >>835
「カレントディレクトリ配下」という言葉の使い方を間違ってます。
- 839 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/07(水) 14:40:31 ]
- >>832, >>834-835, >>837-839
具体例を出さない書き込みは禁止。
- 840 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/07(水) 18:20:43 ]
- >>838
配下っていう意味的にはあってるでしょ
- 841 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/07(水) 18:21:36 ]
- >>840
合ってない。直下のディレクトリのみ指す用語。
- 842 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/07(水) 18:24:34 ]
- >>841
配下って言うのは、傘下って意味。 参加は直下以外も指す。 ダイハツの下もTOYOTAの傘下でしょ。
- 843 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/07(水) 18:39:44 ]
- >>842
勝手に言葉を定義されても、困るのですが。
- 844 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/07(水) 18:46:27 ]
- その人の支配に属していること。また、その者。手下。部下。
- 三省堂提供「大辞林 第二版」より 類語: ⇒ 関連語 てした【手下】 ⇒ 関連語 さんか【傘下】 ⇒ 関連語 したやく【下役】 - YAHOO辞書より
- 845 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/07(水) 18:47:48 ]
- 一言「サブディレクトリ以下も含む」と付け加えれば意味が通じたのに、
>>832 は「サブディレクトリ」という用語を知らないに1票。
- 846 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/07(水) 18:52:45 ]
- 例えば、
/aaa/bbb というディレクトリがあって、 touch /aaa/bbb/ccc.txt ってやりたい時、 bbbディレクトリに書き込みパーミッションがあれば、 aaaディレクトリは書き込み禁止であっても書き込める。 よって、bbbはaaaに支配されているわけではない。 aaa自体の書き込みパーミッションは、 aaa直下に作成するファイルにしか効かない。 つまり、bbbはaaaの支配には属していない。
- 847 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/07(水) 19:10:11 ]
- 基本的には親ディレクトリを削除したら下は全部削除されるんだから支配されてるでしょ。
孫請け会社が親とは直接的なやり取りがないのとおなじ
- 848 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/07(水) 19:19:12 ]
- リンク
- 849 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/07(水) 19:19:17 ]
- >>846 >>847
だから、勝手に言葉を定義されても困るのですが。 >>845 「再帰的(reccursive)に」というキーワードがありますね。 よくあるオプションは-rですか。
- 850 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/07(水) 19:21:22 ]
- -Rだな
- 851 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/07(水) 19:33:05 ]
- >>849
言葉を定義してるはあなたも同じでしょ。 YAHOO辞書に従うと、類義で傘下があるから傘下としてはただしいんだし。
- 852 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/07(水) 19:42:10 ]
- >>851
いや、してませんけど。 言葉は流動的なもので、大辞林や広辞苑にこう書かれている、としても、 それがすべての場合に同様に正確にあてはまるわけではないのは、日常の 言葉のやりとりで体得していないのですか? プログラム言語じゃあるまいし。
- 853 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/07(水) 20:20:38 ]
- >>847
逆。下のディレクトリがあると親ディレクトリは削除できない。 そういう意味では子に親が支配されてる。 あと、NFSとかnullfsでループバックマウントする場合、 子のディレクトリを別の場所にマウントすると まさに親ディレクトリに関係なく子のディレクトリにアクセスできる。 ディレクトリ間は単にリンクしあっているだけであって、支配関係はない。
- 854 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/07(水) 22:40:38 ]
- >>852
指標にはなるでしょ。 根拠をしめしてるだけ、ちゃんと示してる。 >>853 削除できないようにしてるだけ。
- 855 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/07(水) 22:59:03 ]
- いったいなんのスレだここはw
- 856 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/08(木) 05:17:48 ]
- こういう宗教戦争があるのがUNIX板のいいところ
- 857 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/08(木) 08:25:57 ]
- どうでもいいが、>>836 で正解もらってるのに、
>>835 = >>832 から礼の一言もなしに書き逃げしてるなw
|

|