シェルスクリプト総合 その24©5ch.net
■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。 転載ダメ©2ch.net
2014/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/
0564名無しさん@お腹いっぱい。
2015/05/14(木) 21:13:48.75気持ちの想像すらできないなんて言われるんですよ。
0565名無しさん@お腹いっぱい。
2015/05/14(木) 21:20:34.11なんか壮大な勘違いをしてるようだから言っとくけど
お前かなり性格悪そうに見えてるぞ
0566名無しさん@お腹いっぱい。
2015/05/14(木) 21:25:29.940567名無しさん@お腹いっぱい。
2015/05/15(金) 06:21:18.71echo $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.050569名無しさん@お腹いっぱい。
2015/05/15(金) 08:03:24.42IMAPもPOP3も普通に使える
0570名無しさん@お腹いっぱい。
2015/05/15(金) 08:50:33.60b () (a=A;echo $a)
0571名無しさん@お腹いっぱい。
2015/05/15(金) 11:06:13.53あのコマンドはああするべきだったとか思うことはあるけど
曲がりなりにも期待した動作はしてたから問題ないと思い直した
0572名無しさん@お腹いっぱい。
2015/05/15(金) 13:23:55.72そう。そこに違いがある事が言いたかった。
0573隼人新聞社
2015/05/15(金) 17:26:05.10★民主 枝 野 は殺人を平気で行う極左テロ暴力団と親密交際があった!!!親密交際!テロの手先!北朝鮮の手先(安倍総理の談話)
★ 菅 直 人 は朝鮮人と親密交際、献金があった!!朝鮮韓国の傀儡手先(TVで報道!)
★民主は日教組の巣窟。極めて危険な団体、危険な政権だった!北朝鮮を熱烈に支援するのが日教組(信頼できる情報スジの話)!!北朝鮮の手先!
民主の基本姿勢は死刑廃止!!だから自民の安倍総理を支援してください!
サヨクと公明創価を応援するは地獄行き
サヨクを応援して1票入れた人は反省してください
0574名無しさん@お腹いっぱい。
2015/05/16(土) 18:18:52.70何らかの方法で次のコマンドに行かせる方法はありますか?
0575名無しさん@お腹いっぱい。
2015/05/16(土) 18:38:27.01tclだとexpect
ただ単純な事なら
command<<EOF
y
y
n
EOF
とかこんなんで処理できるよ。
0576名無しさん@お腹いっぱい。
2015/05/16(土) 18:41:48.45plamolinuxのこじま氏の2015/1/8の日記に少し使い方が書いてある。
0578名無しさん@お腹いっぱい。
2015/05/17(日) 18:06:01.98最近は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の中で実行させてやるか
どれが効率的で高速に実行することができるようになるんだろう?
コマンドの呼び出しや実行や終了の重複を考えるとどうなんだろう?
シェルスクリプトを自分で書けるようになってきて、こんな疑問を持つようになりました
皆さんの意見を聞かせて下さい
0580名無しさん@お腹いっぱい。
2015/05/19(火) 17:45:28.31for/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みたいなことをbusyboxに内包された汎用コマンドだけでやるには、どうしたらいい?
決められたディレクトリの中に、リサイズしたいjpg画像群があって、
処理済みかどうかを条件分岐したかったんだけど、時間が無くて別のツールで
間に合わせてしまった。再びやりたくて調べてみたけど、実装事例を見つけられず。
0584名無しさん@お腹いっぱい。
2015/05/19(火) 22:48:04.62ちなみにシェルスクリプトでやるならlsでリスト作って
ループしながら処理すればいいと思う
処理済はどこかのファイルにファイル名を書き出して
ループでの処理前にその中にファイルがあるかどうかgrepなどで見て
無ければ処理すればいい
あとなんとなく579=583臭がするけど気のせいか
0585名無しさん@お腹いっぱい。
2015/05/19(火) 22:58:05.98ちなみに同一人物じゃないよ。
0586名無しさん@お腹いっぱい。
2015/05/20(水) 11:34:26.93ドツボにはまりかけてました
d
>>584
妄想、乙
0587名無しさん@お腹いっぱい。
2015/05/20(水) 13:31:28.020588名無しさん@お腹いっぱい。
2015/05/20(水) 17:55:29.750589名無しさん@お腹いっぱい。
2015/05/20(水) 18:12:52.71何言いたいか曖昧な事にまともに答えてくれた人に感謝する事だね。
私は何も答えなかったよ。それこそ妄想、乙と感じたしね。
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[ HOGE -gt 123 ]
は、
((HOGE > 123))
とも記述できますよね? なら -gt の必要性はあるのでしょうか?
0596名無しさん@お腹いっぱい。
2015/05/21(木) 10:47:36.25一体どういう書式のどんな結果をどうやって受け取っているのか、参考までに見せて欲しい。
0597名無しさん@お腹いっぱい。
2015/05/21(木) 13:10:57.30前者はbourne shellから使える一般的な方法
後者は一部のシェルの拡張機能で、使えない場合がある。
使えるならどっちでもいい。上で出てたbusyboxのshだと使えないんじゃないかな多分
0598名無しさん@お腹いっぱい。
2015/05/21(木) 15:22:40.17数値比較だから16進や8進表現が使える
0599名無しさん@お腹いっぱい。
2015/05/21(木) 16:10:57.08-gt の利点として??
0600名無しさん@お腹いっぱい。
2015/05/21(木) 16:34:31.27数値比較と文字列比較で機能が異なるので
比べるものじゃない
0601名無しさん@お腹いっぱい。
2015/05/21(木) 17:02:11.380602名無しさん@お腹いっぱい。
2015/05/21(木) 17:12:42.960603名無しさん@お腹いっぱい。
2015/05/21(木) 22:58:30.82いくら?
0604名無しさん@お腹いっぱい。
2015/05/22(金) 10:22:56.55はなから見せろとか無いわ〜
0605名無しさん@お腹いっぱい。
2015/05/22(金) 11:00:25.39curl
ほい
0606名無しさん@お腹いっぱい。
2015/05/22(金) 11:11:39.200607名無しさん@お腹いっぱい。
2015/05/22(金) 11:19:33.89ドキュメント読んで出直してこい
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そこまでして欲しいのかwww
頭が無いなら金を払えよ
0610名無しさん@お腹いっぱい。
2015/05/22(金) 11:41:25.48>>606
0611名無しさん@お腹いっぱい。
2015/05/22(金) 11:52:29.570612名無しさん@お腹いっぱい。
2015/05/22(金) 12:14:11.320613名無しさん@お腹いっぱい。
2015/05/22(金) 12:15:28.97>>606
0614名無しさん@お腹いっぱい。
2015/05/23(土) 00:45:24.32そら違うだろ
回答してくれる気のある方のみレスしてくださいだろ
0615名無しさん@お腹いっぱい。
2015/05/23(土) 07:23:22.410616名無しさん@お腹いっぱい。
2015/05/23(土) 07:57:47.770617名無しさん@お腹いっぱい。
2015/05/23(土) 09:04:23.16自分では回答しているつもりになっている半可通が居るからじゃないの?
>>525とかは回答なんだろうけど、回答者からは質問者だと錯覚されるから回答がこなくなる。
0618名無しさん@お腹いっぱい。
2015/05/23(土) 09:53:03.52相当な意気込みで実装したいらしいな
いじってやるからまた書き込みなよ
0619名無しさん@お腹いっぱい。
2015/05/23(土) 11:20:44.870620名無しさん@お腹いっぱい。
2015/05/23(土) 11:26:14.780621名無しさん@お腹いっぱい。
2015/05/23(土) 11:31:28.73それが正当な対価だろう。
0622名無しさん@お腹いっぱい。
2015/05/23(土) 12:58:15.22「できましたー!!」←これが対価なの?
馬鹿にしてるの?
0623名無しさん@お腹いっぱい。
2015/05/23(土) 14:47:50.850624名無しさん@お腹いっぱい。
2015/05/23(土) 14:55:03.12シェルスクリプトじゃないとダメです。
繰り返しますがわかる方のみ回答してください。
わからない方は技術力がないと同一ですので(認めたくないでしょうけど)、
素直に黙るのが賢明です。
0625名無しさん@お腹いっぱい。
2015/05/23(土) 15:29:15.99極小ならアセンブラだろ
0626名無しさん@お腹いっぱい。
2015/05/23(土) 15:32:43.77まあこれぶっちゃけ200万レベルの仕事だね
0627名無しさん@お腹いっぱい。
2015/05/23(土) 15:50:06.27繰り返しますがわかる方のみ回答してください。
0628名無しさん@お腹いっぱい。
2015/05/23(土) 15:58:55.20シェルスクリプトで暗号通貨のウォレットでも作れば?
0629名無しさん@お腹いっぱい。
2015/05/23(土) 16:04:25.94すみませんが質問にだけ回答してください。
0630名無しさん@お腹いっぱい。
2015/05/23(土) 16:39:09.770631名無しさん@お腹いっぱい。
2015/05/23(土) 16:52:36.760632名無しさん@お腹いっぱい。
2015/05/23(土) 17:05:15.19回答者以外はご遠慮下さい。
0633名無しさん@お腹いっぱい。
2015/05/23(土) 17:07:20.51趣味で遊んでるアナタ方とは違うんです。
0634名無しさん@お腹いっぱい。
2015/05/23(土) 17:09:47.010635名無しさん@お腹いっぱい。
2015/05/23(土) 17:43:32.850636名無しさん@お腹いっぱい。
2015/05/23(土) 17:56:45.030637名無しさん@お腹いっぱい。
2015/05/23(土) 18:22:50.650638名無しさん@お腹いっぱい。
2015/05/23(土) 18:27:23.08仕事=力×距離
ネタぐらい正しく書こうね
0639名無しさん@お腹いっぱい。
2015/05/23(土) 18:57:31.97仕事=速度²×質量
だろ
0640名無しさん@お腹いっぱい。
2015/05/23(土) 19:02:04.07仕事=電圧×電流×時間
0641名無しさん@お腹いっぱい。
2015/05/24(日) 08:36:07.430642名無しさん@お腹いっぱい。
2015/05/24(日) 09:10:55.860643名無しさん@お腹いっぱい。
2015/05/24(日) 09:16:37.720644名無しさん@お腹いっぱい。
2015/05/24(日) 09:43:16.720645名無しさん@お腹いっぱい。
2015/05/24(日) 11:40:16.08もういいんじゃない?
0646名無しさん@お腹いっぱい。
2015/05/24(日) 11:47:41.070647名無しさん@お腹いっぱい。
2015/05/24(日) 13:06:10.390648名無しさん@お腹いっぱい。
2015/05/24(日) 13:18:01.71趣味で遊んでるアナタ方とは違うんです。
0649名無しさん@お腹いっぱい。
2015/05/24(日) 13:29:57.130650名無しさん@お腹いっぱい。
2015/05/24(日) 18:19:02.96cd //
ってやったら、エラーにならずに、pwdが//になったw
どこにいたんだ?ww
0651名無しさん@お腹いっぱい。
2015/05/24(日) 18:24:05.92そんなとこにも移動できるのか
0652名無しさん@お腹いっぱい。
2015/05/24(日) 18:58:32.27bashの仕様です。今ごろ気が付いたの?
0653名無しさん@お腹いっぱい。
2015/05/24(日) 21:43:39.350654名無しさん@お腹いっぱい。
2015/05/25(月) 12:23:11.70というよりは、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.430656名無しさん@お腹いっぱい。
2015/05/25(月) 14:37:48.450657名無しさん@お腹いっぱい。
2015/05/25(月) 16:59:21.87pwdで//が二つ出るのはbashやdashの仕様だよ。
zsh rc tclsh tcshどれも/だよ。
0658名無しさん@お腹いっぱい。
2015/05/25(月) 19:39:52.690659名無しさん@お腹いっぱい。
2015/05/25(月) 20:31:48.30コマンドライン引数の数字を順番に四則演算するシェルプログラミングを
作りたいのですが、うまくいきません。
演算の順番は+(加算)−(減算)*(乗算)/(除算)です。
#!/bin/sh
total=0
a=("$@")
n=${#a[@]}
n=$((n - 1))
while [ $n -ge 0];
do
total=$((a[$n] + $total))
n=$((n-1))
done
echo "total = $total"
自分でできたのはコマンド引数を加算のみ繰り返す処理です。
もしよい解決方法がおありでしたらご教授お願いします。
0660名無しさん@お腹いっぱい。
2015/05/25(月) 21:12:27.930661659
2015/05/25(月) 21:36:30.45教本に応えが載ってなくて、序盤のページで行き詰ってしまいました。
0662名無しさん@お腹いっぱい。
2015/05/25(月) 21:46:27.07total=0
r=0
until test $#@ -eq 0
do
case $(( r % 4 == 0 ? 1 : (r + 3) % 4 == 0 ? 2 : (r + 2) % 2 == 0 ? 3 : 4 )) in
1) total=$(( total + $1 ));;
2) total=$(( total - $1 ));;
3) total=$(( total * $1 ));;
4) total=$(( total / $1 ));;
esac
shift
(( ++r ))
done
0663名無しさん@お腹いっぱい。
2015/05/25(月) 21:53:31.12r=0
until test $# -eq 0
do
case $(( r % 4 == 0 ? 1 : (r + 3) % 4 == 0 ? 2 : (r + 2) % 2 == 0 ? 3 : 4 )) in
1) total=$(( total + $1 ));;
2) total=$(( total - $1 ));;
3) total=$(( total * $1 ));;
4) total=$(( total / $1 ));;
esac
shift
(( ++r ))
done
■ このスレッドは過去ログ倉庫に格納されています