シェルスクリプト総合 その9
レス数が1000を超えています。これ以上書き込みはできません。
0001名無しさん@お腹いっぱい。
2007/08/15(水) 07:25:02スクリプトのお勉強・自慢・腕試しなどにどうぞ。
まずは注意点、リンク、地鎮祭など(>>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 でトレースしましょう。
前スレ
シェルスクリプト総合 その8
http://pc11.2ch.net/test/read.cgi/unix/1171517324/
0972名無しさん@お腹いっぱい。
2008/02/11(月) 20:25:210973名無しさん@お腹いっぱい。
2008/02/11(月) 21:55:140974名無しさん@お腹いっぱい。
2008/02/11(月) 22:31:36シェルならシェルだけでやれ。
0975名無しさん@お腹いっぱい。
2008/02/11(月) 22:52:08↓
n=0; while read dummy; do ((n++)); done < file ; echo $n
0976名無しさん@お腹いっぱい。
2008/02/11(月) 23:06:41bash依存。失格。
0977名無しさん@お腹いっぱい。
2008/02/11(月) 23:33:04シェルだけということで、exprすら使わないようにしたよ
set --; while read dummy; do set "$@" a; done < file ; echo $#
0978名無しさん@お腹いっぱい。
2008/02/11(月) 23:46:18set -- はシェル実装依存。shift $# の方が確実だな。
0979名無しさん@お腹いっぱい。
2008/02/12(火) 00:10:10だけでできるようにしてくれや。
0980名無しさん@お腹いっぱい。
2008/02/12(火) 01:22:430981名無しさん@お腹いっぱい。
2008/02/12(火) 07:24:15>>977 は /bin/shだけでできる。
0982名無しさん@お腹いっぱい。
2008/02/12(火) 07:46:070983名無しさん@お腹いっぱい。
2008/02/12(火) 21:26:24にaという文字を追加。
最後に位置パラメータの「個数」(=aを追加した回数=行数)を表示。
0984名無しさん@お腹いっぱい。
2008/02/12(火) 21:50:09行末に \ がある行があると計数ミスするなぁ
0985名無しさん@お腹いっぱい。
2008/02/13(水) 16:33:50wc -l とか wc -c だと、そもそも単語に分ける必要ないから文字コードも見ないし、
LANG=C にする必要ないぞ。
wc -l オプション付けてるのに LANG=C が必要なのって、どこの wcコマンド?
0986名無しさん@お腹いっぱい。
2008/02/14(木) 22:16:07それ、1万行とか10万行とかあってもちゃんと動作するんだろうか?
というか、$#の上限ってどこかで決まってるんだろうか?
0987名無しさん@お腹いっぱい。
2008/02/14(木) 22:25:480988名無しさん@お腹いっぱい。
2008/02/14(木) 22:32:480989名無しさん@お腹いっぱい。
2008/02/15(金) 02:42:560990名無しさん@お腹いっぱい。
2008/02/15(金) 07:27:00だからぁ、ボーンでは ${10} は使えないんだよ。
0991名無しさん@お腹いっぱい。
2008/02/15(金) 08:19:41$ /bin/sh
$ uname -sr
SunOS 5.10
$ echo ${10}
bad substitution
知らないくせに余計な突っ込みするなよw
0992名無しさん@お腹いっぱい。
2008/02/15(金) 08:31:150993名無しさん@お腹いっぱい。
2008/02/15(金) 08:44:590994名無しさん@お腹いっぱい。
2008/02/15(金) 22:14:21while :; do
set -- "${@}" a
echo $#
done
の出力が15000越えるところまでは見た。
これ以上元祖に近いシェルは手元にないので勘弁。
別に$10とかに直接アクセスできる必要はないんだよな。
0995名無しさん@お腹いっぱい。
2008/02/15(金) 22:39:28俺は極端には$1とshiftだけでもやっていけるな
0996名無しさん@お腹いっぱい。
2008/02/15(金) 23:04:11set を配列代わりに使う用法では、${10}以上の要素に直接アクセスできないとな。
でも、結局Bourneでは使えない方法だから用途は限られる。
0997名無しさん@お腹いっぱい。
2008/02/15(金) 23:15:510998名無しさん@お腹いっぱい。
2008/02/16(土) 01:42:35$ (IFS='
> '; IFS= set -- `cat foo`; echo $#)
どんな状況でも機能するのかはちょっとあれだが・・・
0999名無しさん@お腹いっぱい。
2008/02/16(土) 06:58:041000小倉優子 ◆YUKOH0W58Q
2008/02/16(土) 06:58:3810011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。