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

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

シェルスクリプト総合 その8

1 :名無しさん@お腹いっぱい。:2007/02/15(木) 14:28:44
シェルスクリプトの総合スレです。
スクリプトのお勉強・自慢・腕試しなどにどうぞ。
まずは注意点、リンク、地鎮祭など(>>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 でトレースしましょう。

前スレ
シェルスクリプト総合 その7
http://pc10.2ch.net/test/read.cgi/unix/1157601611/


2 :名無しさん@お腹いっぱい。:2007/02/15(木) 14:32:25
□前スレや過去スレ:
シェルスクリプト総合 その7
http://pc10.2ch.net/test/read.cgi/unix/1157601611/
シェルスクリプト総合 その6
http://pc10.2ch.net/test/read.cgi/unix/1143302182/
シェルスクリプト総合 その5
http://pc10.2ch.net/test/read.cgi/unix/1137801629/
シェルスクリプト総合 その4
http://pc10.2ch.net/test/read.cgi/unix/1131026501/
シェルスクリプト総合 その3
http://pc10.2ch.net/test/read.cgi/unix/1124889646/
シェルスクリプト総合 その2
http://pc10.2ch.net/test/read.cgi/unix/1113664637/
シェルスクリプト総合 その1
http://pc10.2ch.net/test/read.cgi/unix/1101820646/

□関連スレ:
sed
http://pc10.2ch.net/test/read.cgi/unix/1085730992/
正規表現
http://pc10.2ch.net/test/read.cgi/unix/1039165754/
おまえら! shell は何を使っているんですか?
http://pc10.2ch.net/test/read.cgi/unix/1012330865/
Eshell の使い方とか設定とか【Emacs Shell、Lisp】
http://pc10.2ch.net/test/read.cgi/unix/1102921590/

3 :名無しさん@お腹いっぱい。:2007/02/15(木) 14:34:55
□初心者向けリンク
「誰にでも」シリーズ
ttp://kanji.zinbun.kyoto-u.ac.jp/~yasuoka/publications/dareUni/
/bin/shプログラミング入門
ttp://freebooks.info.nara-k.ac.jp/archive/ShellProgramming/
シェルを使おう - 導入からプログラミングまで -
ttp://www.netfort.gr.jp/~tomokuni/lms/shell/text/

□入門者向け書籍:
プロフェショナルシェルプログラミング
http://www.amazon.co.jp/exec/obidos/ASIN/4756116329/
入門UNIXシェルプログラミング―シェルの基礎から学ぶUNIXの世界
http://www.amazon.co.jp/exec/obidos/ASIN/4797321946/
UNIXシェルプログラミング徹底解説
http://www.amazon.co.jp/exec/obidos/ASIN/4822280489/
入門Kornシェル
http://www.amazon.co.jp/exec/obidos/ASIN/4873110149/
入門bash
http://www.amazon.co.jp/exec/obidos/ASIN/4900900788/

□参考リンク:
UNIXの部屋 (沢山のコマンドの簡単な紹介など)
http://x68000.q-e-d.net/~68user/unix/
POSIX: Shell & Utilities (標準規格)
http://www.opengroup.org/onlinepubs/009695399/utilities/contents.html


4 :名無しさん@お腹いっぱい。:2007/02/15(木) 14:35:28
□最近のシェルスクリプト本(1)

(2004/03) UNIXシェルスクリプトハンドブック 関根 達夫 (著)
http://amazon.co.jp/o/ASIN/4797326522/

(2004/10) UNIXシェルスクリプト逆引き大全333の極意 中橋 一朗 (著)
http://amazon.co.jp/o/ASIN/4798008842/

(2004/11) 仕事に使えるLinuxシェルスクリプト 千葉 真人 (著)
http://amazon.co.jp/o/ASIN/4822282090/

(2004/12) UNIXシェルスクリプトサンプルブック デイブ・テイラー (著)
http://amazon.co.jp/o/ASIN/4797327286/

(2005/02) シェルスクリプト基本リファレンス 山森 丈範 (著)
http://amazon.co.jp/o/ASIN/4774122610/

(2005/04) LinuxWorldスクリプト 月刊リナックス・ワールド総集編 月刊LinuxWorld特別 (著)
http://amazon.co.jp/o/ASIN/4872802349/

(2005/05) UNIXシェルスクリプトコマンドブック 山下 哲典 (著)
http://amazon.co.jp/o/ASIN/4797330635/

(2005/05) わかる&使える UNIX基礎講座 シェルスクリプト編 中井 獏 (著)
http://amazon.co.jp/o/ASIN/4774123625/

5 :名無しさん@お腹いっぱい。:2007/02/15(木) 14:38:51
□最近のシェルスクリプト本(1)

(2004/03) UNIXシェルスクリプトハンドブック 関根 達夫 (著)
http://amazon.co.jp/o/ASIN/4797326522/

(2004/10) UNIXシェルスクリプト逆引き大全333の極意 中橋 一朗 (著)
http://amazon.co.jp/o/ASIN/4798008842/

(2004/11) 仕事に使えるLinuxシェルスクリプト 千葉 真人 (著)
http://amazon.co.jp/o/ASIN/4822282090/

(2004/12) UNIXシェルスクリプトサンプルブック デイブ・テイラー (著)
http://amazon.co.jp/o/ASIN/4797327286/

(2005/02) シェルスクリプト基本リファレンス 山森 丈範 (著)
http://amazon.co.jp/o/ASIN/4774122610/

(2005/04) LinuxWorldスクリプト 月刊リナックス・ワールド総集編 月刊LinuxWorld特別 (著)
http://amazon.co.jp/o/ASIN/4872802349/

(2005/05) UNIXシェルスクリプトコマンドブック 山下 哲典 (著)
http://amazon.co.jp/o/ASIN/4797330635/

(2005/05) わかる&使える UNIX基礎講座 シェルスクリプト編 中井 獏 (著)
http://amazon.co.jp/o/ASIN/4774123625/


6 :名無しさん@お腹いっぱい。:2007/02/15(木) 14:42:04
□関連書籍と関連リンク:

FreeBSD Hypertext Man Pages
http://www.freebsd.org/cgi/man.cgi

Linux JF (Japanese FAQ) Project.
http://www.linux.or.jp/JF/

Unix Programming Frequently Asked Questions 日本語訳
http://www.adl.nii.ac.jp/~moro/unix-programmer/faq-j_toc.html

UNIXプログラミング環境
http://www.amazon.co.jp/exec/obidos/ASIN/4871483517/

□人間初心者へのお願い:
・このスレはシェルスクリプトについてのスレです。
 シェルの対話的な利用についての話やスクリプトと関係ないコマンドの
 使い方の質問などはスレ違いなので無用に願います。

□シェルスクリプトでよく使うコマンド:
制御・条件判定系: [,test,expr,true,false,yes,getopts
テキスト処理系: cat,awk,sed,tr,sort,uniq,grep,wc,head,tail,cut,paste,comm,join
ファイル検索系: find,xargs
(スペースなどを含むファイル名を正しく処理するため、
findは -print0、xargsは -0オプションを常に付けることを推奨
ただし、Solarisでは未対応。どうするんだろ?)
ディレクトリ系: basename,dirname
出力系: echo,printf
対話コマンド制御系: expect
http/ftpの処理自動化: wget,curl

7 :名無しさん@お腹いっぱい。:2007/02/15(木) 15:50:29
>>1


8 :名無しさん@お腹いっぱい。:2007/02/15(木) 16:34:15
3秒間のウエイトっていれる方法ありますか?

9 :名無しさん@お腹いっぱい。:2007/02/15(木) 16:35:58
>>8
sleep 3

10 :名無しさん@お腹いっぱい。:2007/02/15(木) 16:36:49
sleep 3 じゃダメなんか?

11 :名無しさん@お腹いっぱい。:2007/02/15(木) 16:41:00
sleep 3

12 :8:2007/02/15(木) 17:35:57
>>9-11
ありがとう

13 :名無しさん@お腹いっぱい。:2007/02/15(木) 19:50:58
http://www.linux.or.jp/JM/html/tcsh/man1/tcsh.1.html


14 :名無しさん@お腹いっぱい。:2007/02/15(木) 21:08:02
>>1


> □最近のシェルスクリプト本(1)

なんかダブってるけど、これの(2)ってのはあるの?

15 :名無しさん@お腹いっぱい。:2007/02/15(木) 21:29:48
>>14
! 
ダブリは1のミス
(2)は(まだ)ない

16 :名無しさん@お腹いっぱい。:2007/02/15(木) 22:41:49
               ________
             ,r'´:.:.:.:.:.:.:.:`.、
           ,r'/:.:.:.:.:.:.:.:.、ヽ;,:.ヽ
             l:.i:.:.i:Mヽヽl:.:i:ヽ;,;,;l
            !:l:i.:トl レレVレ!:.:!-、!
             ヽトl:f_! '´i_,トl:.:.!_,ノ     シエルスクリプトって
             l.ヽ '__,   l.:.:!/      なんですか?
             l:.:| `iー‐'´l:.;!`!
              /!;!´ヽ,! -l;!´`ヽ、
             ,r'´!  人     ,r''ヽ
              !::;;l /:::;ヽ  ,r';;;r':::ヽ
            l:;;/´:::::::::::::;ヽ,r';;/;;:::::::::ヽ
           .l;;i:::::::::::::::::::::::::;;;;;;ヽ;::::::::::ヽ

17 :名無しさん@お腹いっぱい。:2007/02/15(木) 22:47:32
(||)

18 :名無しさん@お腹いっぱい。:2007/02/15(木) 22:54:41
今度シェルスクリプトを覚えなければならなくなったのですが、
私のマシンにはシェルがインストールされていないようです
(メニューにそれらしいものがない)
シェルを追加インストールするには、どこをクイックすればいいですか?
OSはKDE3.5です。

19 :名無しさん@お腹いっぱい。:2007/02/15(木) 23:02:42
catの無駄遣いなんかに関する すごい説得力がある スライド
ttp://www.netmeister.org/misc/useless_use.pdf

20 :名無しさん@お腹いっぱい。:2007/02/15(木) 23:08:35
>>19
面白いから順に見たけどこれ長いよ!

21 :名無しさん@お腹いっぱい。:2007/02/15(木) 23:09:38
てかおもしろすぎる

22 :名無しさん@お腹いっぱい。:2007/02/15(木) 23:11:51
FTP に複数コマンドを渡す際に、複数行を「+」で囲んで FTP のコマンドを記述しています。この方法は他のシェルスクリプトからのコピーです。

一応意図した動作をしているのですが、仕様を知らずに使っているため不安です。

この方法の仕様が説明されているサイト等を教えて頂けませんか?man で sh と ftp を見ましたが、該当の記述はありませんでした。

よろしくお願いします。

23 :名無しさん@お腹いっぱい。:2007/02/15(木) 23:49:48
>>18
シェルがないと起動プロセスがまともに進行しないので、
ないってことはあり得ない。

また、KDEはOSではなくて、デスクトップ環境の一種。

あなたが必要なのはKonsoleというKDEのアプリケーションと、
エディタ。


24 :名無しさん@お腹いっぱい。:2007/02/15(木) 23:52:19
瓶詰めぬこカワユス。


25 :名無しさん@お腹いっぱい。:2007/02/16(金) 00:42:36
lsの結果を配列に入れるにはどうすればいいでしょうか?そもそもできますでしょうか?

26 :名無しさん@お腹いっぱい。:2007/02/16(金) 00:52:10
headでアレかよ!

27 :名無しさん@お腹いっぱい。:2007/02/16(金) 02:00:22
>>22

ftp<<EOF
コマンド
EOF

じゃダメなの?

28 :名無しさん@お腹いっぱい。:2007/02/16(金) 02:55:27
>>19 みて awk 覚えようと思った

29 :名無しさん@お腹いっぱい。:2007/02/16(金) 03:56:04
最後の三ページを忘れるなよ。
catの無駄遣いも可愛いからいいじゃないか。

30 :名無しさん@お腹いっぱい。:2007/02/16(金) 07:22:48
>>25

sh$ set `ls`
sh$ echo "$1"
sh$ echo "$2"
:

bash$ hairetsu=(`ls`)
bash$ echo ${hairetsu[0]}
bash$ echo ${hairetsu[1]}
:


31 :名無しさん@お腹いっぱい。:2007/02/16(金) 13:31:32
ここはネタスレと解釈してもいいですか?

32 :名無しさん@お腹いっぱい。:2007/02/16(金) 15:03:09
>>28
cutもたまには使ってあげようと思った

33 :名無しさん@お腹いっぱい。:2007/02/16(金) 15:58:55
たまにはぬこの蚤とりしようとおもた

34 :名無しさん@お腹いっぱい。:2007/02/16(金) 17:25:28
たまにはK.I.S.Sの格好もしてみようと思った。

35 :名無しさん@お腹いっぱい。:2007/02/16(金) 20:24:12
大至急、BourneとBASHを覚えなければならなくなったのですが、
手っとり早いお勧めの方法は何ですか?
はっきり言って、理論的なことはどうでもいいです。
最小限の努力で、最大限、見ためだけ高スキルに見えればいいです。
よろしくお願いします。

36 :名無しさん@お腹いっぱい。:2007/02/16(金) 20:24:38
ちょっと思ったのですが、シェルスクリプトでC言語の#ifdefマクロみたいなことって
出来ますか?



37 :名無しさん@お腹いっぱい。:2007/02/16(金) 20:26:07
>>36
Yes.

38 :名無しさん@お腹いっぱい。:2007/02/16(金) 20:43:20
>>35
スクリプトは一日にして成らず、だ
だがあなたの要求だけを見ると高スキルのスクリプトを真似て作ればいいと思われ
問題は努力もしないで中身が理解できれば・・・だが

39 :名無しさん@お腹いっぱい。:2007/02/16(金) 20:48:59
あのTシャツ欲しいと思った

40 :名無しさん@お腹いっぱい。:2007/02/16(金) 20:50:49
>>35
英語でのコミニュケーション能力と、pythonとperlはいいのかい?

41 :名無しさん@お腹いっぱい。:2007/02/16(金) 20:51:33
>>39
つくればいいじゃん

42 :名無しさん@お腹いっぱい。:2007/02/16(金) 20:52:54
>>40
はい。そっちの方は無問題です。

43 :名無しさん@お腹いっぱい。:2007/02/16(金) 20:53:38
じゃあとりあえず突撃してみたら?

44 :名無しさん@お腹いっぱい。:2007/02/16(金) 21:01:02
http://www.thinkgeek.com/tshirts/
探せばあるかも。


45 :名無しさん@お腹いっぱい。:2007/02/16(金) 21:07:28
ワロタ
Looking For A Japanese Girlfriend
http://www.thinkgeek.com/tshirts/japanese/74a3/

で、
Go away or I will replace you with a very small shell script
http://www.thinkgeek.com/tshirts/frustrations/374d/

46 :名無しさん@お腹いっぱい。:2007/02/17(土) 00:40:46
そこ結構面白いな。
鬼畜米英じゃなく鬼畜米兵になっとるw
http://www.thinkgeek.com/tshirts/japanese/74b1/

47 :名無しさん@お腹いっぱい。:2007/02/17(土) 01:05:58
>>28
複数の grep が一つにまとまるのがいい感じだな。

48 :名無しさん@お腹いっぱい。:2007/02/17(土) 01:34:50
著書なんかには
if [ i = y ]
then
echo aaa
fi
とかあるのだが、実際やってもErrorがでて・・・

if [[ i = y ]]
then
echo aaa
fi

みたいに2重括弧にしないといけないのはなぜなんでしょうか?


49 :名無しさん@お腹いっぱい。:2007/02/17(土) 01:35:53
ググったり本で調べたりしてどーしてもわからないことがあるので質問させてください。

ksh で 文字コードで grep するエレガントな方法が分かりません。
bash なら、
 grep $'\011' hoge.txt
で可能だということは分かっています。
ksh だと、
 grep "`echo '\011\c'`" hoge.txt
で同じことが可能だということは分かっていますが、bash ほど簡潔ではありません。
(いずれも Linux 上で確認)

昔、Solaris 8 上の ksh スクリプトで bash での記述例くらいに簡潔に書かれたコードを見た記憶があるのですが…。
分かる方がいらっしゃったらご教授ください。お願いします。
できれば ksh88 でお願いします。

50 :名無しさん@お腹いっぱい。:2007/02/17(土) 02:51:41
>>48
[ はコマンドで、[[ は bash の構文の一つ。
/bin/sh で書くなら [[ は使えない。
あと、比較演算子の書き方やその解釈がちょっと違う。

[ 1 -gt 0 ] と [[ 1 > 0 ]] とか
[ "1+1" -ge 2 ] と [[ "1+1" >= 2 ]] とか

詳細は man bash ね。

51 :名無しさん@お腹いっぱい。:2007/02/17(土) 10:33:59
>>48
if [ i = y ]
then
echo aaa
fi

↑でエラー出ないよ。
もしエラーが出たんなら、[ や ] や = の前後のスペースを忘れたとか、
そういう問題だと思う。([ ]か [[ ]]かの問題とは違う)

[[ ]] は Bourneでは使えないので、できる限り [ ] で書くのがお勧め。

52 :名無しさん@お腹いっぱい。:2007/02/17(土) 10:58:27
すいません、
名前にスペースの入ったファイル名のリストを for とか foreach に渡すときは
どうしたらいいでしょうか。
for f in `find なんたらこうたら`; do ほげ "$f"; done; みたいなことをしたいのですが
find の結果のファイル名にスペースがある場合、スペースのとこで割られるようです。

53 :名無しさん@お腹いっぱい。:2007/02/17(土) 11:10:46
>>52
IFS='
' for f in `find なんたらこうたら`; do ほげ "$f"; done;


IFSに改行コードを入れて、それを区切り文字にする。

54 :名無しさん@お腹いっぱい。:2007/02/17(土) 11:13:56
>>52
find の部分をコマンド置換すると、ファイル名のデリミタとしての半角空白なのか、ファイル名中の半角空白なのがシェルから見ると区別がつきません。
上手く動かない原因はこれです。
よってコマンド置換で実現するのは諦めましょう。

- start --------------------
find . -type f |
while read f
do
  echo $f
done
- end ----------------------

自分がパッと思いつくのはこれ。
ただ、read コマンドは遅いので、もっとエレガントを考える余地があるかもしれません。

ところで、sh に foreach ってありましたっけ?

55 :名無しさん@お腹いっぱい。:2007/02/17(土) 11:15:41
#!/bin/sh
IFS=\

for a in `find . -type f`;do echo "$a";done
これでも、名前に改行が含まれるとダメなのでfind -execをおすすめする。

56 :名無しさん@お腹いっぱい。:2007/02/17(土) 11:20:18
>>53
その方法、いいですね!
でも環境変数を触るのって、どうなのでしょう?

触るとしても、

- start --------------------
OLD_IFS=$IFS
IFS='
'
for f in `find . -type f`
do
  echo $f
done
IFS=$OLD_IFS
- end ----------------------

を推奨すべきかと。

57 :名無しさん@お腹いっぱい。:2007/02/17(土) 11:27:22
いろいろ条件が許せば、find -print0とxargs -0のコンビにお任せする。


58 :名無しさん@お腹いっぱい。:2007/02/17(土) 11:29:43
>>55
>>57
ああ、本当だ。改行がファイル名に入るとアウトですな。
for や while だと完全ではないですね…。

59 :名無しさん@お腹いっぱい。:2007/02/17(土) 12:20:55
>>56
なんでそんなことする必要があるんだ?

>>53 のスクリプト作って、実行した後の $IFS 見てみた方がいいよ。

60 :名無しさん@お腹いっぱい。:2007/02/17(土) 13:11:12
続きがあるとは想像できないのだろうか?

61 :名無しさん@お腹いっぱい。:2007/02/17(土) 13:18:38
>>60
続きがあっても関係ない。
↓これ試してみろ。

HOGE=hoge command
echo $HOGE

62 :名無しさん@お腹いっぱい。:2007/02/17(土) 14:04:31
$ cat hoge
IFS='
' for f in `find -type f`; do echo "$f"; done;
$ sh hoge
sh hoge
for: not found

hoge: 2: Syntax error: ";" unexpected

63 :名無しさん@お腹いっぱい。:2007/02/17(土) 14:09:59
$ cat hoge
IFS='
' for f in `find . -type f`; do echo "$f"; done;
だった。

64 :名無し募集中。。。:2007/02/17(土) 21:45:40
変数=値 command ( IFS='改行コード' for ... ) で実行した際
IFSの変更に対して安全かどうなかなんて元のお題には意味なくないか?

元のお題だとそもそもfindで引っかかる数(吐き出す文字数)が予測不能なんだし
tabやspaceのことも含めて for はやめて find | xargs か while の方が安全なんだが

あとファイル名に改行コードが含まれる場合は?とかこの板的には重要かもしれん
けど、そこまで考えるとどうしたら処理できるか?より、そんなファイルが作られないように
するにはどうしたらいいか?という問題になる気がする

その上でそういうファイルをリネームや削除するスクリプトを組みたいっていうなら
環境や状況に合わせたものを組めばいい、動くことが重要で
エレガントな一般的解法なんて考えても無駄だし必要もないはず


65 :名無しさん@お腹いっぱい。:2007/02/17(土) 22:54:12
もとのお題に対してはどうでもいいが、if, for, while, caseといった
フロー制御コマンドは変数=値 command形式では使えないという事実は、
このスレ的には重要。

66 :52:2007/02/18(日) 09:45:52
皆さん、どうもありがとうございました。なるほど、IFS とか while ですか。

自分の環境では改行がファイル名に入ることはとりあえずないんですが、
より厳密には find -print0 として IFS に NUL をセットすればいいんですかね?
と思ったんですが... あれ、IFSにNULをセットって、どうやればいいんでしょう?
たびたびすいません。

67 :名無しさん@お腹いっぱい。:2007/02/18(日) 11:30:58
grep -e 'foo (\w+?) bar' file
とした場合、 perl などでは \1 で (\w+?) の内容を
参照できるのですが、 grep (sed, awk など) でそうする方法はありますか?


68 :名無しさん@お腹いっぱい。:2007/02/18(日) 12:52:25
>>52
厳密にやりたかったら
1 find -print0を使ってNULLをレコードの区切りと認識できるコマンドで
処理する(shのwhileやforは使用できない)
2 find -execで1個づつ処理する。
3 perlで全部やる

>>67
sedにはある。awkは知らん。マニュアル嫁。

69 :名無しさん@お腹いっぱい。:2007/02/18(日) 13:03:35
自分が知らんならマニュアル嫁とかほざくな。

70 :名無しさん@お腹いっぱい。:2007/02/18(日) 13:29:37
マニュアル嫁よ>>69

71 :名無しさん@お腹いっぱい。:2007/02/18(日) 14:30:15
言うこと無くなると何度も前と同じ事を
繰り返してほざく知恵遅れが小学校の時にいたんだが、
>>68=70 でそいつを思い出した.
もしかするとそいつかもw

72 :名無しさん@お腹いっぱい。:2007/02/18(日) 15:13:28
何度諭されてもしつこく絡んでくる >>69=>71 みたいなアフォもいたなぁ。

まあ、諭されてることすら理解できてないんだろうけど。

73 :名無しさん@お腹いっぱい。:2007/02/18(日) 15:32:02
72 が必死すぎる件

74 :69!=71:2007/02/18(日) 15:33:37
おっと俺はこっちだ。
他人に煽られたからってお前がその煽り文句を真似して効果があるとは限らんぞ。

75 :68:2007/02/18(日) 15:50:25
いくら煽っても>>67は回答を得られないという事実。

>>71
残念ながら>>70は俺じゃない。>>69のような糞蝿は煽るほどの価値もない。

76 :名無しさん@お腹いっぱい。:2007/02/18(日) 15:59:07
クスクスクス

77 :名無しさん@お腹いっぱい。:2007/02/18(日) 17:00:23
(・∀・)ニヤニヤ

78 :名無しさん@お腹いっぱい。:2007/02/18(日) 23:20:22
>>67
どっちでもできる。
man に載っているよ。


79 :64:2007/02/19(月) 05:56:44
>>65
お、仰るとおりですな

>>52
普通?は find コマンドと IFS 変数は関係ないよ
いや余程特殊な環境があるなら分からんけど

IFS 変数は Bourne Shell 系 ( sh, ksh, bash など) で区切り文字の定義に使われる
で find コマンド自体はこの環境変数を参照しないから関係ない

find -print0 は出力する各ファイル名にヌル文字を付加する
で find -print0 が使える環境なら xargs -0 も使えるんじゃない?
>>57さんが既に言ってるけどね


>>67, >>78
sed, grep はあるけど awk はなかったような

80 :名無しさん@お腹いっぱい。:2007/02/19(月) 06:11:10
>>79
grep ではどうやんの?

81 :名無し募集中。。。:2007/02/19(月) 06:55:03
>>80
環境によっては使えないかもね
manでもネットでも調べれば?



82 :64:2007/02/19(月) 07:03:11
>>52
あ、find -print0 と IFS を弄って while を組合わせたいって意味なら駄目だよ
>>68さんの言ってる方法で

それより -print0 オプションが使えない環境もあるから
まずはそっちを調べた方がいいよ

83 :名無しさん@お腹いっぱい。:2007/02/19(月) 07:57:15
>>79
findコマンド自体では IFSは当然関係ないが、
findの結果を ` ` で取り込んで forの引数にする際に
IFSが参照される。(IFSの影響を受ける)
なので、スペース入りファイル名の問題なら、
IFSの内容を改行コードのみにして for f in `find ...` を実行すればOK
なことは既に上に書かれている。

84 :名無しさん@お腹いっぱい。:2007/02/19(月) 17:57:07
>>68
ちなみに NULL じゃなくて NUL ですね。

85 :名無しさん@お腹いっぱい。:2007/02/19(月) 22:58:23
>>84
頭ではわかっているが、指が憶えてしまっているのでしょうがない。

86 :名無しさん@お腹いっぱい。:2007/02/20(火) 02:12:08
>>79
man awk の文字列関数の項を参照してみな。
もしかしたら gawk だけかもしれないけど。

87 :名無しさん@お腹いっぱい。:2007/02/20(火) 10:40:49
gawk 3.0 以上の拡張機能でございます。

88 :名無しさん@お腹いっぱい。:2007/02/20(火) 11:31:38
大嘘つき

89 :64:2007/02/20(火) 17:58:58
いつから正規表現板に?あと自分の環境が全ての人しか居ないの?
素のAIXじゃ、grep '\(a\)\1' はできたが egrep, grep -E は無理みたい
拡張正規表現だと \1 は使えなさそうあとawkも

gawk は知らんけどgawkは無い環境も多いからawkとgawkを一緒にするな
awkと言えば昔ながらの素のawkのことだよ
linuxでshを語るアホウ(そりゃashだ)と同じやね


90 :64:2007/02/20(火) 19:15:33
最後だけ削除
shについては、Cygwinもash、今時の素のAIX、HP-UXなら実はkshだったりするから
Solaris、FreeBSDは知らんけど例としてはかなり不適切やね、無視してくれ

91 :名無しさん@お腹いっぱい。:2007/02/20(火) 21:12:01
kshはねーよ。デフォルトでは使いにくい。

set -o emacs
set -o vi

どっち?

92 :osuga:2007/02/20(火) 22:49:15
>>90
HP-UXのデフォルトがkshかよ

93 :名無しさん@お腹いっぱい。:2007/02/20(火) 22:58:23
>>64は面白いな

94 :名無しさん@お腹いっぱい。:2007/02/20(火) 23:48:35
>>89
> 素のAIXじゃ、grep '\(a\)\1' はできた
参考までに grep のバージョン教えてくれ。

>>90
> Cygwinもash
それいつの話?
手元の環境だと ash は入れてあるけど、sh の実体は bash になってるよ?

$ uname -r
1.5.24(0.156/4/2)

$ /bin/sh --version
GNU bash, version 3.2.9(11)-release (i686-pc-cygwin)
Copyright (C) 2005 Free Software Foundation, Inc.

95 :名無しさん@お腹いっぱい。:2007/02/21(水) 02:37:28
>>89
POSIX的には拡張正規表現(ERE))でbackrefernceが使えるということは
一言も書いていないので、grep -E でbackrefernceが使えるGNU grep
なんかが拡張しているということなんだろう。多分。



96 :名無しさん@お腹いっぱい。:2007/02/21(水) 04:14:13
それにしてもネタないね
叩きはすぐ集まってくるけど

grep '\(a\)\1' は実際できるし(AIX5.3、SFU)、基本正規表現(BRE)にあるんで
linuxやHP-UXのgrepでも出来た記憶がある、まぁ昔の事なんで自信はない

拡張正規表現(ERE)にはBREの\( \)にあたるものが無いようで
>>95はフォローしてくれたんだろうけど
実際にやってみたが egrep, grep -E じゃできなさそう(AIX5.3)と既に書いている

HP-UXのshについては昔、といっても11iなんだが
純粋なshでは使えないはずの [[ ]] や alias なんかが使えたんで調べたら
sh-posix とか書かれていて、sh->kshで拡張されたものがほぼ?まんま拡張されてた

なんでHP-UXのshはksh、って位の認識だったんだが
POSIX の sh いうんやから [[ ]] や alias が使えるのが今時の純粋な sh ということかもしれんね


97 :名無しさん@お腹いっぱい。:2007/02/21(水) 09:12:36
おまえら >>1 読め
正規表現については以降はこちらへ

正規表現
http://pc10.2ch.net/test/read.cgi/unix/1039165754/

98 :名無しさん@お腹いっぱい。:2007/02/21(水) 10:35:28
sh-posix ってのがあるんですよ奥さん

99 :名無しさん@お腹いっぱい。:2007/02/21(水) 10:37:51
>>98
だから、sh-posixの部分だけ書けばいい。
正規表現の部分はスレ違い。

100 :名無しさん@お腹いっぱい。:2007/02/21(水) 10:57:54
本当にそういうものはあるのかな?

solaris においては /bin/sh は sh-posixではなく
/usr/xpg4/bin/sh が ごにょごにょ
FreeBSD では /bin/sh は IEEE Std 1003.2 (``POSIX.2'') に対応する途上
NetBSD では /bin/sh は  POSIX 1003.2 and 1003.2a に対応する途上
OpenBSDでは (ry
HP-UX では

101 :名無しさん@お腹いっぱい。:2007/02/21(水) 10:59:10
あ、きみ宛というよりは>>96宛てかな?

102 :名無しさん@お腹いっぱい。:2007/02/21(水) 12:16:07
http://docs.hp.com/ja/B2355-60104-02/sh-posix.1.html
でも嫁
現在のHP-UXの/bin/shはsh-posixであって、古いbourne shellは存在しない
sh-posixはkshによく似ているが別物

>>90は間違いだらけ

103 :95:2007/02/21(水) 12:40:01
>>96
すまん。寝る直前に書いたせいか
フォローのつもりがわけのわからんものになってた。

GNU のツールでそうだからといって、
それがUNIX全般でいえるかというと違うよね。
というのを補足したかった(awkとgawkとか)



104 :名無しさん@お腹いっぱい。:2007/02/21(水) 13:49:30
>>102
以前は /usr/old/bin/sh に Bourne shell があったんだけど今はもうないの?
手元に実機がないので確認できない。

105 :名無しさん@お腹いっぱい。:2007/02/21(水) 14:03:34
>>104
実機がなくても参照できちゃうんだなこれが
http://docs.hp.com/ja/B2355-60104-02/sh.1.html
-
注記 : B シェル (/usr/old/bin/sh) は、HP-UX 11i Version 1.5 以降、削除されました。
代りに、POSIX シェル (/usr/bin/sh) を使ってください。

-

本当に実機がこうであるかは確認していないけどね〜

106 :ksh:2007/02/21(水) 19:49:50
こんばんわ ペソです。
シェル初心者ですが教えてください。
「ディレクトリの中にあるファイルで、実行権限のないファイルを読み込み
そのファイルに実行権限を付与するシェルが必要なのですがどうすればいいのかわかりません。
OS: AIX shell: ksh

#!/bin/ksh
for filename in ${1:+$1/}* ; do
newfilname=$(print $filename |tr [A-Z] [a-z])
newfilename=$newfilename%.}
print "$filename -> $newfilename"
mv $filename $newfilename
done

とりあえず自宅のfedora core5 のkshで実行したら、

' unexpectedtax error: `
と表示されて困ってます。

どうか教えてください。お願いします。

107 :名無しさん@お腹いっぱい。:2007/02/21(水) 19:56:52
>>106
質問が支離滅裂。実行権限を付けたいといっているのに、
スクリプトではファイル名の大文字を小文字にリネームしようとしている。
あと、クォートが正しくないので、スペース入りファイル名とかでコケるだろう。
釣りじゃないならもう一度よくまとめてから質問し直せ。

108 :ksh:2007/02/21(水) 20:43:07
すいませんでした。
リネームするスクリプトを少し変更して作ろうとしているのですが、
このファイルもこけて動かないんです。




109 :名無しさん@お腹いっぱい。:2007/02/21(水) 21:12:05
>>106
そんなの、

#!/bin/sh

chmod +x "$1"/*

だけでいいじゃん。kshである必要もなし。

110 :名無しさん@お腹いっぱい。:2007/02/21(水) 21:13:56
とりあえず

1. シェルスクリプトのことをシェルというな。
2. forの次の行からdoneの前の行までは全部リネーム用でいらないから削れ。
3. man test
4. man chmod


111 :名無しさん@お腹いっぱい。:2007/02/21(水) 21:15:07
>>109
「実行権限のないもののみを選び出す」というのが宿題の一部であると
思われるので、問答無用で+xしちゃいけないかもしれない。


112 :名無しさん@お腹いっぱい。:2007/02/21(水) 21:19:54
「実行権限のないもののみを選び出す」意味がない。
もともと +x なファイルを chmod +x しても影響はない。

AIXで実行しようとしてるし、だとすると
宿題じゃなく、実務で必要なんだろ。

chmod +x で十分。

(ctimeは更新されるけど、そんなの普通関係ない)

113 :名無しさん@お腹いっぱい。:2007/02/21(水) 21:23:34
>>110
えっと、こういうことでしょうか?

#!/bin/ksh
for filename in ${1:+$1/}* ; do
man test
man chmod
done


やってみましたが、なんか、ファイルの数だけマニュアルのようなものが表示され、
実行権限は付きませんでしたが、、

114 :名無しさん@お腹いっぱい。:2007/02/21(水) 21:25:51
なんだ釣りか。


115 :ksh:2007/02/21(水) 22:08:50
kshです。

#!/bin/ksh
for filename in ${1:+$1/}* ; do
if [[ -f $filename ]] ; then
chmod +x $filename
fi
done

なんとかディレクトリの中のファイルすべてに実行権限を付与できました。
これはシェルスクリプトと言うのでしょうか?
お恥ずかしながらシェルスクリプトとはなにか?イメージが完全でなく・・・

116 :名無しさん@お腹いっぱい。:2007/02/21(水) 22:38:30
>>115
> kshです。
ペソじゃなかったのかw

117 :ksh:2007/02/21(水) 22:53:27
あっペソです!!
ルールよくわかってなくてすみませんっw

118 :名無しさん@お腹いっぱい。:2007/02/25(日) 06:28:13
>>102
単に興味本位で聞くけどsh-posixとkshを比較して
実際に機能として違う部分てどんなところがあるの?


119 :名無しさん@お腹いっぱい。:2007/02/26(月) 18:34:31
すごく久しぶりに man tcsh してみたのだが。

あれ、"THE T IN TCSH" なんて項目、昔あったっけ?

turbo csh じゃないじゃん > 昔俺にそう教えた奴

120 :名無しさん@お腹いっぱい。:2007/02/26(月) 18:41:12
Tenex CSHの略だと思っていたが、Tenex & Tops-20だったんだな。


121 :名無しさん@お腹いっぱい。:2007/02/27(火) 00:44:41
TOPS-20 ねぇ。command line editing が欲しくてcshからtcshに移ったが、
それまでは、fep 使ってました。bash は、なじめんな。

今は、zsh 派です。

122 :名無しさん@お腹いっぱい。:2007/02/27(火) 04:53:35
>>118
102とは別人だけど、kshはksh88とksh93で非常に違う。
とくに後者はperlに遜色ないほどの汎用言語になっている。
kshはbashと同じくshベースということで、
bashがkshから採り入れた機能もけっこうある。ローカル変数とか

123 :名無しさん@お腹いっぱい。:2007/02/27(火) 17:22:33
>>119
え?違うんだ、知らなかった

124 :名無しさん@お腹いっぱい。:2007/02/27(火) 22:13:24
kshといえばwkshで一度でいいから遊んでみたかった。
もうwのないkshしかないからなぁ・・・


125 :名無しさん@お腹いっぱい。:2007/02/27(火) 22:45:55
viで編集中は日本語のメッセージが正しく表示されていたのですが、シェルスクリプトを実行するとメッセージが文字化けします。どうすればよいですか。

126 :名無しさん@お腹いっぱい。:2007/02/27(火) 22:49:25
viが自動認識して処理してる?

nkf -e < script
nkf -j < script
nkf -s < script
nkf -w < script

で化けないパターンを探してそれに置き換える。

127 :名無しさん@お腹いっぱい。:2007/02/27(火) 22:51:13
>>125

その vi の実体は、賢い vi で、
シェルの ENV がついていけてないとか。

128 :名無しさん@お腹いっぱい。:2007/02/28(水) 00:25:54
Cシェル、Oracle10gで
exp 〜 query\"where column_name in\( select col from tableB \) \"
みたくqueryパラメータで副照会できないようなんで
exp 〜 query\"where column_name in\( $COLUMN_NAMES \) \"
なんて具合に変数を埋め込みたい。
シェル変数が展開されてからexportに渡されるようにする方法ないかな?



129 :名無しさん@お腹いっぱい。:2007/02/28(水) 00:54:58
>>126
nkf -g が無いバージョンかな?

130 :名無しさん@お腹いっぱい。:2007/02/28(水) 01:00:16
おお、そんなものが。
nkf -wができることに最近気づいたくらいアップデートしてなかったんで。

131 :名無しさん@お腹いっぱい。:2007/02/28(水) 09:20:31
浜田マキ子って人のジャーナル見てみなよ。
中国の恐さにぞっとすること請け合い。
あいつら本気で日本を侵略する気だ。
そして、手下はやはり立命館?

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

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

read.cgi ver 05.02.02 2014/06/23 Mango Mangüé ★
FOX ★ DSO(Dynamic Shared Object)