トップページunix
1001コメント289KB

シェルスクリプト総合 その20

■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。2012/06/08(金) 00:35:51.19
シェルスクリプトの総合スレです。
スクリプトのお勉強・自慢・腕試しなどにどうぞ。

□お約束
・特記なき場合はBourne Shell(/bin/sh)がデフォルトです。
 bash/zsh/ksh/ashなどに依存する場合は明示しましょう。
 Linuxユーザは/bin/shの正体がbashなので特に注意。
 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でそれらしい単語による簡単な検索もできます。
・シェルスクリプトのことをシェルってゆーな
・シェルで使えるワイルドカード等は正規表現ではありません。
 正規表現の話題はスレ違い(正規表現スレへ)

□初心者へのアドバイス:
・適した道具を判断するのも頭の重要な使い方。シェルスクリプトよりも
 RubyやPerlの方が適した仕事には素直にそちらを使いましょう。
・知らないコマンドが出てきたらmanを引きましょう。
・思い通りに動かないときは、まずは sh -x でトレースしましょう。

前スレ
シェルスクリプト総合 その19
http://toro.2ch.net/test/read.cgi/unix/1323515200/
0002名無しさん@お腹いっぱい。2012/06/08(金) 01:03:54.93
太古の昔に
レイヤードシェル
もしくは
シェルレイヤー
という物が存在していたらしいのですが、
どんな物だったのでしょうか?
ジョブコントロールできるらしいのですが。
0003名無しさん@お腹いっぱい。2012/06/08(金) 02:06:15.15
おつ
0004名無しさん@お腹いっぱい。2012/06/08(金) 02:15:08.82
UNIXとかいう糞PCwwwwwww京とかいう存在しても価値ないただただ無意味に速度早くしただけのコンピューターとかもあるしww

何のための板だよここwww
0005名無しさん@お腹いっぱい。2012/06/08(金) 06:17:43.38
ようこそ、その糞みたいな板にワザワザご苦労様。
0006名無しさん@お腹いっぱい。2012/06/08(金) 06:33:16.03
Q. シェルは UNIX の勉強に使えますか?
A. シェルは UNIX に慣れた人間がスクリプトを書いて楽するのには向いていますが、
  UNIX の勉強には向いていません。
0007名無しさん@お腹いっぱい。2012/06/08(金) 07:20:45.00
>>6
頭大丈夫か?
シェルを全く使用せずにUNIXの勉強とか、どんなアクロバットだよw
0008名無しさん@お腹いっぱい。2012/06/08(金) 07:44:41.28
>>2
GNUScreenから画面管理を引いたようなもの。
0009名無しさん@お腹いっぱい。2012/06/08(金) 07:58:45.93
>>6
つまり座学で基礎理論を学んでから出直せってこと?
0010名無しさん@お腹いっぱい。2012/06/08(金) 09:38:32.41
>>2
衣服(shell)の重ね着(layered)のことだろ。
登山なんかでは速乾性の下着から防水防風透湿のジャケットまで
機能の異なる薄手のシェルを何枚も重ねて着るのが常識。
0011名無しさん@お腹いっぱい。2012/06/08(金) 09:49:49.84
>>2 shl BSDのジョブコントロールのSysV版
http://docstore.mik.ua/orelly/unix/unixnut/c02_191.htm
http://www.unix.com/man-page/All/1/shl/
http://cai.cs.shinshu-u.ac.jp/sugsi/Lecture/HowToUnix/3-1.html
0012名無しさん@お腹いっぱい。2012/06/08(金) 09:55:28.15
>>8が端的に説明できてる。ただscreen知らないとわからない。
0013名無しさん@お腹いっぱい。2012/06/08(金) 16:51:20.05
シェルといえば、ガソスタだろ?または、>>10だな。常識。
... なる程、shlか。知らなかった。sh -kといい、まさにトリビア級。すごい。
0014 忍法帖【Lv=40,xxxPT】 2012/06/09(土) 13:44:28.09
grepで取り出した10行のうちの2行目を取り出したいのですが、
何か簡便な方法はありませんか?
0015名無しさん@お腹いっぱい。2012/06/09(土) 13:48:39.99
sed -n 2p
0016名無しさん@お腹いっぱい。2012/06/09(土) 13:48:53.77
>>14
素人は grep 〜 | head -n 2 | tail -n 1 なんてするところだろうな

Cで2行目取り出すツールを書くのが最速
fgetc()とかで何とかなる
0017名無しさん@お腹いっぱい。2012/06/09(土) 13:53:34.23
>>14
grep -A1
でいいじゃん。

一致した行自体も出るけど、エスパーするとむしろその方がいいと出てる。
0018名無しさん@お腹いっぱい。2012/06/09(土) 13:57:44.31
>>17
それは一致した行の次の行を取り出したい場合だろw 欲嫁
0019名無しさん@お腹いっぱい。2012/06/09(土) 14:01:37.89
なぜにfgetsじゃなくてfgetc?
0020名無しさん@お腹いっぱい。2012/06/09(土) 14:07:19.90
…などとデバッグしてるぐらいなら head -n 2 | tail -n 1 の方がずっと早いな。
まあ、ふつーはそれすらせずに>>15だが。
0021名無しさん@お腹いっぱい。2012/06/09(土) 14:18:33.49
「grepで引っかかる行が10行あります。これら10行それぞれの次の行(2行目)を
取り出したいのですが、何か簡便な方法はありませんか?」

という質問だったとしたら?
0022名無しさん@お腹いっぱい。2012/06/09(土) 14:18:49.34
効率的には grep -m2 〜 | tail -n1 とかの方がいいのかね
0023名無しさん@お腹いっぱい。2012/06/09(土) 17:31:36.34
>>16
あんまり釣れないね。
0024名無しさん@お腹いっぱい。2012/06/09(土) 21:38:41.95
質問がわかりにくくて済みません。実は >>21 さんの意味で質問しました。
何か簡便な方法がありましたらお願いします。
0025名無しさん@お腹いっぱい。2012/06/09(土) 21:46:40.88
>>24
次の行も欲しいってのなら>>17の言うとおり-Aオプション使うのが簡単じゃないかな
次の行だけ欲しいってのならgrep 〜 | sed -n '/pattern/{n;p}' とか。まあこれは2行連続でパターンマッチする可能性がある場合は使えないんだけど。
あとはawkかperlあたりで適当なスクリプト組むくらいかねえ
0026252012/06/09(土) 21:49:49.12
しまった >>25 は grep 必要なかった
0027名無しさん@お腹いっぱい。2012/06/10(日) 05:16:55.25
環境変数IFSってforとread以外に使い道あるのかしら
0028名無しさん@お腹いっぱい。2012/06/10(日) 14:21:25.03
コマンドを実行した複数行の結果を変数に格納した後、その各行に処理を行いたいのですが、
たとえば
hoge=`ls -l`
とやると、改行が格納されません。
改行を含めた結果を格納するのはどのようにしたら良いのでしょうか?
0029名無しさん@お腹いっぱい。2012/06/10(日) 14:32:53.34
>>28
hoge=`ls -l` で改行は格納される。

echo $hoge ではなく、

echo "$hoge"
で変数の値を取り出すこと。
0030名無しさん@お腹いっぱい。2012/06/10(日) 14:43:07.38
早速の回答、誠にありがとうございまする
0031名無しさん@お腹いっぱい。2012/06/12(火) 18:12:34.43
ls -1 | nohup xargs -L1 -P20 -I@ sh -c "./a.out @ < @.txt > @.log 2> err.log" > progress.log &
このコマンドどこに問題がありますか?
最初の20行分しか処理されずに止まっちゃうんだけど・・・泣
0032名無しさん@お腹いっぱい。2012/06/12(火) 18:19:37.78
expectコマンドを使わずにシェルスクリプトでパスワードを自動入力させるにはどのようにすればよいでしょうか?

#!/bin/bash
ssh user@hostname
パスワードを入力するコマンド

上記のようなスクリプトが作りたいです。
どなたか教えて頂けないでしょうか。よろしくお願いします。
0033名無しさん@お腹いっぱい。2012/06/12(火) 18:34:26.09
>>32
echo unko | ssh user@hostname
■ このスレッドは過去ログ倉庫に格納されています