シェルスクリプト総合 その26 [無断転載禁止]©2ch.net

■ このスレッドは過去ログ倉庫に格納されています
2017/03/20(月) 12:07:26.41
シェルスクリプトの総合スレです。
□お約束
・特記なき場合は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.illumos.org/source/xref/illumos-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に逃げずにシェルスクリプトで処理するのが頭のいいやり方。
前スレ
シェルスクリプト総合 その25
http://echo.2ch.net/test/read.cgi/unix/1439563321/
2017/04/03(月) 23:41:45.44
ファイルですくりぷた
のうごきをかんがえよう
2017/04/04(火) 00:57:45.30
>>47
考えたらわかったけど、知らなかったから教えない
2017/04/04(火) 01:03:26.09
へんくつなやつしかいねー
2017/04/04(火) 01:11:40.09
シェルとcatがそうなるような実装になってるんだろう
わりと自然な結果だと思う
2017/04/04(火) 11:29:13.28
知らんけど推測で。

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の挙動は知らんかったなぁ。
2017/04/04(火) 12:04:17.27
2 の場合、bash, dash, ksh だと input file is output file って表示される
bash では noclobber を unset にしても同じ
2017/04/04(火) 12:11:59.45
>>53
それはcatの引数が入力ファイルだと言う知識をshellがもってるという事だね
気持ち悪い
2017/04/04(火) 12:16:42.64
これは無限ループにもエラーにもならない

$ cat hoge.txt | cat >> hoge.txt

しかし、ファイルサイズがパイプやプロセスのバッファサイズを
超えるとどうなるか…こんな場合は moreutils の sponge コマンドかな
2017/04/04(火) 12:40:17.25
Cで言う未定義なみたいなもので、どういう結果になろうが客観的な意味は無い
2017/04/04(火) 14:59:59.10
>>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
2017/04/04(火) 16:51:55.21
>>57
ありがとう、GNU cat だからなのね
59名無しさん@お腹いっぱい。
垢版 |
2017/04/13(木) 16:40:20.18
sqlplusでselect文を実行したときにレコードが該当しない場合の値って何が返されるの?
予想だと""なんだけど
2017/04/13(木) 17:33:03.18
>>59
俺は SELECT 結果の行数をカウントして判定してる。

ちなみにシェルスクリプトで sqlplus をカプセル化しようとすると、SQL 実行時のエラーチェックが地味に面倒だよね。
頑張ってね。
61名無しさん@お腹いっぱい。
垢版 |
2017/04/13(木) 17:57:28.60
>>60
count(0)ですねわかります
シェルスクリプトってsqlで取ってきた値がnullのときその値を変数に格納したらどうなんの?
そもそもselect文で該当なしでエラーになるのかもわからん
62名無しさん@お腹いっぱい。
垢版 |
2017/04/13(木) 18:02:46.69
なんでこんなこと聞くのって思うだろうけどprintfで書式指定するときにnullが変えるかもしれない変数を%08d$nで指定してるんだよね
文字列指定してけば良かったんだけど、これって修正必要かなぁ
2017/04/13(木) 18:51:39.93
>>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; みたいに変更すればいいだけじゃね?
2017/04/13(木) 19:01:35.58
確かに一度ファイルに落としてからawkとかに食わせる方が何かと楽そうだな
65名無しさん@お腹いっぱい。
垢版 |
2017/04/14(金) 18:54:35.33
澁谷 恭正 (46歳)

千葉県立沼南高柳高等学校卒

松戸市立六実第二小学校PTA会長

小学女子レイプ殺人で逮捕


お住まい:
千葉県松戸市六実4-8-1 Mシャトレ

お子さん:
ひりゅう、あやか ※父子家庭

趣味傾向:
アニオタ
66名無しさん@お腹いっぱい。
垢版 |
2017/04/14(金) 18:55:56.71
SQL*Plus、PL/SQLに詳しくないからそういう発想になるのはわかるが、普通にやれよ。
67名無しさん@お腹いっぱい。
垢版 |
2017/04/15(土) 15:48:43.00
>>66
普通ってやんだよw
68名無しさん@お腹いっぱい。
垢版 |
2017/04/15(土) 17:42:26.47
シェルとsqlplus触ったの1,2ヶ月だけど、半年後にはおまえ超えてるから
69名無しさん@お腹いっぱい。
垢版 |
2017/04/15(土) 17:43:22.15
シェルなんてゴミ言語勉強するほどでもないけどなw
70名無しさん@お腹いっぱい。
垢版 |
2017/04/15(土) 18:11:52.36
クエリを2度実行するコストよりもってあるけど、コストそんなかからないし、どっちでもよくね。
sqlじたいそんな詳しくなくてすまんな
71名無しさん@お腹いっぱい。
垢版 |
2017/04/15(土) 18:15:32.21
ワンステップでどんだけコストかかる現場にいたのか
72名無しさん@お腹いっぱい。
垢版 |
2017/04/15(土) 18:43:16.43
http://d.hatena.ne.jp/ttduck/touch/20080425/1209339164
同じ事考えてる人がいたのかな、sqlなんてデータを引っ張ってくる手段でしかないからテキトーだったけど
73名無しさん@お腹いっぱい。
垢版 |
2017/04/15(土) 18:53:59.01
これはステップ数大きいけど、たしかおれは2ステップで書いた
74名無しさん@お腹いっぱい。
垢版 |
2017/04/16(日) 03:11:26.19
>>72
なんで例外処理でやらないのか?
基本中の基本だぞ。
75名無しさん@お腹いっぱい。
垢版 |
2017/04/16(日) 13:19:14.99
>>74
だからやってるって話だよ
バカなの
76名無しさん@お腹いっぱい。
垢版 |
2017/04/16(日) 13:20:30.64
シェルでカプセル化とかもわけわからんし、このスレわからんわ
2017/04/17(月) 12:57:10.19
実行ファイルが実はシェルスクリプトだった、なんてことは/usr/binによくあること
2017/04/17(月) 16:49:07.58
$ 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
意外とあるな
2017/04/18(火) 05:15:59.66
historyから所定のコマンドだけ削除するシェルスクリプトってあったりする?
2017/04/18(火) 14:18:08.94
>>79
history
2017/04/18(火) 17:45:32.71
>>80
ほほう -d オプションというものがあるのか……と思ったんだけど、これって bash のみだったりする?
手元の古い tcsh には無いみたい。それとも最近のシェルなら普通に実装されてるのかな。
2017/04/18(火) 18:10:08.46
bash限定
83名無しさん@お腹いっぱい。
垢版 |
2017/04/19(水) 12:00:20.42
>>78
こういうのって、fgrepにIをつけたほうがいいのかな。
2017/04/19(水) 12:04:12.58
file コマンドの結果だから要らないんじゃない
85名無しさん@お腹いっぱい。
垢版 |
2017/04/19(水) 12:41:43.72
>>84
ありがとうございます
昔、binの中等気をつけろと言われた事があったので勘違いしてました
86名無しさん@お腹いっぱい。
垢版 |
2017/04/19(水) 16:28:25.43
>>75
なんでexceptionでno_data_foundを拾わないのか?

カウントしてしまうのは、不慣れなひとがよくやるけど。
87ich1
垢版 |
2017/04/20(木) 18:27:26.09
https://goo.gl/fSbVMj
これは嘘でしょ?本当だと嫌だなー。。
2017/04/20(木) 19:20:34.53
2chで短縮とか
2017/04/20(木) 19:22:58.55
それただのマルチだよ
2017/04/20(木) 21:07:15.56
マルチどころかスクリプトですから
91名無しさん@お腹いっぱい。
垢版 |
2017/04/21(金) 17:16:08.95
>>88
え?
92名無しさん@お腹いっぱい。
垢版 |
2017/04/21(金) 18:35:17.79
この中で過去にシェルを仕事でやってたって人何人くらいいるのかな
2017/04/21(金) 21:31:36.96
自分はインフラ関連やってたよ
今は仕事ではコンソール触ることはなくなったけど
家で動画ダウンロード用のスクリプト組んだりしてる
2017/04/21(金) 21:34:59.83
ちなみに性能情報の収集や監視スクリプト、
バックアップとかの運用シェル作ってたけど
可読性も考えてオーソドックスなプログラミングのような書き方をしてたから
超何かよく分からん使い方をしてるココの人の方がシェルスクリプト知ってると思う
95名無しさん@お腹いっぱい。
垢版 |
2017/04/22(土) 04:52:18.92
>>94
よくわからない書き方してるほうが上手いとも言えないでしょ
96名無しさん@お腹いっぱい。
垢版 |
2017/04/22(土) 04:53:18.13
linuxってちゃんと使いこなせれば快適だよなすごいわかる
2017/04/22(土) 05:55:28.79
>>92
shだけの仕事は数えるほどしかないけど
他の仕事の小道具として毎回のように出てくるな
javaとかwindows系の仕事だと使えなくてめんどくさい
開発ツールとしては使うけど
2017/04/22(土) 17:13:19.84
仕事でシェルスクリプト書くなんて
めずらしくもなんともないよ
99名無しさん@お腹いっぱい。
垢版 |
2017/04/22(土) 19:43:27.62
>>98
めずらしいとは思ってないけどさ、働いてないのかと思った。
何かしら経験ある人もいるのな、仕事で使ってて家でもシェルいじろうとかよく思えるな
2017/04/23(日) 19:09:14.57
>>99
手間とかを省くために使うからプライベートだろうと使うだろう
その発想は使わされてる人のものだと思うぞ
2017/04/23(日) 22:45:17.52
仕事か家かどっちかでしか使っちゃダメなの?
便利なんだからいろんなとこで使ってもいいじゃん
2017/04/24(月) 15:09:28.61
>>99
俺は職場から2ちゃんに書き込んでるだけだよ。
2017/04/24(月) 16:00:30.29
学生でもなくて働いたことも無いならシェルいじろうとは思わないでしょ
104名無しさん@お腹いっぱい。
垢版 |
2017/04/24(月) 16:02:53.74
他紙蟹
わかったからそんなせめんなよごめんなっっ
家でシェル使ってる人ってwindows機は別にあるの?
105名無しさん@お腹いっぱい。
垢版 |
2017/04/24(月) 17:31:59.58
あるよ、自分はWindowsなんて使わないという偏屈ではないしさ
Linuxの実機はラズパイだけであとは仮想環境
まあ他にも色々あるけど実際に使ってる環境ってことならね
>>103を書いたのは嫌気がさして書いたんじゃなくて
目的や知識がないとシェルなんて触る機会もないでしょって意味で書いた
106名無しさん@お腹いっぱい。
垢版 |
2017/04/24(月) 17:49:44.72
ubuntu on the windowsのおまえらの率直な感想が聞きたい
2017/04/24(月) 19:04:22.14
【Bash】Windows Subsystem for Linux【Ubuntu】2©2ch.net
http://hayabusa6.2ch.net/test/read.cgi/linux/1468149353/
2017/04/24(月) 20:27:56.84
>>103
便利なもんなんだから使うだろう
知ってて環境あって使いどころあれば
2017/04/24(月) 20:34:34.47
>>104
windows持ってないです
2017/04/24(月) 22:40:54.70
>>108
そんな向上心があるなら学ぶか働いてるでしょ
2017/04/25(火) 00:10:36.87
>>110
そういう学科の学生かそういう業務の仕事でなくても使う人は使うってことじゃないの
112名無しさん@お腹いっぱい。
垢版 |
2017/04/25(火) 00:43:15.05
>>109
やるじゃんそーゆー振り切ってる感じ好きだぜ
113名無しさん@お腹いっぱい。
垢版 |
2017/04/25(火) 00:49:06.70
>>111
そうは言ってなかったな、シェルなんて職場で使わなきゃやろうと思わないでしょって言ってたよ
114名無しさん@お腹いっぱい。
垢版 |
2017/04/25(火) 00:51:05.94
ぶっちゃけLinuxだけだと不便やねん、だからどっちもいるねん、必須なのはWindowsやねん、結局便利だけどLinuxは無くてもいけるねん
2017/04/25(火) 00:57:32.66
実際Windowsないと公私共に不便だろって思う
2017/04/25(火) 01:15:23.26
>>113
仕事も勉強も関係なくエロ画像収集に使うだろ
初めてはSSIとかCGIだったな
ISPでシェルアカウント付きのとこもあった
やらされてるだけの人には価値はわからんだろうけど
2017/04/25(火) 01:19:30.55
Windowsなくても別に困らないなあ
2017/04/25(火) 05:48:06.67
>>116
VBとかで出来るからね
シェルを使うにはUnix環境が必要で
知識ゼロのニートが自主的にやったってのは知らないなあ
Unix界隈に居る人って性格悪いじゃん?
そんな中で続くとは思えないんだけど

学生か働いてる(働いてた)時に得た知識でやるならわかるけどさ
2017/04/25(火) 06:14:57.29
画像収集ツールって昔からいくつかあるけど
それを使わずにシェルスクリプト使った人が今何してるのか興味あるな

自分はOSもアプリも言語も道具だから何でもいいんだけど
獲得したものを特別なものと思って他人を見下すってのは余裕のない感じがするね
そのあたりがLinuxが流行らなかった理由なんじゃないかと思う
スマホ使ってる人なんてニコニコしながら嫌味無く教えてくれるときあるしw
2017/04/25(火) 06:32:05.73
やらされてるだけの人って嫌味なんだろうけど
ココで答えてくれてる人はそんな人なこと忘れてるよ
失礼な奴だな
2017/04/25(火) 09:39:07.19
シェルスクリプトを作れない人がやっかんでるだけに見えるな

画像収集ツールみたいなことをする場合、Windowsアプリも
cygwonでシェルスクリプト+コマンドのパターンも使う
一方しか出来ない人は時間を損してると思うよ
2017/04/25(火) 09:44:08.16
暇つぶしに聞いただけだろう
現役で職場でシェルスクリプト使う身からすると奇妙な質問には思えるが
これがCOBOLとかなら話分かったけど
123名無しさん@お腹いっぱい。
垢版 |
2017/04/25(火) 10:09:42.40
>>118
Unix界隈の人は性格悪いってま?
2017/04/25(火) 10:21:07.46
どこかのスレで質問してみれば分かるよ
2017/04/25(火) 10:29:48.93
画像収集ツールってWindowsで動く既存アプリがいくつもあるんだよ〜
自分はシェルスクリプトを否定はしていない

でも学んでも働いても無かった人(要するにシェルを使ってなかった人)が
画像収集するためにいきなりシェルを使うとは思えないんだな
シェルスクリプトに行き着くためには
UnixなりりLinuxなりCygwin、BoW、Services for UNIXが必要になるわけであって
画像収集するのに便利って言うのは違和感がある
そういう人が本当に使ってるとして今どのレベルなのかも興味があるね

まだ画像収集レベルなのかな?

まあ別に目的を達せられたら良いんだけどね(で振り出しに戻ると)
2017/04/25(火) 10:31:54.24
ちなみに自分は学んだし仕事でやってたよ
だから実装は楽だしやらせたいことを自動でやらせるためにスクリプト組んでるね
2017/04/25(火) 10:40:20.49
すまん、結局何が言いたいのか分からん
これは単にシェルスクリプト使ってるのを見下したいだけなのか?
2017/04/25(火) 10:46:20.83
自分が使える道具を、使うと何かの目的が達せられるところで使うだけだよ
環境、能力、目的は人によるから想像力の欠如をアピールしてもしょうがない
2017/04/25(火) 11:20:26.09
>>118
CGIやSSIやISPはweb関連だ
wwwの世界はUnixばかりだからな
で何もなかった昔のwwwではCGIの設置改造とか普通
どうやって動いてるのかとか興味を持って調べた奴も多いだろう
つまり趣味で知った奴もいるってことだ

昔はWindowsでもcygwinとかでシェル使ってたけどな
今はないのかな
VBのツールのメンテとかもしてたけどUnixが吐くデータの処理だったからshで置き換えて効率化したな

やらされてる奴に性格悪い奴がいることはわかった
2017/04/25(火) 14:29:24.94
>>129
お前こそ金にならないことやらされてるじゃん
2017/04/25(火) 14:33:19.26
やらされてる連呼クンに触るなよ
2017/04/25(火) 14:38:02.51
なんつうか、こんな話題で長文して結論がそれって
よほど嫌なことあって愚痴りたかったんだろうな
133名無しさん@お腹いっぱい。
垢版 |
2017/04/25(火) 14:42:58.20
>>105
ラズパイってむずい?
2017/04/25(火) 15:04:06.17
>>129
今仕事何やってるの?
2017/04/25(火) 15:04:11.72
>>130
VBのツールの置き換えは仕事だぞ
趣味はお金払ってでもするものだけどな
ただUnixワークステーションとか買えねえよ
2017/04/25(火) 15:05:57.55
>>134
開発
2017/04/25(火) 15:32:19.24
なんだ結局仕事にしたんじゃん
素人でまだ触ってるかと思った
2017/04/25(火) 16:43:11.74
やらされに成り下がっててワロタ
2017/04/25(火) 17:46:11.39
>>137
シェルスクリプトで開発の仕事なんて滅多にないよ
お前は無職?
2017/04/25(火) 17:53:41.95
いやなんで煽るんだよ
お前何しにこのスレ来たんだよ
2017/04/25(火) 17:53:50.03
開発経験者が趣味でシェルスクリプト書くって普通だと思う
てっきり営業とか企画とか別分野の人がシェルスクリプト書いたのかと思った
2017/04/25(火) 18:09:20.39
なぜ普通以外だと予想したのか
2017/04/25(火) 19:25:03.65
俺もまったくの異業種の奴が言ってるのかと思ったよ
>>116とか見るとね
ニートがエロパワーで頑張ったのかと思ったw
2017/04/25(火) 19:42:41.24
アスペか
2017/04/25(火) 20:48:36.96
ハードウェア開発だったからまったくの独学だけどな
2017/04/25(火) 22:28:49.44
バージョン管理とかするだろうし環境作りでUnix使うだろ
どこまで無学なんだよ
2017/04/26(水) 00:06:14.19
ワークステーションとか商用Unix知らないのか無学だな
2017/04/26(水) 01:01:14.37
くだらない話題で申し訳ないんすけど
シェルスクリプトで使う変数の規則とかってどう決めてます?
自分は_HOGEがいいかなって思ってるんですけど、マジョリティはどうかなと(ここがマジョリティかどうかは別だけど)
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況