トップページunix
987コメント278KB

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

■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。2012/11/15(木) 18:57:33.11
シェルスクリプトの総合スレです。
□お約束
・特記なき場合は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に逃げずにシェルスクリプトで処理するのが頭のいいやり方。
前スレ
シェルスクリプト総合 その20
http://toro.2ch.net/test/read.cgi/unix/1339083351/
0002名無しさん@お腹いっぱい。2012/11/15(木) 19:26:11.32
Q. シェルは UNIX の勉強に使えますか?
A. シェルは UNIX に慣れた人間がスクリプトを書いて楽するのには向いていますが、
  UNIX の勉強には向いていません。
0003名無しさん@お腹いっぱい。2012/11/15(木) 19:55:58.11
今月はじめ、職場に新しいPC(Core i7の結構ハイエンド構成)が入りました。
多分私が運用保守をまかされそうな雰囲気です。業務的にとある構造分析や
シミュレーションなど行う必要があり、制御コマンドとしてシェルスクリプトを
使用するのは聞いていたのですが、そのファイルを開いて1行目に書かれていたのは
#!/bin/tcshという文字列でした。

「うへぇ〜、よりによってtcshかよ」

ファイル記述子のリダイレクト不可、クオートのネスティング等に無理あり、
今の奴でさえシェル関数は使えないし、パイプラインの終了ステータスもおかしいし、
今時の担当者が扱ってセキュリティは大丈夫なのか不安はつきませんし、
スクリプトとしてのcshは嫌われるのでネット上の情報も少なく調べるのも大変です。
おそらく導入に際して、大学など教育機関で最初にcshに触れて刷りこまれた人間が
強気の知ったかぶりをして発言権を得て「俺流」をつらぬき紛れ込ませたのでしょう。

昔、当時、シェルで唯一aliasやhistoryやジョブコントロールの機能が使えた
cshは大学など教育機関に浸透していて、日本のシェル界に多くのバカが輩出しました。

これから私は、おそらくそういうバカが、$*でスペース入りファイル名が扱えないとか
$<でファイルから読めないのかとか、変数に*を入れた場合だけ構文エラーになって
実行できないなどと、シェル通気取りの偏ったどうでもいい我侭を言い出し
(だからcshスクリプト書くんじゃねーよ)それと戦わなければならないのでしょう。
そして時代によって決着している、過去25年のシェル界隈のくだらないそれらの議論が
再現され、それに巻き込まれるのでしょう。もう今からうんざりです。

だからお願いです。教育現場ではbashでもzshでもkshでもashでも
Bourne shでもなんでもいいですがBシェル系のシェルにしてください。

教育機関で懐古趣味のバカを量産されると現場が非常に苦労するのです。
0004名無しさん@お腹いっぱい。2012/11/15(木) 20:00:38.47
>>2
シェルとシェルスクリプトの区別がついてないアホレスをコピペすんなよ
0005名無しさん@お腹いっぱい。2012/11/15(木) 20:05:57.42
確かにww
シェルがないとコマンド実行すらできないし
何がユーザーの入力を受け付けるんだ
0006名無しさん@お腹いっぱい。2012/11/15(木) 20:10:10.87
前スレ最後の頓珍漢は私です
アドバイス通り$args[1]→$1にしたらすんなりいきました。
ありがとうございました。スレなめるように見て勉強させて頂きます。
0007名無しさん@お腹いっぱい。2012/11/15(木) 20:30:38.10
俺のもなめて。
0008名無しさん@お腹いっぱい。2012/11/18(日) 11:50:01.58
Gnome Shellのスクリプトの話題もここでいいのか?
0009名無しさん@お腹いっぱい。2012/11/20(火) 18:14:10.06
以下のような文章があったとします。
〜aaa〜bbbaaa〜bbbaaa〜bbb〜
(〜は文字数の定まっていない文字列を表しています。)
ここから、それぞれ最初のaaa〜bbbだけを抽出、真ん中のaaa〜bbbだけを抽出、最後のaaa〜bbbだけをgrepなどで抽出したい時、どう正規表現で表せばよいのでしょうか?
0010名無しさん@お腹いっぱい。2012/11/20(火) 18:23:34.33
grepは抽出するというより、マッチした行は全部表示しちゃうけど?
sedなら
sed 's/\(aaa.*bbb\)\(aaa.*bbb\)\(aaa.*bbb\)/\2/'
みたいな?
0011名無しさん@お腹いっぱい。2012/11/20(火) 18:31:07.64
>>9
>>1
>正規表現の話題はスレ違い(正規表現スレへ)
0012名無しさん@お腹いっぱい。2012/11/20(火) 18:34:56.83
>>11
いや、それは
>>1
> ・シェルで使えるワイルドカード等は正規表現ではありません。
って話だからまた違う。
0013名無しさん@お腹いっぱい。2012/11/20(火) 18:38:12.26
>>12
恥ずかしい奴。
0014名無しさん@お腹いっぱい。2012/11/20(火) 18:40:22.60
正規表現スレはまともに機能してないし、ここでいいだろ。
0015名無しさん@お腹いっぱい。2012/11/20(火) 18:45:22.53
だな。
0016名無しさん@お腹いっぱい。2012/11/20(火) 18:47:12.07
正規表現スレがまともに機能してないというなら
まともに機能させるためにも正規表現スレに行くべき。

sedスレもあるし、sedスレでもいいよ。
0017名無しさん@お腹いっぱい。2012/11/20(火) 20:02:12.24
了解です
正規表現スレに行ってきます

>>10
grep -oとしてマッチした部分のみ出力しようと考えてます
■ このスレッドは過去ログ倉庫に格納されています