- 1 名前:名無しさん@お腹いっぱい。 [2008/05/20(火) 20:58:04 ]
- シェルスクリプトの総合スレです。
スクリプトのお勉強・自慢・腕試しなどにどうぞ。 まずは注意点、リンク、地鎮祭など(>>1-6くらい)をご覧ください。 □お約束 ・特記なき場合はBourne Shell(/bin/sh)がデフォルトです。 bash/zsh/ksh/ashなどに依存する場合は明示しましょう。 Linuxユーザは/bin/shの正体がbashなので特に注意。 ・csh/tcshのシェルスクリプトは推奨されません。 (理由は「csh-whynot」でググれ) ・UNIXにはシェルスクリプトに便利な小さなコマンドがいろいろあります。 manや参考リンクを見ましょう。 aproposないしはman -kでそれらしい単語による簡単な検索もできます。 ・シェルスクリプトのことをシェルってゆーな ・シェルで使えるワイルドカード等は正規表現ではありません。 正規表現の話題はスレ違い(正規表現スレへ) □初心者へのアドバイス: ・適した道具を判断するのも頭の重要な使い方。シェルスクリプトよりも RubyやPerlの方が適した仕事には素直にそちらを使いましょう。 ・知らないコマンドが出てきたらmanを引きましょう。 ・思い通りに動かないときは、まずは sh -x でトレースしましょう。 シェルスクリプト総合 その10 pc11.2ch.net/test/read.cgi/unix/1202725267/
- 10 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/21(水) 00:11:21 ]
- >>7
端末(端末エミュレータ)とシェルは別の存在。 あなたは端末エミュレータの中でシェルを動かしているはず。 echo $SHELL
- 11 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/21(水) 00:16:58 ]
- solarisのdfとかduで、サイズをギガ表記にしたいんだけどスクリプトでちょちょいとできないですかね?
- 12 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/21(水) 00:18:21 ]
- solaris10以降は、-hオプションがついてる。
- 13 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/21(水) 00:42:41 ]
- -hがないんですよ
バージョンは失念しました
- 14 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/21(水) 06:46:50 ]
- SolarisのdfってBLOCKSIZEはみないのか?
- 15 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/21(水) 08:37:13 ]
- $(command) 1より `command` が推奨なのってなんで?
- 16 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/21(水) 08:45:55 ]
- SunOSとかNEWS-OSとかでも動くから
- 17 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/21(水) 09:44:41 ]
- 1 が不要だから。
- 18 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/21(水) 11:53:48 ]
- コマンドをパイプで複数実行する際に最初のコマンドでエラーだったら
その後のパイプ以降は実行しないというのは可能ですか?
- 19 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/21(水) 12:17:42 ]
- パイプってのは、あるコマンドを実行してそれが終わったら出力を
次のコマンドに流して、という仕組みではない。 どうしてもそういうことがやりたければパイプを使わない。 commandA > tmpfile.$$ && commandB < tmpfile.$$ # unix ではなく dos のパイプはこういう仕組みだったりする。
- 20 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/21(水) 23:27:43 ]
- シェル用語では、コマンド1個だけでもパイプラインと言う。
パイプライン1(=command1)がエラーなら パイプライン2(=command2)を実行しないのなら、 command1 && command2 でよい。 >>18 は command1 と command2 の標準入出力を、 pipe(2)でつなぐとは言っていないのだから。
- 21 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/21(水) 23:36:39 ]
- こじつければ(形式的には)個々はパイプラインかもしれないが、
「パイプで複数実行」には到底ほど遠いだろう
- 22 名前:名無しさん@お腹いっぱい。 [2008/05/22(木) 21:37:11 ]
- 質問させてください。
a.txtファイルにbbbと言う文字があった場合、その文字を完全に削除するにはどうしたらいいでしょうか? ----- aaa bbb ccc ----- 例えばa.txtの内容が上ようなとき、下のように置換したい。よろしくお願いします。 ----- aaa ccc -----
- 23 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/22(木) 21:46:57 ]
- grep -v bbb a.txt>b.txt
- 24 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/22(木) 22:03:03 ]
- >>23
すみません。それをa.txtに保存したいです。
- 25 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/22(木) 22:13:05 ]
- (rm a.txt; grep -v bbb > a.txt) < a.txt
- 26 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/22(木) 22:42:55 ]
- $ sed -e '/bbb/d' -i '' a.txt
- 27 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/22(木) 22:43:28 ]
- >>25
すみません。iノード番号を変えずに保存したいです。
- 28 名前:22本人です ◆wSaCDPDEl2 mailto:sage [2008/05/22(木) 22:50:27 ]
- >>26
ありがとう!sedでやりたかったです。 でもsedは使えるはずなのにエラーが出てしまいました。 エラー「sed: を読み込めません: そのようなファイルやディレクトリはありません」 バージョンが違うのでしょうか?ちなみにLINUXでやってます。
- 29 名前:22本人です ◆wSaCDPDEl2 mailto:sage [2008/05/22(木) 22:53:42 ]
- あ、できました。
sed -i '/bbb/d' a.txt みなさん初心者にも親切に教えてくれてやさしいですね。 ありがとうございました。
- 30 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/22(木) 23:24:52 ]
- >>29
おいおい、 sed -i '/bbb/d' a.txt だと i-node番号変わるぞ。i-node番号変えちゃ駄目(>>27) じゃないのか?
- 31 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/22(木) 23:30:06 ]
- それは俺の創作だ。正直すまんかった。
- 32 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/22(木) 23:34:24 ]
- >>22 >>27
iノード番号を変えずに a.txtを修正する方法の正解の md5を貼っておくぞ。 25fe9a9dfa4248593f6aa361db01a222 さあ、オマエラ考えてみろ。
- 33 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/23(金) 00:30:59 ]
- cat a.txt > tmp; sed '/bbb/d' tmp > a.txt; rm tmp
- 34 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/23(金) 00:39:56 ]
- なんでiノード番号変わっちゃだめなの?
- 35 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/23(金) 06:44:52 ]
- >>33
一時ファイル作っちゃ駄目
- 36 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/23(金) 06:49:17 ]
- >>34
a.txtが他のファイルとハードリンクしていた場合、 sed -i とかだとハードリンクが切れてしまう。
- 37 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/23(金) 09:35:47 ]
- printf "g/bbb/d\nwq\n" | ed a.txt
- 38 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/23(金) 11:25:56 ]
- >>36
sed -iって、viなんかで編集するのとは違う理屈で動いているってことかな?
- 39 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/23(金) 23:19:47 ]
- GNU sedのソースを見てみたが、inplace編集では、テンポラリファイルを
開いて書き込んだのちリネームしているね。 sed-4.1.5/sed/execute.c:658 (開く方) sed-4.1.5/sed/execute.c:712 (閉じる方)
- 40 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/24(土) 16:21:15 ]
- オーナーを保存できないじゃないか
- 41 名前:名無しさん@お腹いっぱい。 [2008/05/25(日) 08:58:02 ]
- カレントディレクトリに、
hoge-1.22.3.tar.gz hoge-1.23.tar.gz hoge-1.24.1.tar.gz fuga-3.31.1.tar.gz fuga-3.5.4.tar.gz : みたいなソースのtarボールがたくさんあります。 これらのファイルのファイル名を見て、 最新バージョンだけ残して、最新以外のファイルを削除するシェルは どうやったら発行できますか? なお、タイムスタンプは当てにならないので、 あくまでファイル名だけで判断してください。
- 42 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/25(日) 09:09:54 ]
- シェルってゆうな。クズ。
発行ってゆうな。クズ。
- 43 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/25(日) 09:23:44 ]
- 定番の突っ込み乙。で回答は?
- 44 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/25(日) 09:35:44 ]
- >>42
ウチの会社でシェって呼ぶ人もいるよ
- 45 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/25(日) 10:19:39 ]
- >>43
そもそも最新バージョンとそれ以外を同じところに溜めたのが間違い。
- 46 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/25(日) 12:39:54 ]
- パッケージ名の定義、バージョンの新旧の定義をしろ。
- 47 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/25(日) 13:18:17 ]
- >>46
お前自身の定義でいいから答えてみろよw
- 48 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/25(日) 14:06:29 ]
- 断る。
- 49 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/25(日) 15:06:27 ]
- ×断る。
○能力不足のためできない。
- 50 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/25(日) 15:38:11 ]
- 「答えられないなら黙ってろ」というポリシーは変えたのか? www
- 51 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/25(日) 15:54:09 ]
- >>45-46 >>48
答えられないなら黙ってろ
- 52 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/25(日) 17:39:31 ]
- ぽまいら へるぷ!
hoge0501-0000.wav hoge0501-0100.wav hoge0501-0900.wav の複数ファイルをmp3で小さくしたいのですよ hoge0501-0000.wav → hoge0501-0000.mp3 ってか0000の部分を0000のままにしたいのですが… なんかいい知恵を!!! おながいします lameとかgogoの使い方は大丈夫ですw
- 53 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/25(日) 17:51:01 ]
- >>52
infile=hoge0501-0000.wav outfile=`basename $infile .wav`.mp3 あとは lameとかで $infile と $outfile を参照。
- 54 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/25(日) 18:04:34 ]
- >>52 おお、ファイル名そのものを変数としるのね
dクス! さっそくやってみます!!
- 55 名前:便乗炭/びんじょうたん mailto:sage [2008/05/25(日) 22:20:47 ]
- あのぉ〜。。。。。
>>53 を連続で処理するには?
- 56 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/25(日) 22:32:03 ]
- for infile in "$@";do outfile=`basename $infile .wav`.mp3; 変換する ;done
- 57 名前:便乗炭! mailto:sage [2008/05/26(月) 00:17:11 ]
- >>56 ご丁寧にありがとうございます orz szo ヘコヘコ
- 58 名前:名無しさん@お腹いっぱい。 [2008/05/27(火) 18:01:23 ]
- 質問です。
if文で現在起動中のデーモンを確認するにはどうしたらいいでしょうか?
- 59 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/27(火) 18:14:00 ]
- >>58
pc11.2ch.net/test/read.cgi/linux/1211384088/211 の人?
- 60 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/27(火) 18:14:58 ]
- そんな事どうだっていいだろうがカス
- 61 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/27(火) 18:18:01 ]
- 図星かw
- 62 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/27(火) 18:51:36 ]
- >>59 >>61
わからないなら黙ってろ
- 63 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/27(火) 19:07:31 ]
- >>60>>62
君も黙ってなよw 言ってることは同意だけど。
- 64 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/27(火) 19:09:55 ]
- pgrepは戻り値返すよ。
if pgrep hoge; then 何か fi で桶。
- 65 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/27(火) 20:15:40 ]
- >>64
ありがとうございました
- 66 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/27(火) 21:20:30 ]
- >>64
pgrep で確認してるのであって、if で確認してるわけじゃないと思うが。
- 67 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/27(火) 21:34:58 ]
- >>66
本人がいいって言ってるんだから、それがすべて
- 68 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/28(水) 01:35:31 ]
- >>66
Cでも何でも条件で確認して、ifはその結果で分岐するだけだと思うが。
- 69 名前:名無しさん@お腹いっぱい。 [2008/05/28(水) 21:18:30 ]
- 1から100までの乱数を得るとかってでないですかね
- 70 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/28(水) 21:22:39 ]
- >>69
echo $((RANDOM*100/32768+1))
- 71 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/28(水) 22:07:29 ]
- ありがとうございます
変数であるんですね ちなみに32768というのは?
- 72 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/28(水) 22:09:29 ]
- 2の15乗。15bit乱数だから。
- 73 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/28(水) 22:10:32 ]
- bash依存乙w
- 74 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/28(水) 22:28:12 ]
- だからksh由来だと何度(ry
- 75 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/28(水) 22:29:03 ]
- >>73-74
わからないなら黙ってろ
- 76 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/28(水) 22:45:00 ]
- 純正シェルだとどうやるの?
- 77 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/28(水) 23:09:49 ]
- 純正ってナニ?
- 78 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/28(水) 23:16:10 ]
- bshじゃないか?
bashじゃ無いオリジナルの
- 79 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/29(木) 01:10:09 ]
- むかし、Bee Shell(ミツバチシェル)ってのを使ったことがあるせいか、
Bourne Shellのことはshか/bin/shと書いた方がいいような気がする。
- 80 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/29(木) 02:18:20 ]
- sh が bashのリンクになってるのって最近のlinuxだけ?
- 81 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/29(木) 03:11:30 ]
- >>79
HP-UXやAIXはksh改変版が使われている。 なんで、kshで拡張された便利機能もほとんど使えるようになっている。
- 82 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/29(木) 05:28:36 ]
- >>80
UbuntuやDebianの/bin/shはdash
- 83 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/29(木) 06:45:40 ]
- 能書きはいいから、純正シェルでのやりかた答えろ
- 84 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/29(木) 07:08:01 ]
- >>66>>83
なんなの、この屑は
- 85 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/29(木) 07:24:03 ]
- 純正シェルなんて言葉どこで覚えてきたんだ?
- 86 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/29(木) 07:27:42 ]
- >>85
わからないなら黙ってろ
- 87 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/29(木) 07:28:49 ]
- はーーーーーーい
- 88 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/29(木) 07:34:09 ]
- >>83
echo $$
- 89 名前:69 mailto:sage [2008/05/29(木) 10:47:07 ]
- すいません
>>79をループして繰り返すと 3 20 43 70 81 10 15 49 60 87 みたいに1から100の間で増えて戻って増えてを繰り返します この規則性をなくせないですか?
- 90 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/29(木) 11:10:35 ]
- >>89
echo $(($(head -c 2 /dev/urandom | od -An -d)*100/65536+1))
- 91 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/29(木) 12:59:00 ]
- おお
意味はまったく理解不能ですがこれでいけそうです ありがとうございます
- 92 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/29(木) 13:20:20 ]
- >>90
OS依存、GNU依存、bash依存乙。
- 93 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/29(木) 13:24:26 ]
- >>92
わからないなら黙ってろ
- 94 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/29(木) 13:34:33 ]
- 純正シェルではどうやるの?
- 95 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/29(木) 16:32:15 ]
- 純正シェルでは
rm /bin
- 96 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/29(木) 17:05:04 ]
- >>95
わからないなら黙ってろ
- 97 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/29(木) 17:14:20 ]
- >>96
わからないなら黙ってろ
- 98 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/29(木) 18:14:00 ]
- わからないならオナってろ
- 99 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/29(木) 22:09:56 ]
- >>92
いちいち五月蝿いよ。 よりポータブルに直したい奴は、直して自分で書けばいいよ。
- 100 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/29(木) 23:02:12 ]
- >>99
>1 > bash/zsh/ksh/ashなどに依存する場合は明示しましょう。 って事なんじゃね。 つまり嫌味を言いながら実はこの決まりを代行してるツンデレ。 あと>92-94は>73-76の74が足りないな。おしい。
- 101 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/29(木) 23:12:48 ]
- >>100
わからないなら黙ってろ
- 102 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/29(木) 23:14:45 ]
- うるさいのが一人いるなッ
- 103 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/30(金) 00:38:12 ]
- ッ
- 104 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/30(金) 00:42:35 ]
- でも、言ってることは正しいな
書くべきだよねえ
- 105 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/30(金) 06:43:58 ]
- >>101
わかっているから黙ってない
- 106 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/30(金) 07:57:37 ]
- >>100
明記できる奴は明記すればいい。 ポータブルに直せる奴は直せばいい。 >>92みたいな屑が一番邪魔。
- 107 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/30(金) 08:45:48 ]
- 質問者が環境をちゃんと書けばいいんだよ。
- 108 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/30(金) 08:50:20 ]
- 質問者の環境にかかわらず、純正シェルで動くことが条件。
- 109 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/30(金) 09:59:15 ]
- 質問テンプレ
使っているOS名・バージョン: (※LinuxユーザはLinux板へ) 使っているシェルの名前・バージョン: 使っているシェルのフルパス: 移植性: 上記環境で動けば十分 / 多くの環境で動かす必要がある
- 110 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/30(金) 10:12:44 ]
- GNU/Linux, *BSD使い始めたころから補完ができるってだけの理由で特に理由もなくBash使ってるけど
他に何か良いShellないかな。 Bashに特に不満はないけど。
|

|