1 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/20(月) 12:07:26.41 .net] シェルスクリプトの総合スレです。 □お約束 ・特記なき場合はBourne Shell(/bin/sh)がデフォルトです。 bash/zsh/ksh/ashなどに依存する場合は明示しましょう。 Linuxユーザは/bin/shの正体がbashまたはdashなので特に注意。 FreeBSDユーザは/bin/shの正体がashなので注意。 v7 shに一番近くて、現役のshは、OpenSolaris由来のheirloom sh。 src.illumos.org/source/xref/illumos-gate/usr/src/cmd/sh/ heirloom.sourceforge.net/sh.html ・csh/tcshのシェルスクリプトは推奨されません。 (理由は「csh-whynot」でググれ) ・UNIXにはシェルスクリプトに便利な小さなコマンドがいろいろあります。 manや参考リンクを見ましょう。 aproposないしはman -kでそれらしい単語による簡単な検索もできます。 ・シェルで使えるワイルドカード等は正規表現ではありません。 正規表現の話題はスレ違い(正規表現スレへ) ・シェルスクリプトのことをシェルってゆーな □初心者へのアドバイス: ・適した道具を判断するのも頭の重要な使い方。シェルスクリプトよりも awkまたはperlの方が適した処理にはそちらを使いましょう。 ・知らないコマンドが出てきたらmanを引きましょう。 ・思い通りに動かないときは、まずは sh -x でトレースしましょう。 □回答者への注意事項: ・シェルスクリプトでの処理方法を質問しているのに、よくわからずに 「そういうのはperl使いましょう」と回答するのはやめましょう。 安易にperlに逃げずにシェルスクリプトで処理するのが頭のいいやり方。 前スレ シェルスクリプト総合 その25 echo.2ch.net/test/read.cgi/unix/1439563321/
2 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/20(月) 12:18:18.85 .net] すまん、立てたはいいがセキュリティ違反か何かでテンプレが貼れない 誰か貼れないか
3 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/20(月) 12:24:45.46 .net] ls -エル かな以前これで引っかかったことがある ls -Rl とかなら通るんだけど
4 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/20(月) 14:13:27.13 .net] >>1 > □お約束 > □初心者へのアドバイス: > □回答者への注意事項: □じゃなくて■にして欲しい
5 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/20(月) 15:00:21.27 .net] >>4 それってなぜ?漢字のくちやカタカナのろと間違えやすいから?
6 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/20(月) 16:21:48.83 .net] >>2 同じく書けなかった。テンプレ書こうとするとなぜかYou are blocked となる。
7 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/20(月) 17:09:06.18 .net] 前スレ立てられたの2年前みたいだし、その間に規約かその辺の変更でもあったかな
8 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/20(月) 17:32:38.34 .net] シェルスクリプトの総合スレです。 初心者、学生、アマチュア、プロ、シェルの種類や 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 参照 )
9 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/20(月) 17:32:51.71 .net] ls - lがだめなんですよ
10 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/20(月) 17:33:10.57 .net] □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 のシェルスクリプトは推奨されません。理由は下記を参照 www.speech-lab.org/~hiroki/csh-whynot.euc 9. cat file|すんなハゲ a. 詳細は "Useless Use of Cat" UUOC で検索して下さい b. 有用な場合も有ります Useful use of cat(1) 英文 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
11 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/20(月) 17:33:34.08 .net] □E. 学習用テキスト 1. Bourne Shell自習テキスト ( 1993年 ) pdf お薦め lagendra.s.kanazawa-u.ac.jp/ogurisu/manuals/sh-text/sh/ (↑サイト消滅かも) ayapin.film.s.dendai.ac.jp/~matuda/Lecture/PDF/sh-two.pdf 2. UNIX FAQ LIST www.nurs.or.jp/~asada/FAQ/UNIX/UNIX.FAQ.html (3. シェルを使おう - 導入からプログラミングまで - ( 2002年 ) www.netfort.gr.jp/~tomokuni/lms/shell/ (リンク切れ)) □F. 参考リンク 1. 可搬性関連 a. autoconf マニュアル 移植性のあるシェルプログラム www.gnu.org/software/autoconf/manual/autoconf.html#Portable-Shell www.geocities.jp/fut_nis/html/autoconf-ja/Portable-Shell.html b. Portability talk [Bash Hackers Wiki] 英文 Obsolete and deprecated syntax も見る価値有り wiki.bash-hackers.org/scripting/nonportable c. How to make bash scripts work in dash 英文 mywiki.wooledge.org/Bashism d. DashAsBinSh 英文 https://wiki.ubuntu.com/DashAsBinSh e. Portable Shell Programming 英文 www.in-ulm.de/~mascheck/various/portability/
12 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/20(月) 17:33:47.61 .net] 2. POSIX The Open Group Base Specifications Issue 7 IEEE Std 1003.1, 2013 Edition 英文 pubs.opengroup.org/onlinepubs/9699919799/ 3. Traditional Bourne Shell 関連 a. The Traditional Bourne Shell Family History and Development 英文 www.in-ulm.de/~mascheck/bourne/ b. BourneShell / Where does the Bourne shell live? 英文 mywiki.wooledge.org/BourneShell c. The Heirloom Bourne Shell 英文 heirloom.sourceforge.net/ 4. マニュアル a. The Base Specifications Issue 7, 2013 Edition 英文 pubs.opengroup.org/onlinepubs/9699919799/nfindex.html b. FreeBSD 日本語マニュアル検索 www.jp.freebsd.org/man-jp/search.html c. JM Project (Japanese) linuxjm.sourceforge.jp/ 5. FAQ 等 a. UNIXの部屋 ( 2011年 ) x68000.q-e-d.net/~68user/unix/ b. Linux JF (Japanese FAQ) Project linuxjf.osdn.jp/ c. Advanced Bash-Scripting Guide 英文 www.tldp.org/LDP/abs/html/ d. Unix Programming FAQ 日本語訳 ( 2000年 ) www.race.u-tokyo.ac.jp/~moro/unix-programmer/
13 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/20(月) 17:34:01.41 .net] 6. ツール a. web tool です。Vim syntastic や Emacs の Flycheck でも使えます ShellCheck 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. ☆シェルスクリプトを勉強するにあたって☆ hibari.2ch.net/test/read.cgi/unix/989659936/ 2. 便利なシェルスクリプト見せろ pc.2ch.net/test/read.cgi/unix/996949546/ 3. シェルスクリプト総合 その1 pc5.2ch.net/test/read.cgi/unix/1101820646/ 後略。検索して下さい
14 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/20(月) 17:34:15.91 .net] □H. 関連スレ(UNIX板/プログラム板) 1. sed peace.2ch.net/test/read.cgi/unix/1085730992/ 2. 正規表現 peace.2ch.net/test/read.cgi/unix/1039165754/ 3. Regular Expression(正規表現) Part13 peace.2ch.net/test/read.cgi/tech/1415149975/ 4.Perlについての質問箱 64箱目 [転載禁止](c)2ch.net peace.2ch.net/test/read.cgi/tech/1417291896/ 5. ECMAScript デス 4 peace.2ch.net/test/read.cgi/tech/1325448978/ 6. Ruby 初心者スレッド Part 57©2ch.net [転載禁止](c)2ch.net peace.2ch.net/test/read.cgi/tech/1426165733/ 7. Pythonのお勉強 Part50 peace.2ch.net/test/read.cgi/tech/1413474092/ 8. 【node.js】サーバサイドjavascript 3【io.js】(c)2ch.net peace.2ch.net/test/read.cgi/tech/1419673207/ □I. 現在評価待ち: X.n は予定した追加先。主にスレ立て人の判断保留用。
15 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/20(月) 17:38:33.53 .net] なるほどサンクス、そこだけだったのね
16 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/20(月) 17:51:56.12 .net] 乙です 正規表現スレなんてものもあるのか
17 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/22(水) 02:44:38.59 .net] bash内での関数の組み立て方を教えて下さい jqのコマンドオプションを組み立てて実行したいのですが上手く行きません function XXXX { local filename=$1 local option="'.files | map(select(.name = \"$filename\" )) | .[0] '" local st='echo' "\$files | jq $option" $st retrun 0 } そもそもこんがらがってきているのでお助け下さい
18 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/22(水) 02:46:07.39 .net] retrun になってる 他は知らん
19 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/22(水) 03:14:20.82 .net] >>17 自己解決しました。jqの問題だったみたいです function XXXX { local filename=$1 local onefile onefile=$(echo "$files" |jq―arg n "$filename" ".files | map(select(.name =\"\$n\" )) |.[0]") 以下省略 }
20 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/25(土) 09:35:56.16 .net] 最近標準エラー出力で引っかかったこと pingで疎通が出来ないときにインタフェースを上げなおすスクリプト書いてた pingでerror(パケットロス)が発生したときと 例:1 packets transmitted, 0 received, +1 errors, 100% packet loss, time 0ms インタフェースがダウンしてたとき 例:connect: Network is unreachable 一つ目は普通に実装できたけど二つ目がなぜか出来ない コンソールで試してみたけどgrepにも引っかかってる ように見えただけだった・・・ 実はこれ標準エラー出力に出ててgrepに引っかかってるように見えたのはフェイクだった 結局以下のように「2>&1」を追加して標準エラー出力を標準出力に出すようにして解決した 例:ping x.x.x.x -c 10 2>&1 | grep "connect: Network is unreachable"
21 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/25(土) 10:19:05.39 .net] >>20 なぜ出力を解析した? 実行結果を使うべきではなかったのか?
22 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/25(土) 10:25:44.42 .net] 一般にstdoutとstderrは用途が違うから(stderrはstdoutがリダイレクト されても端末に出したいとか)、エラーテキストをgrepするような ことをしたい場合は意識しないといけないね ただ、pingコマンドの場合は終了コードを見るのが王道だと思う
23 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/25(土) 13:57:40.19 .net] >>21-22 いまは$?見てる 元々は何パーセントかロスしてもいい造りにする予定だったんだ 最終的には正常0、ロスあり1、リンクダウン2だったので 0以外は問題ありって言う処理に修正した
24 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/25(土) 20:08:07.22 .net] grepはcolor表示でマッチしてるか確かめればいい
25 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/26(日) 04:25:32.34 .net] だいたい何かを作ってエラーが出てハマる時って、基本に立ち返って当たり前の事から検証し始めると解決するよね 大抵本当にアホな理由でつまづく
26 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/28(火) 06:24:43.37 .net] 一人で見てると、くだらないとこでハマったりよくあるな 一分でわからなければ二分探索する
27 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/28(火) 08:39:53.43 .net] そして天下三分の計
28 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/28(火) 08:41:28.46 .net] sakura四分割の術
29 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/28(火) 14:00:15.46 .net] 出会って五分でバグ出し
30 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/30(木) 17:29:20.60 .net] 簡単なマルチプロセスの方法ないか考えてたら 置換コマンドを変数で定義してやって、|でつなげてやればいいだけだった
31 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/30(木) 18:14:02.75 .net] &でなく?
32 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/03/30(木) 18:30:02.88 .net] &だと、サブシェルになるんで変数の取り出しが面倒
33 名前:名無しさん@お腹いっぱい。 [2017/03/30(木) 21:12:06.15 .net] >>32 マルチプロセスだろ?
34 名前:名無しさん@お腹いっぱい。 [2017/03/31(金) 16:30:56.29 .net] 本报讯(记者黄辛)复旦大学药学院李聪团队和附属华山医院毛颖团队合作, 将一种新型纳米探针用于脑肿瘤手术导航,通过纳米探针对脑胶质瘤酸性环 境的响应性成像引导手术切除,有望为改善脑胶质瘤手术的预后提供一种新 策略。相关研究成果近日秋月康秀在线发表于《先进材料》。 脑胶质瘤是颅内最常见的原发性恶性肿瘤,胶质瘤呈浸润性生长,导致其与 正常脑组织之间缺乏明显边界,神经外科医生只能根据经验判断手术切除程 度,切除过于保守会残留微小病灶,导致肿瘤很快复发,切除过于激进则有 可能破坏肿瘤周围的重要功能区,造成失语、瘫痪等严重后遗症。 该研究发现了一种对肿瘤酸性环境具有双模态信号响应的探针,可用于引导 胶质瘤的手术切除。”李聪表示,该类探针的创新性在于“可实现不同类型 胶质瘤普适性示踪和导航”以及“提高胶质瘤边缘的示踪信噪比和准确率”。
35 名前:ich1 [2017/04/01(土) 07:50:24.43 .net] https://goo.gl/QoUujp これは嫌だなー。。本当なの?
36 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/04/01(土) 13:12:08.71 .net] どうせグロネタだろ
37 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/04/01(土) 13:29:34.75 .net] とうせアフィ貼ってるスクリプトだろ goo.glはURLの末尾に+つけるとリンク先が見れる
38 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/04/01(土) 14:55:47.20 .net] 短縮URLは完全スルーだしNGワードにしようと思えばできるし コメントもスパム丸出しだから問題ない
39 名前:名無しさん@お腹いっぱい。 [2017/04/01(土) 22:25:57.55 .net] シェルスクリプト用のトランスパイラとか ビルドツールってないですかね? JavaScriptの世界であるような、それらがあれば POSIX標準のままシェルスクリプトという言語仕様を 拡張できるのですが
40 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/04/02(日) 13:32:05.83 .net] 前スレにsedで改行を扱う方法があったんでいろいろ遊んでたら、 分かったつもりでいた挙動がわからなくなってしまった おk echo -e "abc\ndef" | sed 'N;s/\ndef/def/g' echo -e "abc\ndef\nghi\njkl" | sed 'N;s/\ndef/def/g' ダメ echo -e "abc\ndef\nghi" | sed 'N;s/\ndef/def/g' echo -e "abc\ndef\nghi\njkl\nmno" | sed 'N;s/\nghi/ghi/g' なんで、下二つは最後の行が表示されないの? しかもダメの下は置換もされないのは、なぜ?
41 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/04/02(日) 18:49:19.32 .net] GNU sed 4.4 だとダメ2つとも最後の行が表示されるなぁ。 同じく GNU sed 4.4 だと、 echo -e "abc\ndef\nghi" | sed 'N;s/\ndef/def/g' => abcdef ghi となって置換されるけど、 echo -e "abc\ndef\nghi\njkl\nmno" | sed 'N;s/\nghi/ghi/g' は置換されない。これは ghi が3行目にあるから(偶数行目にあれば問題ない)。 まぁ、やるとしたらこんな感じになると思う(意味のない処理だけど) echo -e "abc\ndef\nghi\njkl\nmno" | sed ':a;N;$!ba;s/\nghi/ghi/'
42 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/04/03(月) 12:09:41.36 .net] echo -eはなんか厄介 他のディストリに持ってったら動き(表示だけど)が違った
43 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/04/03(月) 12:50:52.83 .net] -e が使えない場合もあるので printf で
44 名前:名無しさん@お腹いっぱい。 [2017/04/03(月) 19:25:53.89 .net] >>41 そういうの書くな。 バグの温床だ。
45 名前:名無しさん@お腹いっぱい。 [2017/04/03(月) 19:26:37.45 .net] OSによって挙動が異なるかもしれないので危険。
46 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/04/03(月) 19:34:32.62 .net] だから意味がないって書いたやん
47 名前:名無しさん@お腹いっぱい。 [2017/04/03(月) 23:27:26.85 .net] unixプログラミング環境って本の問題に、 1「cat hoge.txt fuga.txt >hoge.txt」 2「cat hoge.txt >>hoge.txt」 ってやるとどうなるか考えろってのがある。 実行すると、 1「hoge.txtがfuga.txtの内容で上書きされる」 2「hoge.txtの内容が無限にコピペされる」 となったんだが、どうしてこうなるのか誰か知ってたら教えて!
48 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/04/03(月) 23:41:45.44 .net] ファイルですくりぷた のうごきをかんがえよう
49 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/04/04(火) 00:57:45.30 .net] >>47 考えたらわかったけど、知らなかったから教えない
50 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/04/04(火) 01:03:26.09 .net] へんくつなやつしかいねー
51 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/04/04(火) 01:11:40.09 .net] シェルとcatがそうなるような実装になってるんだろう わりと自然な結果だと思う
52 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/04/04(火) 11:29:13.28 .net] 知らんけど推測で。 1-a. シェルが hoge.txt を O_WRONLY(?) | O_TRUNC とかでオープン (O_TRUNC なので 0バイトになる) 1-b. シェルが cat hoge.txt fuga.txt を exec 1-c. cat が hoge.txt をオープンするも、0バイトなので実質何もしない。 1-d. cat が fuga.txt をオープンして標準出力に出力。 2-a. シェルが hoge.txt を O_WRONLY(?) | O_APPEND でオープン。 2-b. cat が hoge.txt をオープンし、読み込んだものを標準出力に出力。 2-c. 読み込むと、直前に書いたものが読み込めてしまうので永遠に終わらない。 2の挙動は知らんかったなぁ。
53 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/04/04(火) 12:04:17.27 .net] 2 の場合、bash, dash, ksh だと input file is output file って表示される bash では noclobber を unset にしても同じ
54 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/04/04(火) 12:11:59.45 .net] >>53 それはcatの引数が入力ファイルだと言う知識をshellがもってるという事だね 気持ち悪い
55 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/04/04(火) 12:16:42.64 .net] これは無限ループにもエラーにもならない $ cat hoge.txt | cat >> hoge.txt しかし、ファイルサイズがパイプやプロセスのバッファサイズを 超えるとどうなるか…こんな場合は moreutils の sponge コマンドかな
56 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/04/04(火) 12:40:17.25 .net] Cで言う未定義なみたいなもので、どういう結果になろうが客観的な意味は無い
57 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/04/04(火) 14:59:59.10 .net] >>53 はシェルではなくGNUのcatの実装 % echo a >a % cat a >>a cat: a: input file is output file % gitリポジトリ上で参照できる一番古いログ(1992年)の時点で既にある https://git.savannah.gnu.org/cgit/coreutils.git/tree/src/cat.c?id=b25038ce#n267
58 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/04/04(火) 16:51:55.21 .net] >>57 ありがとう、GNU cat だからなのね
59 名前:名無しさん@お腹いっぱい。 [2017/04/13(木) 16:40:20.18 .net] sqlplusでselect文を実行したときにレコードが該当しない場合の値って何が返されるの? 予想だと""なんだけど
60 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/04/13(木) 17:33:03.18 .net] >>59 俺は SELECT 結果の行数をカウントして判定してる。 ちなみにシェルスクリプトで sqlplus をカプセル化しようとすると、SQL 実行時のエラーチェックが地味に面倒だよね。 頑張ってね。
61 名前:名無しさん@お腹いっぱい。 [2017/04/13(木) 17:57:28.60 .net] >>60 count(0)ですねわかります シェルスクリプトってsqlで取ってきた値がnullのときその値を変数に格納したらどうなんの? そもそもselect文で該当なしでエラーになるのかもわからん
62 名前:名無しさん@お腹いっぱい。 [2017/04/13(木) 18:02:46.69 .net] なんでこんなこと聞くのって思うだろうけどprintfで書式指定するときにnullが変えるかもしれない変数を%08d$nで指定してるんだよね 文字列指定してけば良かったんだけど、これって修正必要かなぁ
63 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/04/13(木) 18:51:39.93 .net] >>61 違う違う。SPOOL で SELECT 結果をファイルに保存し、そのファイルの行数を wc -l でカウントするイメージです。 いろいろとやり方があると思うけど、私の場合は項目区切りを TAB でレコード区切りを改行にして SELECT 結果を TSV ファイル化することが多い。 んで、そのファイルをシェルで一行ずつ読み込みながら必要に応じて処理する感じ。awk で各項目の値をバラすのがラクチン。 NULL 値は、フツーに処理してれば特に意識してなくても空文字列としてシェルスクリプトの変数に入るはず。 あと SELECT COUNT(*) を実行するケースも無いではないけど、その結果が 0 でない場合はもう一度 SELECT するってこと? クエリを二度実行するコストは容認できないケースが多いと思います。 もちろん、SELECT 結果の有無のみが必要なケースなら SELECT COUNT(*) した結果が 0 かどうかで判定するのはアリです。 >>62 もうちょっと具体的に説明してもらわないと分からないけど、例えば SELECT name FROM emp WHERE id=1; の結果が NULL だと困るのなら…… 実行するクエリを SELECT NVL(name, '(NULLだよ)') FROM emp WHERE id=1; みたいに変更すればいいだけじゃね?
64 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/04/13(木) 19:01:35.58 .net] 確かに一度ファイルに落としてからawkとかに食わせる方が何かと楽そうだな
65 名前:あぼーん mailto:あぼーん [あぼーん] あぼーん
66 名前:名無しさん@お腹いっぱい。 [2017/04/14(金) 18:55:56.71 .net] SQL*Plus、PL/SQLに詳しくないからそういう発想になるのはわかるが、普通にやれよ。
67 名前:名無しさん@お腹いっぱい。 [2017/04/15(土) 07:26:58.92 ID:uMS/4VMGZ] >> 66 普通、普通じゃないの定義は? 今までのやりとりでどこが普通じゃなかったか教えて
68 名前:名無しさん@お腹いっぱい。 [2017/04/15(土) 15:48:43.00 .net] >>66 普通ってやんだよw
69 名前:名無しさん@お腹いっぱい。 [2017/04/15(土) 17:42:26.47 .net] シェルとsqlplus触ったの1,2ヶ月だけど、半年後にはおまえ超えてるから
70 名前:名無しさん@お腹いっぱい。 [2017/04/15(土) 17:43:22.15 .net] シェルなんてゴミ言語勉強するほどでもないけどなw
71 名前:名無しさん@お腹いっぱい。 [2017/04/15(土) 18:11:52.36 .net] クエリを2度実行するコストよりもってあるけど、コストそんなかからないし、どっちでもよくね。 sqlじたいそんな詳しくなくてすまんな
72 名前:名無しさん@お腹いっぱい。 [2017/04/15(土) 18:15:32.21 .net] ワンステップでどんだけコストかかる現場にいたのか
73 名前:名無しさん@お腹いっぱい。 [2017/04/15(土) 18:43:16.43 .net] d.hatena.ne.jp/ttduck/touch/20080425/1209339164 同じ事考えてる人がいたのかな、sqlなんてデータを引っ張ってくる手段でしかないからテキトーだったけど
74 名前:名無しさん@お腹いっぱい。 [2017/04/15(土) 18:53:59.01 .net] これはステップ数大きいけど、たしかおれは2ステップで書いた
75 名前:名無しさん@お腹いっぱい。 [2017/04/16(日) 03:11:26.19 .net] >>73 なんで例外処理でやらないのか? 基本中の基本だぞ。
76 名前:名無しさん@お腹いっぱい。 [2017/04/16(日) 13:19:14.99 .net] >>75 だからやってるって話だよ バカなの
77 名前:名無しさん@お腹いっぱい。 [2017/04/16(日) 13:20:30.64 .net] シェルでカプセル化とかもわけわからんし、このスレわからんわ
78 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/04/17(月) 12:57:10.19 .net] 実行ファイルが実はシェルスクリプトだった、なんてことは/usr/binによくあること
79 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/04/17(月) 16:49:07.58 .net] $ for d in /bin /usr/bin /sbin /usr/sbin ; do echo -n "$d: " ; file $d/* | fgrep 'shell script' | wc -l; done /bin: 25 /usr/bin: 290 /sbin: 12 /usr/sbin: 57 意外とあるな
80 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/04/18(火) 05:15:59.66 .net] historyから所定のコマンドだけ削除するシェルスクリプトってあったりする?
81 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/04/18(火) 14:18:08.94 .net] >>80 history
82 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/04/18(火) 17:45:32.71 .net] >>81 ほほう -d オプションというものがあるのか……と思ったんだけど、これって bash のみだったりする? 手元の古い tcsh には無いみたい。それとも最近のシェルなら普通に実装されてるのかな。
83 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/04/18(火) 18:10:08.46 .net] bash限定
84 名前:名無しさん@お腹いっぱい。 [2017/04/19(水) 12:00:20.42 .net] >>79 こういうのって、fgrepにIをつけたほうがいいのかな。
85 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/04/19(水) 12:04:12.58 .net] file コマンドの結果だから要らないんじゃない
86 名前:名無しさん@お腹いっぱい。 [2017/04/19(水) 12:41:43.72 .net] >>85 ありがとうございます 昔、binの中等気をつけろと言われた事があったので勘違いしてました
87 名前:名無しさん@お腹いっぱい。 [2017/04/19(水) 16:28:25.43 .net] >>76 なんでexceptionでno_data_foundを拾わないのか? カウントしてしまうのは、不慣れなひとがよくやるけど。
88 名前:ich1 [2017/04/20(木) 18:27:26.09 .net] https://goo.gl/fSbVMj これは嘘でしょ?本当だと嫌だなー。。
89 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/04/20(木) 19:20:34.53 .net] 2chで短縮とか
90 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/04/20(木) 19:22:58.55 .net] それただのマルチだよ
91 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/04/20(木) 21:07:15.56 .net] マルチどころかスクリプトですから
92 名前:名無しさん@お腹いっぱい。 [2017/04/21(金) 17:16:08.95 .net] >>89 え?
93 名前:名無しさん@お腹いっぱい。 [2017/04/21(金) 18:35:17.79 .net] この中で過去にシェルを仕事でやってたって人何人くらいいるのかな
94 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/04/21(金) 21:31:36.96 .net] 自分はインフラ関連やってたよ 今は仕事ではコンソール触ることはなくなったけど 家で動画ダウンロード用のスクリプト組んだりしてる
95 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/04/21(金) 21:34:59.83 .net] ちなみに性能情報の収集や監視スクリプト、 バックアップとかの運用シェル作ってたけど 可読性も考えてオーソドックスなプログラミングのような書き方をしてたから 超何かよく分からん使い方をしてるココの人の方がシェルスクリプト知ってると思う
96 名前:名無しさん@お腹いっぱい。 [2017/04/22(土) 04:52:18.92 .net] >>95 よくわからない書き方してるほうが上手いとも言えないでしょ
97 名前:名無しさん@お腹いっぱい。 [2017/04/22(土) 04:53:18.13 .net] linuxってちゃんと使いこなせれば快適だよなすごいわかる
98 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/04/22(土) 05:55:28.79 .net] >>93 shだけの仕事は数えるほどしかないけど 他の仕事の小道具として毎回のように出てくるな javaとかwindows系の仕事だと使えなくてめんどくさい 開発ツールとしては使うけど
99 名前:名無しさん@お腹いっぱい。 mailto:age [2017/04/22(土) 19:32:05.28] bashのブレース展開ですが、変数使う方法を教えてください。 x={0..255} for y in $x do ... done をやりたいのです。
100 名前:名無しさん@お腹いっぱい。 mailto:sage [2017/04/22(土) 19:39:15.88 ID:Sfic7payr] 自己解決しました。 お世話になりました。