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

シェルスクリプト総合 その24©5ch.net

■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。 転載ダメ©2ch.net2014/11/11(火) 00:54:03.43
シェルスクリプトの総合スレです。
□お約束
・特記なき場合は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に逃げずにシェルスクリプトで処理するのが頭のいいやり方。
前スレ
シェルスクリプト総合 その23
http://peace.2ch.net/test/read.cgi/unix/1404204950/
0002名無しさん@お腹いっぱい。2014/11/11(火) 01:00:47.57
乙です
0003テンプレ ◆01VkPKFOHeoR 2014/11/11(火) 03:40:09.81
ああ、次スレをいつ立てようかとタイミングを見ていたが
次スレ立ったか...

一応前スレでテンプレ書いた手前、書き込んでおきます
0004テンプレ ◆01VkPKFOHeoR 2014/11/11(火) 03:41:35.86
シェルスクリプトの総合スレです。
初心者、学生、アマチュア、プロ、シェルの種類や OS を問いません。
スクリプトのお勉強・自慢・腕試しなどにどうぞ。
まずはテンプレートをご覧下さい。

□A. お約束
1. 特記なき場合は #!/bin/sh がデフォルトです。この場合可搬性に注意し、
 Traditional Bourne Shell もしくは、POSIX 相当のスクリプトでお願いします。
 bash / zsh / ksh / ash / dash や OS 等に依存する場合は、明示しましょう。
 良く分からない方は、使用している OS を書いておけば OK です。是非ご参加下さい。
2. 質問する前に、まず自分で調べましょう。ただし、
 「聞くは一時の恥、聞かぬは一生の恥」です。積極的に参加しましょう。
3. 相手を侮辱する発言、失礼な発言は差し控え、知的な議論を楽しみましょう。
4. 他者には様々な環境や事情、目的が有る事に留意し、無下に扱う様な発言は
 控えましょう。

□B. お約束の補足
1. Mac OS X では、/bin/sh の実体は bash です。また、一般的に BSD 系 や
 GNU/Linux の方は、/bin/sh がシンボリックリンクですので、注意して下さい。
 ls -l /bin/sh や readlink -e /bin/sh で確かめて下さい。
2. 可搬性については、下記 F.1 を参照して下さい。
3. POSIX については、man 7 standards や下記 F.2 ( の特に Shell & Utilities )
 を参照して下さい。
4. Traditional Bourne Shell とは、UNIX Version 7 から SVR4.2 の /bin/sh を元に
 小さなの改変を加え主に商用 UNIX で残されているものです。( 下記 F.3 参照 )
5. Traditional Bourne Shell で入手しやすい sh は、後期 SVR4.0 から派生し、
 SunOS 5 / OpenSolaris を経た、Heirloom Bourne Shell です。
 SVR4 / SVID3 相当です。同様の Unix utilities も扱っています。
 ( 下記 F.3 参照 )
0005テンプレ ◆01VkPKFOHeoR 2014/11/11(火) 03:42:31.91
□C. 初心者へのアドバイス
1. シェルスクリプトのことをシェルってゆーな
2. 知らないコマンドが出てきたら man コマンドで調べましょう。
3. UNIX には、シェルスクリプトに便利な小さなコマンドが色々あります。
 apropos ないしは man -k でそれらしい単語による簡単な検索もできます。
4. シェルの構文や内部コマンドは man sh で。英語は LANG=C man shで。
5. 思い通りに動かないときは、まずは #!/bin/sh -x でトレースしましょう。
6. 適した道具を判断するのも頭の重要な使い方。シェルスクリプトよりも
 awk / perl / javascript / ruby / python 等、他の (スクリプト) 言語の方が
 適した処理にはそちらを使いましょう。
7. シェルで使えるワイルドカード等は正規表現ではありません。
 正規表現の話題は正規表現スレへ
8. csh / tcsh のシェルスクリプトは推奨されません。理由は下記を参照
 http://www.speech-lab.org/~hiroki/csh-whynot.euc
9. cat file|すんなハゲ
 a. 詳細は "Useless Use of Cat" UUOC で検索して下さい
 b. 有用な場合も有ります Useful use of cat(1) 英文
  http://www.in-ulm.de/~mascheck/various/uuoc/

□D. シェルスクリプトでよく使うコマンド
1. 制御・条件判定系: [, test, expr, true, false, yes, getopts
2. テキスト処理系: cat, awk, sed, tr, sort, uniq, grep, wc, head, tail, cut,
 paste, comm, join
3. ファイル検索系: find ( スペースなどを含むファイル名を正しく処理するため、
 find は -exec command {} + を推奨。
 他に -print0、xargs は -0 オプションという方法もあるが Solaris 非対応 )
4. ディレクトリ系: basename, dirname
5. 出力系: echo, printf
6. 対話コマンド制御系: expect
7. http / ftp の処理自動化: wget, curl
0006テンプレ ◆01VkPKFOHeoR 2014/11/11(火) 03:43:24.34
□E. 学習用テキスト
1. Bourne Shell自習テキスト ( 1993年 ) pdf お薦め
 http://lagendra.s.kanazawa-u.ac.jp/ogurisu/manuals/sh-text/sh/
 http://ayapin.film.s.dendai.ac.jp/~matuda/Lecture/PDF/sh-two.pdf
2. シェルを使おう - 導入からプログラミングまで - ( 2002年 )
 http://www.netfort.gr.jp/~tomokuni/lms/shell/
3. UNIX FAQ LIST
 http://www.nurs.or.jp/~asada/FAQ/UNIX/UNIX.FAQ.html

□F. 参考リンク
1. 可搬性関連
 a. autoconf マニュアル 移植性のあるシェルプログラム
  http://www.gnu.org/software/autoconf/manual/autoconf.html#Portable-Shell
  http://www.geocities.jp/fut_nis/html/autoconf-ja/Portable-Shell.html
 b. Portability talk [Bash Hackers Wiki] 英文
  Obsolete and deprecated syntax も見る価値有り
  http://wiki.bash-hackers.org/scripting/nonportable
 c. How to make bash scripts work in dash 英文
  http://mywiki.wooledge.org/Bashism
 d. DashAsBinSh 英文
  https://wiki.ubuntu.com/DashAsBinSh
 e. Portable Shell Programming 英文
  http://www.in-ulm.de/~mascheck/various/portability/
0007テンプレ ◆01VkPKFOHeoR 2014/11/11(火) 03:44:12.46
2. POSIX
 The Open Group Base Specifications Issue 7 IEEE Std 1003.1, 2013 Edition 英文
 http://pubs.opengroup.org/onlinepubs/9699919799/
3. Traditional Bourne Shell 関連
 a. The Traditional Bourne Shell Family History and Development 英文
  http://www.in-ulm.de/~mascheck/bourne/
 b. BourneShell / Where does the Bourne shell live? 英文
  http://mywiki.wooledge.org/BourneShell
 c. The Heirloom Bourne Shell 英文
  http://heirloom.sourceforge.net/
4. マニュアル
 a. The Base Specifications Issue 7, 2013 Edition 英文
  http://pubs.opengroup.org/onlinepubs/9699919799/nfindex.html
 b. FreeBSD 日本語マニュアル検索
  http://www.jp.freebsd.org/man-jp/search.html
 c. JM Project (Japanese)
  http://linuxjm.sourceforge.jp/
5. FAQ 等
 a. UNIXの部屋 ( 2011年 )
  http://x68000.q-e-d.net/~68user/unix/
 b. Linux JF (Japanese FAQ) Project
 http://linuxjf.sourceforge.jp/
 c. Advanced Bash-Scripting Guide 英文
  http://www.tldp.org/LDP/abs/html/
 d. Unix Programming FAQ 日本語訳 ( 2000年 )
  http://www.race.u-tokyo.ac.jp/~moro/unix-programmer/
0008名無しさん@お腹いっぱい。2014/11/11(火) 03:45:49.28
6. ツール
 a. web tool です。Vim syntastic や Emacs の Flycheck でも使えます
  ShellCheck
  http://www.shellcheck.net/about.html
 b. vim 用 syntastic
  https://github.com/scrooloose/syntastic
 c. checkbashisms も使用してチェック duggan/shlint GitHub
  https://github.com/duggan/shlint

□G. 前スレ
1. ☆シェルスクリプトを勉強するにあたって☆
 http://hibari.2ch.net/test/read.cgi/unix/989659936/
2. 便利なシェルスクリプト見せろ
 http://pc.2ch.net/test/read.cgi/unix/996949546/
3. シェルスクリプト総合 その1
 http://pc5.2ch.net/test/read.cgi/unix/1101820646/

中略。検索して下さい

4. シェルスクリプト総合 その23
 http://peace.2ch.net/test/read.cgi/unix/1404204950/
0009テンプレ ◆01VkPKFOHeoR 2014/11/11(火) 03:46:48.40
□H. 関連スレ
1. sed
 http://peace.2ch.net/test/read.cgi/unix/1085730992/
2. 正規表現
 http://peace.2ch.net/test/read.cgi/unix/1039165754/
3. Regular Expression(正規表現) Part13
 http://peace.2ch.net/test/read.cgi/tech/1415149975/
4. Perlについての質問箱 63箱目
 http://peace.2ch.net/test/read.cgi/tech/1392906213/
5. ECMAScript デス 4
 http://peace.2ch.net/test/read.cgi/tech/1325448978/
6. Rubyについて Part49
 http://peace.2ch.net/test/read.cgi/tech/1382307475/
7. Pythonのお勉強 Part50
 http://peace.2ch.net/test/read.cgi/tech/1413474092/
8. 【node.js】サーバサイドjavascript 2【Rhino】
 http://peace.2ch.net/test/read.cgi/tech/1358937029/

□I. 現在評価待ち: X.n は予定した追加先。主にスレ立て人の判断保留用。
0010テンプレ ◆01VkPKFOHeoR 2014/11/11(火) 03:47:27.08
□J. テンプレートの変更案や、おすすめの本、リンク等が有りましたら続けてどうぞ!
1. 検索しやすい様に、先頭に "コメント複数行\n指示\n□X" を付けて指定して下さい。
 追加や、削除、挿入、移動、分割等と適切に書いて下さい。
 900 レスまでに別の方の反論が無ければ、次にスレッドを立てる人が適当に判断して
 取り込むはずです。
2. レス例
スクリプトスレを列挙するのは不要に感じる
削除
□H. 関連スレ
 H.5から8 ECMAScript, Rubyについて, Pythonのお勉強, サーバサイドjavascript

3. レス例
これは、聖なる本
追加
□E. 学習用テキスト
4.お勧め図書
 a 伝承シェルプログラミング ( 199X年 )
  http://www.example.net/404.html

| テンプレートの変更案や、お勧めのリンク、本等が有りましたら、
V あ、張り切って〜、どうぞ〜! 案じゃ無くてつぶやきでも、どうぞ〜!
0011名無しさん@お腹いっぱい。2014/11/12(水) 04:59:38.71
シャナスクリプトはまだですか?
0012名無しさん@お腹いっぱい。2014/11/12(水) 07:18:57.54
シャロスクリプトもまだです
0013名無しさん@お腹いっぱい。2014/11/12(水) 13:25:09.66
そういえば
コート脱いだらハワイのミポリソ萌えスクリプトが
サーバのどっかに転がってたかもなぁw
0014名無しさん@お腹いっぱい。2014/11/12(水) 23:08:52.17
前スレで長テンプレを提案してた人スレ立ったらテンプレそのままでざまぁwww
とか思ってたらしっかり記載していたでござる

なんか文面の雰囲気変わったな、もっと堅い感じだった気がするが
0015名無しさん@お腹いっぱい。2014/11/13(木) 07:09:24.77
>>14
変えてないけどなあ
意見聞く際になるべく中立、丁寧語で書いたから、そういう印象なのかな?

意見を聞いて了承を得てからという作業は面倒臭かったが
たとえ、その23 以前の短い1レスだけのテンプレのままを、立てる人がコピペするにしても
少なくとも Perl の矛盾した記述だけはなんとかしたい

シェルスクリプト総合 その1 からずっと最近までは
「(Rubyや)awkまたはperlの方が適した処理にはそちらを使いましょう。」だけだった
0016名無しさん@お腹いっぱい。2014/11/16(日) 22:28:48.41
お勧めの shell を教えて下さい。

ずっと(22年ぐらい) 自宅や学校の FreeBSD上で tcsh を login shell として使ってきましたが、
このスレを読んで、 csh 系スクリプトはお勧めでないことを知りました。

root で作業するときには、 sh も必要なので使いますし、スクリプトも書くのですが
tcsh から sh系に移行できないでいます。

最近は仕事で数値計算をするときのプラットフォームが cygwin になってしまったため、
これを機に 自宅の FreeBSD でも、sh 系を login shell にするように切り替えようかとも思っています。
お勧めを教えて頂けませんでしょうか。

どうぞ宜しくお願い致します。
0017名無しさん@お腹いっぱい。2014/11/16(日) 22:34:23.69
>>16 自己フォローです。

すみません。他に適切と思われるスレを見つけたので、移動します。

おまえら! shell は何を使っているんですか?
http://peace.2ch.net/test/read.cgi/unix/1012330865/

お邪魔して申し訳ありませんでした。
0018名無しさん@お腹いっぱい。2014/11/17(月) 00:19:12.19
お、おう
0019名無しさん@お腹いっぱい。2014/11/17(月) 06:46:29.31
ログインシェルとスクリプトのシェルを一致させる必要は別にないのになぁ…
0020名無しさん@お腹いっぱい。2014/11/17(月) 08:15:15.50
ログインシェルはzshでスクリプト書くときはbashかな
0021名無しさん@お腹いっぱい。2014/11/17(月) 08:20:16.99
ログインシェルもスクリプトもashだ
0022名無しさん@お腹いっぱい。2014/11/17(月) 08:52:41.49
Bシェル系同士なら一致させなくても良い
0023名無しさん@お腹いっぱい。2014/11/17(月) 14:56:35.93
スクリプトは ash か dash
0024名無しさん@お腹いっぱい。2014/11/17(月) 22:07:53.32
z750sh3
0025名無しさん@お腹いっぱい。2014/11/18(火) 13:45:16.57
shで無駄にがんばる
いやなんとなく続けてるだけか
0026名無しさん@お腹いっぱい。2014/11/18(火) 17:45:34.74
/bin/sh でがんばっているよ
実体が ash だったり
dash へのリンクだったりするだけでw
0027名無しさん@お腹いっぱい。2014/11/18(火) 17:50:06.98
がんばるってほどのことかな
スクリプト書く労力は他のシェルでもあんま変わらんでしょ?
0028名無しさん@お腹いっぱい。2014/11/18(火) 18:04:52.35
ん? ログインシェルを/bin/shで頑張るって話でしょ?
補完なし、ヒストリーなし、aliasなしで。
0029名無しさん@お腹いっぱい。2014/11/18(火) 18:09:15.90
スクリプトスレだからスクリプト動かす話だよ
0030名無しさん@お腹いっぱい。2014/11/18(火) 18:24:14.49
>>19 の、ログインシェルとスクリプトのシェルを一致させる必要があるかどうか
という話から来てるから、
ログインシェルの話だろ
0031名無しさん@お腹いっぱい。2014/11/19(水) 20:36:46.43
emacsキーバインドのtcshでログインして、viでashスクリプト書いてるわ。
0032名無しさん@お腹いっぱい。2014/11/20(木) 21:39:29.05
>>28
ashはファイル補完もヒストリー呼び出しもある。
aliasなんてうんこ。functionの方が強力。
0033名無しさん@お腹いっぱい。2014/11/21(金) 05:09:42.89
>>32
それはFreeBSD拡張のashだね。
0034名無しさん@お腹いっぱい。2014/11/21(金) 16:11:47.88
スレ違いっぽいので何だがw
ログインシェルは zsh
0035名無しさん@お腹いっぱい。2014/11/21(金) 16:14:13.45
>>33
大抵emacsのshell-modeで使うので、ヒストリやコンプリーションは
なくてもそれほど困らない。
0036名無しさん@お腹いっぱい。2014/11/21(金) 19:51:04.45
もういっそログインシェルをemacsにしろよw
■ このスレッドは過去ログ倉庫に格納されています