トップページ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/
0556名無しさん@お腹いっぱい。2015/05/14(木) 14:08:51.71
違いを聞くのは別に似てるからじゃないと思うぞ。
単にとある使い方では等価に思えたってだけだろう。
重箱の隅が知りたいみたいな話だな。
0557名無しさん@お腹いっぱい。2015/05/14(木) 14:28:51.82
どう勘違いしたらコマンド置換とシェル関数が等価に思えるような使い方があるんだ??
0558名無しさん@お腹いっぱい。2015/05/14(木) 14:47:51.26
ageてる人が等価に思えるような話だろう。
0559名無しさん@お腹いっぱい。2015/05/14(木) 18:12:58.96
おっしゃる通り、使い方が同じに見えたので
どんな使い分けをしたらいいのだろうと思っていました
0560名無しさん@お腹いっぱい。2015/05/14(木) 19:43:10.96
>>556
いや、その気持ちが分かるなら答えてやれよ。
さっぱり分からん人間には答えようがないんだから。
0561名無しさん@お腹いっぱい。2015/05/14(木) 20:08:14.55
使い分けとか考えなくていいんじゃないの?
期待通りの動作をしない場合がないのかだけ考えれば。
0562名無しさん@お腹いっぱい。2015/05/14(木) 20:38:06.69
>>560
わからなきゃ聞くしかなかろ。
気持ちの想像すらできなければ回答役なんて荷が重いから
黙って見守るべきだと思う。
0563名無しさん@お腹いっぱい。2015/05/14(木) 20:54:02.91
>>562
は?だからお前が適任だろ?って話をしてるんだが?
さてはお前どえらい馬鹿だな?
0564名無しさん@お腹いっぱい。2015/05/14(木) 21:13:48.75
聞こうとしている時にそんな暴言を言うから
気持ちの想像すらできないなんて言われるんですよ。
0565名無しさん@お腹いっぱい。2015/05/14(木) 21:20:34.11
>>564
なんか壮大な勘違いをしてるようだから言っとくけど
お前かなり性格悪そうに見えてるぞ
0566名無しさん@お腹いっぱい。2015/05/14(木) 21:25:29.94
>>561以外になにか言う事でもあるの?
0567名無しさん@お腹いっぱい。2015/05/15(金) 06:21:18.71
echo $(a=A;echo $a)
echo $a

b () {a=A;echo $a;}
b
echo $a

unset a

(a=A)
echo $a

a=A
echo $a

unset a

# 以下zsh。
() {typeset a=A;}
echo $a
() {a=A;}
echo $a
0568名無しさん@お腹いっぱい。2015/05/15(金) 07:08:32.05
色々言ってたけど結局メールチェックは誰も試してないの?
0569名無しさん@お腹いっぱい。2015/05/15(金) 08:03:24.42
curlでやってるよ
IMAPもPOP3も普通に使える
0570名無しさん@お腹いっぱい。2015/05/15(金) 08:50:33.60
./test.sh: 行 5: 予期しないトークン `{a=A' 周辺に構文エラーがあります

b () (a=A;echo $a)
0571名無しさん@お腹いっぱい。2015/05/15(金) 11:06:13.53
ここ見てると昔書いたスクリプトについて
あのコマンドはああするべきだったとか思うことはあるけど
曲がりなりにも期待した動作はしてたから問題ないと思い直した
0572名無しさん@お腹いっぱい。2015/05/15(金) 13:23:55.72
>>570
そう。そこに違いがある事が言いたかった。
0573隼人新聞社2015/05/15(金) 17:26:05.10
★サヨクを応援して1票入れた人は強く反省してください

★民主 枝 野 は殺人を平気で行う極左テロ暴力団と親密交際があった!!!親密交際!テロの手先!北朝鮮の手先(安倍総理の談話)

★   菅 直 人 は朝鮮人と親密交際、献金があった!!朝鮮韓国の傀儡手先(TVで報道!)

★民主は日教組の巣窟。極めて危険な団体、危険な政権だった!北朝鮮を熱烈に支援するのが日教組(信頼できる情報スジの話)!!北朝鮮の手先!

民主の基本姿勢は死刑廃止!!だから自民の安倍総理を支援してください!

サヨクと公明創価を応援するは地獄行き

サヨクを応援して1票入れた人は反省してください
0574名無しさん@お腹いっぱい。2015/05/16(土) 18:18:52.70
キー入力を受け付けを待って止まっているコマンドを
何らかの方法で次のコマンドに行かせる方法はありますか?
0575名無しさん@お腹いっぱい。2015/05/16(土) 18:38:27.01
zshだとzpty
tclだとexpect
ただ単純な事なら
command<<EOF
y
y
n
EOF
とかこんなんで処理できるよ。
0576名無しさん@お腹いっぱい。2015/05/16(土) 18:41:48.45
マウスつかってどうのこうのの話なら、xdotoolとかいうのが使えそう。
plamolinuxのこじま氏の2015/1/8の日記に少し使い方が書いてある。
0577名無しさん@お腹いっぱい。2015/05/17(日) 09:38:15.41
>>575, >>576
ありがとう
早速、調べてみます
今までできないものと思って諦めていたから感動
0578名無しさん@お腹いっぱい。2015/05/17(日) 18:06:01.98
freebsdのスレッドの人なのかなと思ったので以下でできたよ。詳しい事は知らない。
最近はbashのほうが強力なのかもしれないし、おそらく似た機能はあると思う。
ただexpectが定番だと思う。ただ構文はtclだけど、
たぶん他のshellを使うのって嫌な部分があるだろうし。

# まず以下のpasswordの部分を書いて、試して、感じる。
expect -c '
spawn su
expect Password:
send "your password\r"
interact
'

# passwordとpromptの指定の部分を書換える必要があると思う。
expect -c '
spawn su ;# expectで制御できるようにsuを起動する。
expect Password: ;# promptにPassword:が来るまで待機。
send "your password\r" ;# 来たら引数で指定されたpasswordを入力する。
expect -re {(%|#|\\$) $} ;# Password:が来るまで待機になってたものを、
;# promptの入力受け付け画面に変える。
;# -reは正規表現。ここはmanpageそのまま写しました。
;# 各々によって変える必要があるでしょう。

send "whoami\r"
send "exit\r"
expect eof
'
0579名無しさん@お腹いっぱい。2015/05/19(火) 17:38:24.79
forやwhileとかの中でコマンドを実行するとき
そのコマンドをforやwhileに直接書いて実行させるか
変数扱いさせてのforやwhile上にコマンドを書いて実行させるか
関数として定義してやってforやwhileの中で実行させてやるか
どれが効率的で高速に実行することができるようになるんだろう?
コマンドの呼び出しや実行や終了の重複を考えるとどうなんだろう?
シェルスクリプトを自分で書けるようになってきて、こんな疑問を持つようになりました
皆さんの意見を聞かせて下さい
0580名無しさん@お腹いっぱい。2015/05/19(火) 17:45:28.31
高速っていうなら直接コマンド記述が高速。
for/whileループであっても、ループ内をキャッシュしたりせず、
毎回コマンド行とか変数とか関数を評価し直しながら実行してる。
しかしシェルスクリプトに高速性なんて求めてはいけない。
0581名無しさん@お腹いっぱい。2015/05/19(火) 20:08:13.54
そもそも高速化ってそういう事じゃないしな。
何回そのプログラムを実行すれば、そんな間違った高速化の為に費した時間を取り戻せると思う?
0582名無しさん@お腹いっぱい。2015/05/19(火) 21:29:44.56
高速化したいならプログラム書くしかない
プロセスを起動するコストは莫大だから
0583名無しさん@お腹いっぱい。2015/05/19(火) 21:54:05.59
iniファイルを読み書きして、ファイル名をキーにしてすでに処理済みのファイルかどうかを条件判定、
みたいなことをbusyboxに内包された汎用コマンドだけでやるには、どうしたらいい?

決められたディレクトリの中に、リサイズしたいjpg画像群があって、
処理済みかどうかを条件分岐したかったんだけど、時間が無くて別のツールで
間に合わせてしまった。再びやりたくて調べてみたけど、実装事例を見つけられず。
0584名無しさん@お腹いっぱい。2015/05/19(火) 22:48:04.62
busyboxでやりたいならそちらでどうぞ

ちなみにシェルスクリプトでやるならlsでリスト作って
ループしながら処理すればいいと思う
処理済はどこかのファイルにファイル名を書き出して
ループでの処理前にその中にファイルがあるかどうかgrepなどで見て
無ければ処理すればいい

あとなんとなく579=583臭がするけど気のせいか
0585名無しさん@お腹いっぱい。2015/05/19(火) 22:58:05.98
ありがと。大きなヒントをもらえたので、作ってみる。

ちなみに同一人物じゃないよ。
0586名無しさん@お腹いっぱい。2015/05/20(水) 11:34:26.93
>>581, >>582
ドツボにはまりかけてました
d

>>584
妄想、乙
0587名無しさん@お腹いっぱい。2015/05/20(水) 13:31:28.02
なんだコイツ
0588名無しさん@お腹いっぱい。2015/05/20(水) 17:55:29.75
よう、ネット番長
0589名無しさん@お腹いっぱい。2015/05/20(水) 18:12:52.71
こんな>>579
何言いたいか曖昧な事にまともに答えてくれた人に感謝する事だね。
私は何も答えなかったよ。それこそ妄想、乙と感じたしね。
0590名無しさん@お腹いっぱい。2015/05/20(水) 18:24:21.97
× 答えなかった
○ 答えられなかった(コミュ能力不足)
0591名無しさん@お腹いっぱい。2015/05/20(水) 18:27:39.23
まぁある意味答えられなかったとは言えるな。
認めよう。
0592名無しさん@お腹いっぱい。2015/05/20(水) 18:33:19.73
少なくとも、ほかの人はある程度の要求仕様をくみ取るところまでは出来たわけだから、
コミュ能力であることは明白。キミさー、これじゃ仕事できないよ。
0593名無しさん@お腹いっぱい。2015/05/20(水) 18:38:02.12
そうだねバファリンの半分が優しさでできているのだとしたら、
彼等は九割方優しさで出来てるといえるね。
0594名無しさん@お腹いっぱい。2015/05/20(水) 19:11:05.53
追っ払っといた。以降スルーで。
あいつはおたくらが汚いレスする値打ちも無い。だからこそ俺の様な男がいるのさ。
0595名無しさん@お腹いっぱい。2015/05/21(木) 06:15:13.14
-gt の利点について教えてください。
[ HOGE -gt 123 ]
は、
((HOGE > 123))
とも記述できますよね? なら -gt の必要性はあるのでしょうか?
0596名無しさん@お腹いっぱい。2015/05/21(木) 10:47:36.25
>>569
一体どういう書式のどんな結果をどうやって受け取っているのか、参考までに見せて欲しい。
0597名無しさん@お腹いっぱい。2015/05/21(木) 13:10:57.30
>>595
前者はbourne shellから使える一般的な方法
後者は一部のシェルの拡張機能で、使えない場合がある。
使えるならどっちでもいい。上で出てたbusyboxのshだと使えないんじゃないかな多分
0598名無しさん@お腹いっぱい。2015/05/21(木) 15:22:40.17
>>595
数値比較だから16進や8進表現が使える
0599名無しさん@お腹いっぱい。2015/05/21(木) 16:10:57.08
>>598
-gt の利点として??
0600名無しさん@お腹いっぱい。2015/05/21(木) 16:34:31.27
利点欠点というより
数値比較と文字列比較で機能が異なるので
比べるものじゃない
0601名無しさん@お腹いっぱい。2015/05/21(木) 17:02:11.38
[ -gt ] も (( > )) も、数値としての比較だが、、
0602名無しさん@お腹いっぱい。2015/05/21(木) 17:12:42.96
ごめ、誤解してたわ
0603名無しさん@お腹いっぱい。2015/05/21(木) 22:58:30.82
>>596
いくら?
0604名無しさん@お腹いっぱい。2015/05/22(金) 10:22:56.55
まず自分なりに作ったサンプル出してからうまくいかないと相談すればいいのに
はなから見せろとか無いわ〜
0605名無しさん@お腹いっぱい。2015/05/22(金) 11:00:25.39
#/bin/sh
curl

ほい
0606名無しさん@お腹いっぱい。2015/05/22(金) 11:11:39.20
すみませんが詳しい方のみ回答をお願いします
0607名無しさん@お腹いっぱい。2015/05/22(金) 11:19:33.89
>>605
ドキュメント読んで出直してこい
0608名無しさん@お腹いっぱい。2015/05/22(金) 11:36:29.05
やだね

(echo USER hoge; echo PASS pass; echo STAT) | nc server 110
0609名無しさん@お腹いっぱい。2015/05/22(金) 11:38:38.49
>>605
そこまでして欲しいのかwww
頭が無いなら金を払えよ
0610名無しさん@お腹いっぱい。2015/05/22(金) 11:41:25.48
>>609
>>606
0611名無しさん@お腹いっぱい。2015/05/22(金) 11:52:29.57
DOC嫁なんて言う奴に限って自分は読んでいないのもよくある話。
0612名無しさん@お腹いっぱい。2015/05/22(金) 12:14:11.32
読むのは質問者で回答者じゃない
0613名無しさん@お腹いっぱい。2015/05/22(金) 12:15:28.97
>>612
>>606
0614名無しさん@お腹いっぱい。2015/05/23(土) 00:45:24.32
>>606
そら違うだろ
回答してくれる気のある方のみレスしてくださいだろ
0615名無しさん@お腹いっぱい。2015/05/23(土) 07:23:22.41
コピペ荒らしにマジレスしてもねぇ
0616名無しさん@お腹いっぱい。2015/05/23(土) 07:57:47.77
利点とかより互換性だけじゃね?
0617名無しさん@お腹いっぱい。2015/05/23(土) 09:04:23.16
>>614
自分では回答しているつもりになっている半可通が居るからじゃないの?
>>525とかは回答なんだろうけど、回答者からは質問者だと錯覚されるから回答がこなくなる。
0618名無しさん@お腹いっぱい。2015/05/23(土) 09:53:03.52
100レス近く前の書き込みを引っ張る質問者も
相当な意気込みで実装したいらしいな
いじってやるからまた書き込みなよ
0619名無しさん@お腹いっぱい。2015/05/23(土) 11:20:44.87
ほら居るし。
0620名無しさん@お腹いっぱい。2015/05/23(土) 11:26:14.78
これだけの時間があればCででも実装できたろうにw
0621名無しさん@お腹いっぱい。2015/05/23(土) 11:31:28.73
教えてやるから結果を見せろというべきだな。
それが正当な対価だろう。
0622名無しさん@お腹いっぱい。2015/05/23(土) 12:58:15.22
他人の結果に興味はないだろ普通。
「できましたー!!」←これが対価なの?
馬鹿にしてるの?
0623名無しさん@お腹いっぱい。2015/05/23(土) 14:47:50.85
興味がないのに口出す訳ないだろう。
0624名無しさん@お腹いっぱい。2015/05/23(土) 14:55:03.12
>>606ですが、ロム容量が極小の組み込み機器に入れる予定で、
シェルスクリプトじゃないとダメです。
繰り返しますがわかる方のみ回答してください。

わからない方は技術力がないと同一ですので(認めたくないでしょうけど)、
素直に黙るのが賢明です。
0625名無しさん@お腹いっぱい。2015/05/23(土) 15:29:15.99
>>624
極小ならアセンブラだろ
0626名無しさん@お腹いっぱい。2015/05/23(土) 15:32:43.77
偽者の>>624は消えろ
まあこれぶっちゃけ200万レベルの仕事だね
0627名無しさん@お腹いっぱい。2015/05/23(土) 15:50:06.27
アセンブラでも構いません。ARMでお願いします。
繰り返しますがわかる方のみ回答してください。
0628名無しさん@お腹いっぱい。2015/05/23(土) 15:58:55.20
>>626
シェルスクリプトで暗号通貨のウォレットでも作れば?
0629名無しさん@お腹いっぱい。2015/05/23(土) 16:04:25.94
それはもうできています。
すみませんが質問にだけ回答してください。
0630名無しさん@お腹いっぱい。2015/05/23(土) 16:39:09.77
できてるならみせてよ
0631名無しさん@お腹いっぱい。2015/05/23(土) 16:52:36.76
繰り返しますがわかる方のみ、質問にだけ回答してください。
0632名無しさん@お腹いっぱい。2015/05/23(土) 17:05:15.19
>>631
回答者以外はご遠慮下さい。
0633名無しさん@お腹いっぱい。2015/05/23(土) 17:07:20.51
こっちは仕事でやってるんです。
趣味で遊んでるアナタ方とは違うんです。
0634名無しさん@お腹いっぱい。2015/05/23(土) 17:09:47.01
そういうネタをやられては困ります。
0635名無しさん@お腹いっぱい。2015/05/23(土) 17:43:32.85
仕事でやってるのにまさかただとは...
0636名無しさん@お腹いっぱい。2015/05/23(土) 17:56:45.03
仕事とかいうネタはやめましょうねボク。
0637名無しさん@お腹いっぱい。2015/05/23(土) 18:22:50.65
仕事=質量×距離
0638名無しさん@お腹いっぱい。2015/05/23(土) 18:27:23.08
>>637
仕事=力×距離

ネタぐらい正しく書こうね
0639名無しさん@お腹いっぱい。2015/05/23(土) 18:57:31.97
>>638
仕事=速度&#178;×質量
だろ
0640名無しさん@お腹いっぱい。2015/05/23(土) 19:02:04.07
電子工学系の者にとっては

仕事=電圧×電流×時間
0641名無しさん@お腹いっぱい。2015/05/24(日) 08:36:07.43
仕事=電界×磁界×断面積×時間
0642名無しさん@お腹いっぱい。2015/05/24(日) 09:10:55.86
金=仕事x時間
0643名無しさん@お腹いっぱい。2015/05/24(日) 09:16:37.72
∂金/∂t = ∇×仕事
0644名無しさん@お腹いっぱい。2015/05/24(日) 09:43:16.72
∇・金=0 (金は湧いてこない)
0645名無しさん@お腹いっぱい。2015/05/24(日) 11:40:16.08
>>637-645
もういいんじゃない?
0646名無しさん@お腹いっぱい。2015/05/24(日) 11:47:41.07
仕事×2ch=解雇
0647名無しさん@お腹いっぱい。2015/05/24(日) 13:06:10.39
シェルスクリプトで計算式記述してみてよ
0648名無しさん@お腹いっぱい。2015/05/24(日) 13:18:01.71
物理量の仕事じゃなくて、こっちは本当の仕事でやってるんです。
趣味で遊んでるアナタ方とは違うんです。
0649名無しさん@お腹いっぱい。2015/05/24(日) 13:29:57.13
まあどうみても>>624は趣味だけどな。
0650名無しさん@お腹いっぱい。2015/05/24(日) 18:19:02.96
まちがって、

cd //

ってやったら、エラーにならずに、pwdが//になったw
どこにいたんだ?ww
0651名無しさん@お腹いっぱい。2015/05/24(日) 18:24:05.92
ネットワークのトップか
そんなとこにも移動できるのか
0652名無しさん@お腹いっぱい。2015/05/24(日) 18:58:32.27
>>650
bashの仕様です。今ごろ気が付いたの?
0653名無しさん@お腹いっぱい。2015/05/24(日) 21:43:39.35
知らなかった
0654名無しさん@お腹いっぱい。2015/05/25(月) 12:23:11.70
> bashの仕様す。
というよりは、POSIX かな

http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap03.html

3.267 Pathname
Multiple successive <slash> characters are considered to be the same as one <slash>,
except for the case of exactly two leading <slash> characters.

4.12 Pathname Resolution
If a pathname begins with two successive <slash> characters, the first component following
the leading <slash> characters may be interpreted in an implementation-defined manner,
although more than two leading <slash> characters shall be treated as a single <slash>
character.
0655名無しさん@お腹いっぱい。2015/05/25(月) 12:36:39.43
英語よめんけどなんか違う
0656名無しさん@お腹いっぱい。2015/05/25(月) 14:37:48.45
知識無いのに 「bashの仕様です。今ごろ気が付いたの?」 とか恥ずかしくないのだろうか
■ このスレッドは過去ログ倉庫に格納されています