トップページunix
1001コメント297KB

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

レス数が1000を超えています。これ以上書き込みはできません。
0001名無しさん@お腹いっぱい。2013/11/01(金) 07:58:50.52
シェルスクリプトの総合スレです。
□お約束
・特記なき場合はBourne Shell(/bin/sh)がデフォルトです。
 bash/zsh/ksh/ashなどに依存する場合は明示しましょう。
 Linuxユーザは/bin/shの正体がbashまたはdashなので特に注意。
 FreeBSDユーザは/bin/shの正体がashなので注意。
 v7 shに一番近くて、現役のshは、OpenSolaris由来のheirloom sh。
  http://src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/cmd/sh/
  http://heirloom.sourceforge.net/sh.html
・csh/tcshのシェルスクリプトは推奨されません。
 (理由は「csh-whynot」でググれ)
・UNIXにはシェルスクリプトに便利な小さなコマンドがいろいろあります。
 manや参考リンクを見ましょう。
 aproposないしはman -kでそれらしい単語による簡単な検索もできます。
・シェルで使えるワイルドカード等は正規表現ではありません。
 正規表現の話題はスレ違い(正規表現スレへ)
・シェルスクリプトのことをシェルってゆーな
□初心者へのアドバイス:
・適した道具を判断するのも頭の重要な使い方。シェルスクリプトよりも
 awkまたはperlの方が適した処理にはそちらを使いましょう。
・知らないコマンドが出てきたらmanを引きましょう。
・思い通りに動かないときは、まずは sh -x でトレースしましょう。
□回答者への注意事項:
・シェルスクリプトでの処理方法を質問しているのに、よくわからずに
 「そういうのはperl使いましょう」と回答するのはやめましょう。
 安易にperlに逃げずにシェルスクリプトで処理するのが頭のいいやり方。
前スレ
シェルスクリプト総合 その21
http://toro.2ch.net/test/read.cgi/unix/1352973453/
0980名無しさん@お腹いっぱい。2014/06/30(月) 16:58:57.49
B=バイトのつもりだろうけど
板的にはBKMのBはBlock
0981名無しさん@お腹いっぱい。2014/06/30(月) 17:19:13.47
Oh...
今回はバイトと思ってくれorz

>>979
早速ありがとう。分かりやすくて無駄がないな
setとshift活用する手段は思いつかなかった…配列使うことしか頭になかったわ
0982名無しさん@お腹いっぱい。2014/06/30(月) 17:23:15.08
>>980
そんな決まりないよ。
0983名無しさん@お腹いっぱい。2014/06/30(月) 21:38:33.06
>>979
罰種胃損はイカンなぁ。純正シェルで書こうな。

#!/bin/sh
n="$1"0
set B K M G T
while [ "$n" -ge 10240 ]; do shift; n=`expr "$n" / 1024`; done

f=`expr "$n" % 10`
n=`expr "$n" / 10`
case $f in 0) echo $n$1;; *) echo $n.$f$1;; esac
0984名無しさん@お腹いっぱい。2014/07/01(火) 00:56:36.07
dd if=/dev/zero of=/tmp/hoge.$$ bs=1 count=$1 2>/dev/null
ls -lh /tmp/hoge.$$ | awk '$0=$5'
rm -f /tmp/hoge.$$
0985名無しさん@お腹いっぱい。2014/07/01(火) 08:37:43.26
>>984
ジョークで書いてるんだろうけど滅茶苦茶無駄な上に、1Kバイト未満の時 B の単位が付かないからNG
0986名無しさん@お腹いっぱい。2014/07/01(火) 10:58:43.15
>>983
純正シェルで利用できるシェル変数は$aから$m, 制御構文は
if/switch/while/goto/exitだけ, コマンド置換(`command`)は無い。

失格
0987名無しさん@お腹いっぱい。2014/07/01(火) 11:05:05.54
純正シェル道は奥が深いな。
0988名無しさん@お腹いっぱい。2014/07/01(火) 12:41:53.89
>>986 純正師江留道秘伝書第七巻を見ると、コマンド置換はあるようです
http://www.in-ulm.de/~mascheck/bourne/v7/
http://heirloom.sourceforge.net/sh/sh.1.html#4

>>977 GNU coreutils で小数点とかの指定がダメなのですが、
numfmt --to=iec --suffix B "$1"

伝統的に SI units を流用して2進接頭辞を表していたけど、いつのまにか
IEC units を使ってないのは、日本だけって事に成りません様に
メビバイト MiB とか、まだまだ若いし、頭が固くないし、完全拒否とかはない。余裕。汗
0989名無しさん@お腹いっぱい。2014/07/01(火) 12:45:47.54
純正の意味はわからんけど、ボーンシェルならいいのでは
0990名無しさん@お腹いっぱい。2014/07/01(火) 13:07:30.36
>>988,989
bourneシェルの中でもV1-V6はコマンドラインインタプリタとしての
機能しかもっていないので、本スレでは対象外

プログラミング可能な制御構造を導入したPWBシェルでも動作可能なことが純正シェル道
http://www.in-ulm.de/~mascheck/bourne/PWB/
0991名無しさん@お腹いっぱい。2014/07/01(火) 13:31:46.64
純正とか割とどーでもいい
0992名無しさん@お腹いっぱい。2014/07/01(火) 13:51:27.90
よく分からんな
#!/bin/sh
で動く範囲ならOK?
0993名無しさん@お腹いっぱい。2014/07/01(火) 14:01:06.07
>>992
それじゃ/bin/shが実際何なのかわからん。
0994名無しさん@お腹いっぱい。2014/07/01(火) 14:24:32.56
>>991
まあ、個人的には誰しも、どーでもいいと思うだろう
だけど、色々な環境が有って、>>1でお約束を決めるに至った事を考えると、そうも思えない

>>992
ここは、総合。明示すればどんなシェルもOK
$ ls -l /bin/sh
/bin/sh -> dash
とかなってれば/bin/dashとか書けばいいし、少し調べてPOSIXシェルでとかでもいい
0995名無しさん@お腹いっぱい。2014/07/01(火) 14:26:17.93
おれもどうでもいいんだけど、一部求道者がいるのよね。
0996名無しさん@お腹いっぱい。2014/07/01(火) 14:28:04.05
>>1を決めた経緯なんてそんなたいしたもんあったっけ。
誰かが勝手に付け加えてっただけだろう。

>>994
シンボリックリンクかどうか見ただけじゃ不十分。
シンボリックリンクになってなくてもOS違えば挙動が変わる。
0997名無しさん@お腹いっぱい。2014/07/01(火) 14:35:51.47
専用スレがあるシェルはそっちに行ってもらって
あくまでもelseで落ちてきたシェルだけがここというのは?
0998名無しさん@お腹いっぱい。2014/07/01(火) 14:40:48.56
却下します。
0999名無しさん@お腹いっぱい。2014/07/01(火) 14:57:35.22
>>996 確かに変わるな
それで、不十分だから >>996 は明示の仕方について異論が有るのか?
>>1ではシェルを明示すればいい様だが
1000名無しさん@お腹いっぱい。2014/07/01(火) 15:08:14.47
>>999
どのシェルかわかるように明示してくれればそれでいいよ。
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。