シェルスクリプト総合 その6
■ このスレッドは過去ログ倉庫に格納されています
0001うはwwwww
2006/03/26(日) 00:56:22スクリプトのお勉強・自慢・腕試しなどにどうぞ。
まずは注意点、リンク、地鎮祭など(>>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 でトレースしましょう。
0116名無しさん@お腹いっぱい。
2006/03/32(土) 12:53:27それを言うなら「定理」じゃなくて「法則」だなw
「国語能力低いな」
0117名無しさん@お腹いっぱい。
2006/03/32(土) 13:09:35たとえば、↓「エスパーきぼんぬ」のレスを貰う八ヶ条。
http://pc8.2ch.net/test/read.cgi/unix/1142379262/4
は、反語的表現として良くできていて面白いと思う。
しかし、ここに「などと言えるのではなかろうか」みたいな文章が入っていると、
せっかくの反語的表現が白けてしまって面白くなくなる。
(以前は補足みたいなのが付いてたけど、削除されたようだし、
そもそも補足が必要な国語能力低い香具師は居ないと言う前提で桶だろ)
0118名無しさん@お腹いっぱい。
2006/03/32(土) 16:29:54命題がサインになっている。国語力低いな。
0119名無しさん@お腹いっぱい。
2006/03/32(土) 16:42:52>>85 の文章は「ddも改善されるべきだ」とも取れるのはその通りだとしても、
そこから、>>96 の「犬は帰れ。」のところで理論の飛躍があると思う。
どうして犬だと思ったのか、もっとちゃんとした説明が欲しいな。
0120115
2006/03/32(土) 16:44:37ああ、法則のほうがあってるね。わりいな。
>117
ああいう褒め殺しの典型みたいな文章をもってきて、
なにがいいたいのやら。85でももうちょっと技法を使って
他人に反語的表現だと理解してもらえる文章にしないと、
それができないならせめて補足を入れないと駄目だぞ。
0121名無しさん@お腹いっぱい。
2006/03/32(土) 16:57:20横レススマソ。「法則」の方が合ってる(程度問題)じゃなく、
「定理」だと間違い。
定理なら証明して導かないといけない。
0122名無しさん@お腹いっぱい。
2006/03/32(土) 17:07:40つべこべ言わずにコード書け
0123名無しさん@お腹いっぱい。
2006/03/32(土) 17:12:07何でもかんでも犬にこじつけて排除しようとするから、
スレが荒れるなぁ・・
0124名無しさん@お腹いっぱい。
2006/03/32(土) 17:36:54今の話題は反語的表現。
0125前スレのクラッカー
2006/03/32(土) 17:54:42なぁ屑共 お前らに話がある
大切な話だ
0126名無しさん@お腹いっぱい。
2006/03/32(土) 18:13:04来て良さそうなカキコはあったのにね。
>>103,104,111,125 みたいな、自動カキコのシェルを書いてる人本人なのかなぁ。
0127名無しさん@お腹いっぱい。
2006/03/32(土) 18:14:430128前スレのクラッカー
2006/03/32(土) 18:15:45ところでお前らに大切な話があるよ屑共。
0129名無しさん@お腹いっぱい。
2006/03/32(土) 18:26:460130名無しさん@お腹いっぱい。
2006/03/32(土) 18:52:360131前スレのクラッカー
2006/03/32(土) 19:07:440132前スレのクラッカー
2006/03/32(土) 19:10:22・・・なんてったって遅いからだよ。
シェルスクリプトに限らず俺はインタプリタ型言語が大ッッッッッ嫌いでね。
悪いが当分の間このスレに居座り、荒らし行為をさせて貰うよ。
因みに俺の好きな言語はアセンブラ。
0133名無しさん@お腹いっぱい。
2006/03/32(土) 19:14:28> 俺の好きな言語はアセンブラ。
wwwww ワロス
0134名無しさん@お腹いっぱい。
2006/03/32(土) 19:25:19俺には大切な話なんかないぞ。屑は帰れ。
0135前スレのクラッカー
2006/03/32(土) 19:43:19どちらかと言うとお前らの方が屑だと思うぞ。
0136名無しさん@お腹いっぱい。
2006/03/32(土) 20:02:550137前スレのクラッカー
2006/03/32(土) 20:07:57同意。
お前も含まれるがな。
0138名無しさん@お腹いっぱい。
2006/03/32(土) 20:22:480139名無しさん@お腹いっぱい。
2006/03/32(土) 20:24:050140名無しさん@お腹いっぱい。
2006/03/32(土) 20:26:160141名無しさん@お腹いっぱい。
2006/03/32(土) 20:29:51お大事に。
0142名無しさん@お腹いっぱい。
2006/03/32(土) 20:33:09速度以外の点でメリットがあるからシェルスクリプトを使うわけで。
0143前スレのクラッカー
2006/03/32(土) 20:35:59よく分からないけど俺の世代にはアセンブラ言語と言う人間が大多数存在しているから、
間違いじゃないぞ。
あぁ〜自称プログラマーの使えないクズでしたか。すまんすまん。
>>139
お前のせいだ
>>140
意味が分からんよ全く、屑のホザくことは
>>141
実際遅いんだから、事実だろ?
俺が何年PCやプログラムに触れていると思っているんだ?
舐めるなよ。
0144名無しさん@お腹いっぱい。
2006/03/32(土) 20:36:35コンパイルしてもたいして速くならなかったりするよ。
0145名無しさん@お腹いっぱい。
2006/03/32(土) 20:40:56えーと、歳いくつ?
世代全員そんな馬鹿だとは思えないから、たぶん君と君の友達だけだよ。
google で検索
アセンブラ言語 の検索結果 約 43,400 件
アセンブリ言語 の検索結果 約 168,000 件
43400/(43400+168000) ≒ 0.2
∴ 人類の下位 20% に属するバカ
なるほど。
φ(..)メモメモ...
0146名無しさん@お腹いっぱい。
2006/03/32(土) 20:41:37アセンブリー言語のことを慣習的に「アセンブラ」と呼ぶのは一般的だが、
「アセンブラ言語」という言い方は初めて聞いたな。
「言語」がくっつくと確かにおかしく感じる。
0147名無しさん@お腹いっぱい。
2006/03/32(土) 20:42:570148名無しさん@お腹いっぱい。
2006/03/32(土) 20:44:05コンパイル型言語(というかC言語)でも、インタプリタ以上に遅いコードはざら。
sscanf 一発な簡単な文字列処理でも、strxxxでコピーしてコピーしてとごちゃごちゃやってたり
0149名無しさん@お腹いっぱい。
2006/03/32(土) 20:46:35一部の特例を出してきても、一般例の反論にはならないのはわかってますか?
0150前スレのクラッカー
2006/03/32(土) 20:47:43無駄な労力ご苦労様。
>>146
で?
俺は一般的にはアセンブラ言語だと思っているよ。
>>147
お前は下位0.01%に含まれる屑人間だと思うよ。
>>148
レベルが低いのはお前だよ。
良い会社じゃないか、定石通りの綺麗なコードを書くんだろうなあ
>>149
黙ってろ低脳
0151名無しさん@お腹いっぱい。
2006/03/32(土) 20:51:08高速にならないが、高級言語を使ってアルゴリズムのレベルで最適化
すると、指数的オーダで改善することが多いから、高級言語の方が
いいよん。
まあタイトループの最内部をアセンブラで高速化するのは時には意味
があるけど、かなり特殊な用途だね。
0152名無しさん@お腹いっぱい。
2006/03/32(土) 20:53:37「一般的には××だ」と主張する根拠が「俺はそう思っている」からだと。
ククク。
0153名無しさん@お腹いっぱい。
2006/03/32(土) 20:57:31「タイトループ」? ってもしかしてアノ業界のプログラマ?
0154前スレのクラッカー
2006/03/32(土) 21:02:15お前BASICからプログラム始めたクチだろ。
アセンブラをよく知らない屑がよく吐く屁理屈だ。
まあお前もアセンブラを深く学べば俺に同調するようになる。
>>152
それは俺が常にルールに従っているからこその自信だ。
あと
>ククク。
気色が悪いから止めてくれないか?屑野郎。
>>153
ほう、タイトスカートフェチか。
ピンクモンキーは大人しくセンズリかいて寝てろよ。
0155名無しさん@お腹いっぱい。
2006/03/32(土) 21:06:30そこで、このループのみ、インラインアセンブラを仕込む方法を
教えてください。もちろん、Bourne Shell互換で。
OS依存なしで、お願いします。
0156前スレのクラッカー
2006/03/32(土) 21:07:51すっこんでろヒヨッコが
0157名無しさん@お腹いっぱい。
2006/03/32(土) 21:09:40あ、書き忘れました。OS依存だけでなく、CPU依存もなしでお願いします。
0158前スレのクラッカー
2006/03/32(土) 21:11:25お前に書いてやるコードなどない
0159前スレのクラッカー
2006/03/32(土) 21:18:260160名無しさん@お腹いっぱい。
2006/03/32(土) 21:22:060161前スレのクラッカー
2006/03/32(土) 21:24:53悪いな、お前の彼女なら俺の隣で寝てるよ
0162名無しさん@お腹いっぱい。
2006/03/32(土) 21:33:49スクリプト内で動的にコード生成してコンパイルなどして実行すればー。
0163名無しさん@お腹いっぱい。
2006/03/32(土) 21:37:43なに?シェルスクリプトでインラインアセンブラが使えない?
ジョジョ、それはコンパイル言語と同じにやろうとするからだよ
逆に考えるんだ
「インラインアセンブラからシェルスクリプトを呼べばいい」と
0164前スレのクラッカー
2006/03/32(土) 21:40:35何このレベルの低さ
自分のスキルの無さを露呈しちゃってるよ
0165名無しさん@お腹いっぱい。
2006/03/32(土) 21:56:31実行する方法はありませんか?
あ、テンポラリファイルに cat > tmpfile して、
chmod +x tmpfile する方法以外でお願いします。
0166名無しさん@お腹いっぱい。
2006/03/32(土) 21:59:23>>126 が図星だったってことか。
0167名無しさん@お腹いっぱい。
2006/03/32(土) 22:23:070168名無しさん@お腹いっぱい。
2006/04/02(日) 00:01:42ところで、前スレのクラッカーってなんだ?
0169名無しさん@お腹いっぱい。
2006/04/02(日) 00:14:51お馬鹿さん。
0170名無しさん@お腹いっぱい。
2006/04/02(日) 02:53:52死ねよデブ
0171前スレのクラッカー
2006/04/02(日) 10:12:42今日は何をして過ごそうかなあ。
0172前スレのクラッカー
2006/04/02(日) 12:14:26還暦間近でストレス溜まってたんだ、許してくれ
0173名無しさん@お腹いっぱい。
2006/04/02(日) 13:38:24エロサイトから wget -r http://ero.example.com という形で
ファイルをDLしてきました。このファイルには
エロ画像、エロ画像のlzh、サムネイル、html、css等が含まれています。
目的のエロ画像はero.example.com/members/女の子名/img/ 下にあります。
複数の 女の子名/img を一つのディレクトリに ln -s すれば閲覧が楽になるので
今まではシェルスクリプトを作ってlnをしていたのですが、
、今回 女の子名/img の中にサムネイルファイル t_001.jpg, t_002.jpg ... 等が混ざっており、
単純にln -sしただけではサムネイルと画像本体が混ざってしまい、大変不便な思いをしています。
ブラウザで閲覧する事もあるため、できればサムネイルファイルを消さずに
目的の画像だけを集めたディレクトリを作成したいのですが何かよい方法はないでしょうか。
1. ls -r の結果から、サムネイル以外の全ファイルを一つ一つ ln -s する方法、
2. ディレクトリごとcpしてしまってサムネイルをrmしてしまう方法
を考えたのですが、もっとスマートな方法があればお教えください。
なお、使用している画像ビューワはhtml等のフィルタリングはできますので
本番ファイルとhtmlやcssファイル等が混ざるのは問題ありません。
0174名無しさん@お腹いっぱい。
2006/04/02(日) 14:47:46kshを使ってるんですが、どなたか「[」のPATHを知らないでしょうか?
$[ -z ];echo $?
とすると「空文字」判定で「0」が出力されます。
しかし、シェルスクリプトの中に同じ命令を書くと、
「testの引数が足りない」というエラーになります。
そこで、「[」のPATHを指定してないからだとwhichを実行したのですが、
「PATHの中にはない」というエラーになります。
お手数ですけどどなたかご教示ください。
0175名無しさん@お腹いっぱい。
2006/04/02(日) 14:56:39ありがとうございました
0176名無しさん@お腹いっぱい。
2006/04/02(日) 14:57:45OSにもよるけど、今時のkshやshでは [ は内部コマンドになってるよ。
/bin/test とか外部コマンドはあるけど。
[ -z ] で何がしたいの?
変数が定義されてるかどうかなら [ -z "$x" ]
0177名無しさん@お腹いっぱい。
2006/04/02(日) 15:03:42ありがとうございます。
やりたいことは
[ -z `grep $id $listfile`]
で「$idがリストファイルにある」「ない」で条件分岐をしたいのです。
grepでなければthen以下を実行するという感じです。
0178名無しさん@お腹いっぱい。
2006/04/02(日) 15:29:03コマンドの終了状態は $? という変数で見る
grep -q hoge file 2> /dev/null
if [ $? -eq 0 ]; then
......
else
......
fi
が素直じゃない。
0179名無しさん@お腹いっぱい。
2006/04/02(日) 15:29:52そういうときって・・・
grep hoge file > /dev/null 2>&1
if (($?==0)) ; then
moge
fi
みたいに書かない?
俺だけ?
0180名無しさん@お腹いっぱい。
2006/04/02(日) 15:36:140181名無しさん@お腹いっぱい。
2006/04/02(日) 15:37:41どうしても [ -z ] 方式でやりたいなら、
[ -z `grep $id $listfile` ] じゃなくて、
[ -z "`grep $id $listfile`" ] みたいに、
ダフルクォートを付けろ。
こうすれば、grepの結果がなくても "" の空文字列が残るので、
testがエラーにならない。
それより、testを使わずに、
if ! grep $id $listfile; then
で行けるよ。(!を使うのはksh依存だけど)
Bourne Shなら
if grep $id $listfile; then :; else
とやるのが普通。
0182名無しさん@お腹いっぱい。
2006/04/02(日) 15:42:44この場合はわざわざ $? を呼び出す必要が無いな。
if grep ...
then
...
else
...
fi
else がいらないならこれでも可。
grep ... || {
...
}
0183名無しさん@お腹いっぱい。
2006/04/02(日) 15:43:30すんません。ありがとうございます。
常に独習でやっていたので知ってる方法しか考えてませんでした。
定石みたいなのがちゃんとあるもんなのですね。
くだ質になって申し訳なかったですけど勉強になりました。
0184名無しさん@お腹いっぱい。
2006/04/02(日) 15:51:59(( )) の算術式は、kshやbashでは使えるけど、
Bourne Shellでは使えないから、わざわざ使うことはないな。
0185名無しさん@お腹いっぱい。
2006/04/02(日) 17:55:06以下のシェル文法の違いを説明せよ。(30点)
(1) [ $i = 3 ]
(2) [ $i == 3 ]
(3) [ $i -eq 3 ]
(4) [[ $i = 3 ]]
(5) [[ $i == 3 ]]
(6) [[ $i -eq 3 ]]
(7) [[ i -eq 3 ]]
(8) (($i == 3))
(9) ((i == 3))
(10) test $i -eq 3
0186名無しさん@お腹いっぱい。
2006/04/02(日) 17:59:31だからJISをふまえた文書だと全て「アセンブラ言語」になってる。
0187前スレのクラッカー
2006/04/02(日) 18:11:53今さら擁護はよしてくれ。
どうせ俺を叩いてたのは、世間知らずのガキ共だったのだろうから・・・
0188名無しさん@お腹いっぱい。
2006/04/02(日) 19:22:34>>185 の問でシェル変数 i の中身が i='1+2' である
場合はどうなるか説明せよ。(30点)
0189名無しさん@お腹いっぱい。
2006/04/02(日) 19:52:14Solarisでの実行例
$ (1) [ $i = 3 ]
syntax error: `[' unexpected
$ (2) [ $i == 3 ]
syntax error: `[' unexpected
$ (3) [ $i -eq 3 ]
syntax error: `[' unexpected
$ (4) [[ $i = 3 ]]
syntax error: `[[' unexpected
$ (5) [[ $i == 3 ]]
syntax error: `[[' unexpected
$ (6) [[ $i -eq 3 ]]
syntax error: `[[' unexpected
$ (7) [[ i -eq 3 ]]
syntax error: `[[' unexpected
$ (8) (($i == 3))
syntax error: `(' unexpected
$ (9) ((i == 3))
syntax error: `(' unexpected
$ (10) test $i -eq 3
syntax error: `test' unexpected
0190名無しさん@お腹いっぱい。
2006/04/02(日) 19:59:03"assembler language" の検索結果 約 270,000 件
"assembly language" の検索結果 約 6,690,000
海外だと君は下位4%以下の阿呆だ。良かったね。0.1%に入らなくて。
>>186
へー、そうなのか。勉強になった。
変な言葉を使う割合が世界全体と比べて日本が5倍も多いのは
JIS のせいなのね。JIS もたいがいだなあ。まあこの件に限らんが。
セションとかね。
大学ではアセンブリ言語って習ったけどね。
"アセンブラ言語 site:u-tokyo.ac.jp" 38件
"アセンブリ言語 site:u-tokyo.ac.jp" 245件
38/(38+245) = 13.4%
東大は日本の平均よりは若干マシのようだな。
0191名無しさん@お腹いっぱい。
2006/04/02(日) 20:41:17はいはい。 ワロス ワロス。
で、本当の回答は?
0192名無しさん@お腹いっぱい。
2006/04/02(日) 21:02:34十人十色と言いましょうか、みなそれぞれ個性を持っております。
一言では語りつくせません。
>>188
一つも真となるものはありません。
0193名無しさん@お腹いっぱい。
2006/04/02(日) 21:24:07>一つも真となるものはありません。
違います。真となるものがあります。
0194名無しさん@お腹いっぱい。
2006/04/02(日) 21:26:42(1)(3)(10)以外は bash依存。よって論じる価値なし。
(3)と(10)は同義で、数値としての比較。
よって、仮に i=03でも真になる。
(1)は文字列としての比較。
よって、i=03の場合は偽になる。
0195名無しさん@お腹いっぱい。
2006/04/02(日) 22:10:31どうしても真になるものがあるとは思えないのですが...
0196名無しさん@お腹いっぱい。
2006/04/02(日) 22:16:46真になるところはbash依存だから、覚えなくていいよ。
0197173
2006/04/02(日) 23:38:010198名無しさん@お腹いっぱい。
2006/04/02(日) 23:46:18いやそれで間違ってないんじゃないでしょうか^^;;;
0199名無しさん@お腹いっぱい。
2006/04/03(月) 04:17:380200名無しさん@お腹いっぱい。
2006/04/03(月) 05:20:530201名無しさん@お腹いっぱい。
2006/04/03(月) 08:50:290202名無しさん@お腹いっぱい。
2006/04/03(月) 09:38:12とか、エスパーしてみるテスト。
0203名無しさん@お腹いっぱい。
2006/04/03(月) 13:52:510204名無しさん@お腹いっぱい。
2006/04/03(月) 19:11:36どうすればいいでしょうか。argv[0]を shにして zshを起動しても、
shと同じにはなりません。setoptあたりかと思いましたが、
シグナルに関するオプションは見つかりませんでした。
やっぱり、zshをBourne Shellとして使うのは無理ってことでしょうか?
ちなみに、bashだと問題ありません。
0205名無しさん@お腹いっぱい。
2006/04/04(火) 00:35:140206名無しさん@お腹いっぱい。
2006/04/04(火) 12:10:53コピー元のファイルの相対パスを保ったままコピーするには
どうすればいいでしょうか?
具体的には、
cp -p hoge.txt aaa/fuga.txt bbb/ccc/boke.txt /dokoka/sonohen
を実行すると、hoge.txt fuga.txt boke.txtが、
/dokoka/sonohenの直下にコピーされてしまいますが、
hoge.txtは /dokoka/sonohen/hoge.txtでいいですが、
aaa/fuga.txtは /dokoka/sonohen/aaa/fuga.txtに、
bbb/ccc/boke.txtは /dokoka/sonohen/bbb/ccc/boke.txtに、
コピーしたいのです。
シェルでパス名を文字列処理すればできると思いますが、
できればもっと簡単にコマンド一発の方法を希望します。
あと、tar等を使うのは無しでお願いします。
0207名無しさん@お腹いっぱい。
2006/04/04(火) 12:17:570208名無しさん@お腹いっぱい。
2006/04/04(火) 12:19:06早とちり厨ハケン。質問欲嫁。
0209名無しさん@お腹いっぱい。
2006/04/04(火) 12:23:570210名無しさん@お腹いっぱい。
2006/04/04(火) 12:25:260211名無しさん@お腹いっぱい。
2006/04/04(火) 12:30:23かな?
0212名無しさん@お腹いっぱい。
2006/04/04(火) 12:33:18んなん、forで回せばいいだろ。
0213名無しさん@お腹いっぱい。
2006/04/04(火) 12:38:52tar -c hoge.txt aaa/fuga.txt bbb/ccc/boke.txt |(cd /dokoka/sonohen; tar xf -)
で済むんだけど、使わないのは宿題かなんか?
0214名無しさん@お腹いっぱい。
2006/04/04(火) 12:45:16GNU cpなら、
cp --parents hoge.txt aaa/fuga.txt bbb/ccc/boke.txt /dokoka/sonohen
だな。
>>211
GNU cpだと、-Pはシンボリックリンク保存オプションなので違うと思うが。
0215名無しさん@お腹いっぱい。
2006/04/04(火) 12:59:33tarが無しな理由は、コピー元ファイルがシンボリックリンクだった場合に、
実体ファイルに展開して欲しいからです。
>>214
ありがとうございます。でもGNU cpが無い場合はどうすればいいですか?
■ このスレッドは過去ログ倉庫に格納されています