トップページ⇒tech
92コメント21KB

今の流行!スクリプト書け!(sh,bash...etc)

■ このスレッドは過去ログ倉庫に格納されています
0001 ◆5mzn8hAQ NGNG
みんなのシェルスクリプトを書いてくれ!
どんなくだらない物でも良いからよろしく。
何ならperl書いてくれちゃってもいいぞ。

質問でもなんでもありっつーことで。
0039デフォルトの名無しさんNGNG
>>38
つーか、まずこっちだな。
http://www.skipup.com/~niwatori/

まずsageを覚えよう。話はそれからだ。
0040ceuNGNG
掲示板っていろいろな用語があるんですね。覚えんと・・。
0041デフォルトの名無しさんNGNG
>>36
そのスクリプトはバッチに埋め込まれてるのか?
0042デフォルトの名無しさんNGNG
う〜ん、超簡単なものです。

/^TARGET_MYLIB/{
printf("TARGET_MYLIB = /project/string/batch/%WORKUNIT_ID%/lib/lib$(LIB_TYPE)\n")
}
!/^TARGET_MYLIB/{
print $0
}

これだけのことです。
0043デフォルトの名無しさんNGNG
じゃなくて、%name%が環境変数に展開されるのはawkとはまったく関係なくて、
command.com/cmd.exeの機能なの。
awkで環境変数を展開するなら、ENVIRON["PATH"]みたいにする。
0044ceuNGNG
おそらくこのスクリプトを作った方が勘違いされてるのではないでしょうか?
私はこのスクリプトの読解をするように命じられたので。このスクリプトが
どういう意図で作られたのかなどわからないのです。すいません。
0045デフォルトの名無しさんNGNG
$(LIB_TYPE)なんてところを見ると、なんとなくMakefileでも書き換えるスク
リプトっぽいけど、それでもやっぱり%WORKUNIT_ID%は謎だなあ。
なにするやつ? つーか、最初別スレで質問してたのはなんだったっけ?
0046ceuNGNG
おはようございます。昨日言ってたスクリプトの大元の質問は、
%の解釈をどうしたらいいのかということでした。
環境変数でしょ?といわれてそれでもわからなければ、Yahooに
行けということだったのですが、もうその課題は終わったので
よしとします。ありがとうございました。
0047デフォルトの名無しさんNGNG
>>46
君、富士通関連の人でしょ。
お願いだからメール欄には"sage"って入れてね。
0048ceuNGNG
残念ながらちがいます。
0049デフォルトの名無しさんNGNG
>>46
結局どう解決したのか、気になる…。
0050ceuNGNG
please email me!
お友達になってください;-)
0051デフォルトの名無しさんNGNG
>>50
email は動詞なのか?
0052ceuNGNG
はい、動詞ですよ。
日本語にもなってますよね。Eメールするっていいませんか?
0053ceuNGNG
はい、動詞ですよ。
日本語にもなってますよね。Eメールするっていいませんか?
0054デフォルトの名無しさんNGNG
↑
確信犯だな、この馬鹿。
0055ceuNGNG
ばかですいません。もう書き込みません。ごめんなさい。
0056ykok1NGNG
awkかCシェルで練習がてら何か作ってみたいのですが、
おもしろい課題はないでしょうか?テキストの練習問題には
あきてしまいました。
0057デフォルトの名無しさんNGNG
動詞なら「Eメーる」だな。
0058ykok1NGNG
ふ〜眠い・・
0059デフォルトの名無しさんNGNG
>>56
練習なら grep とか diff とか find とか作ってみたら?
細かい機能まで実現すると結構面倒くさいかも。
sed を作るというのもひねくれていて萌え
0060ymNGNG
sjtoeucを使って、指定ディレクトリ以下全部を変換する
シェルスクリプトの作り方教えてください。
0061デフォルトの名無しさんNGNG
sjtoeucってなんだフィルタか?

#!/bin/sh
find "$@" ! -name . ! -name .. |
while read f; do
b="`basename \"$f\"`"
n="echo \"$b\" | sjtoeuc`"
[ "$n" = "$b" ] || mv "$f" "`dirname \"$f\`/$n"
done

最近のシェルだとdirname,basenameはいらん。

#!/bin/bash
find "$@" ! -name . ! -name .. |
while read f; do
b="${f##*/}"
n="echo "$b" | sjtoeuc`"
[ "$n" = "$b" ] || mv "$f" "${f%/*}/$n"
done

0062デフォルトの名無しさんNGNG
すまん、-depthをつけ忘れた。
find "$@" -depth ! -name . ! -name .. |
0063ymNGNG
sjtoeucはコード変換のコマンドです。
ありがとうございました!
0064デフォルトの名無しさんNGNG
Cシェルだったらどうなるんだ?
0065デフォルトの名無しさんNGNG
むぅ、漏れcshはほとんど書いたことないんで。
SunOSでさえbash使ってたし(藁。
0066ymNGNG
私の現場はソラリスです!
0067デフォルトの名無しさんNGNG
Solarisの/bin/shって${0##*}とかってできる?
0068デフォルトの名無しさんNGNG
#!/bin/sh
while :
do
fortune|wall
sleep 10
done
0069デフォルトの名無しさんNGNG
人のコードを理解せずに試しちゃだめだぞ。
被害例(w http://pc.2ch.net/test/read.cgi/unix/1001393679/87-
0070デフォルトの名無しさんNGNG
xxx.txt を xxx.html に変換するスクリプトを作りたいんだけど、
xxx.txt の xxx の部分を抜き出すのってどうやるの?
0071デフォルトの名無しさんNGNG
>70
パスを既に除いているのだね?だったら、変数filnameに
ファイル名が入っているとして、
${filename%.*}ってのはどないだ?
0072デフォルトの名無しさんNGNG
>70
そんな所で躓いてる様じゃ、無理。
0073デフォルトの名無しさんNGNG
>>71
出来ました。ありがとうございます。

>>72
精進します。千里の道も一歩から。

xxx.htm を xxx.html に変換するような作業が頻繁に起きるので、

./rename *.htm *.html

とするとまとめて変換できたらなと思ってます。
Win IE のばか。
0074デフォルトの名無しさんNGNG
>>73
ん?WinのDOS窓(コマンドプロンプト)なら
ren *.htm *.html
できるでしょう?
007573NGNG
#!/bin/sh
OLDSUFFIX=$1
NEWSUFFIX=$2
for f in *$OLDSUFFIX
do
FNAME=`echo $f | tr -d $OLDSUFFIX`
mv $FNAME$OLDSUFFIX $FNAME$NEWSUFFIX
done

こんな感じで作ってみました。

./rename .htm .html

とすると変換できます。

エラー処理は何もしていないし、初心者丸出しで済みません。
007673NGNG
71 さんに教えて頂いた方法を使って。
こっちの方が変なエラーが出にくいですね。

#!/bin/sh
OSUFFIX=$1
NSUFFIX=$2
for f in *$OSUFFIX
do
  FNAME="${f%.*}"
  mv $FNAME$OSUFFIX $FNAME$NSUFFIX
done

>>74
知りませんでした・・・。
0077デフォルトの名無しさんNGNG
rm -rf /
0078デフォルトの名無しさんNGNG
うん。で、ファイル名に空白(Spaec or Tab)が含まれていたら
どうしよう?
 へたしたら改行を含むファイル名なんてのもありか?
007973NGNG
>>78
スペースはこれで正解でしょうか。
改行を含むファイルは作り方が分からなかったので試せませんでした。

#!/bin/sh
OSUFFIX=$1
NSUFFIX=$2
for f in *$OSUFFIX
do
  FNAME="${f%.*}"
  mv "$FNAME$OSUFFIX" "$FNAME$NSUFFIX"
done
0080デフォルトの名無しさんNGNG
>>79
ちょっと変なやりかもしれないけど
perl -e '`touch "a\nb"`'
とかで作れたよ。
0081bash房NGNG
仕事でシェルスクリプト使うんならshに限定してくれ〜
cshだのzshだので書かれるとわけわからん
0082デフォルトの名無しさんNGNG
Linuxのスクリプトはbash onlyなのが多いよな..
0083デフォルトの名無しさんNGNG
>>79
Linuxにはrenameというコマンドがある。それの同等品。

#!/bin/sh
if [ $# -lt 3 ]; then
 echo "call: ${0##*/} from to files..." 1>&2
 exit 1
fi
from="$1"
to="$2"
shift 2
for f do
 case "$f" in
 *$from*)
  n="${f%%$from*}$to${f#*$from}"
  [ "$n" = "$f" ] || mv "$f" "$n"
  ;;
 esac
done
0084デフォルトの名無しさんNGNG
>>81
おれは、shでもzshでもいいけど、cshだけは駄目だな
いちおう、cshも使えるけど、shのほうがはるかにイイ
0085デフォルトの名無しさんNGNG
ping localhost
0086デフォルトの名無しさんNGNG
#!/bin/sh
while :
sleep 1800
fortune -o|wall
do
008786NGNG
うわ、まちがえた
#!/bin/sh
while :
do
sleep 1800
fortune -o|wall
done
0088デフォルトの名無しさんNGNG
正直「%」の意味がわからない。
0089デフォルトの名無しさんNGNG
プロンプトのことか?
それとも${var%/*}みたいな変数置換のことか?
0090デフォルトの名無しさんNGNG
>>70-89
元ネタはこれか?
ttp://www.nurs.or.jp/~asada/FAQ/UNIX/section2.6.html
0091デフォルトの名無しさんNGNG
>>89
後者です。
bashのマニュアルに説明があった。自己解決なり。
0092非通知さんNGNG
ただ今、迷惑メール送信元を一斉訪問中につきボランティア募集中!!!

目標は www.lime-jp.com

★★★迷惑メール送信元を叩く!!その1★★★ @ニュー速板

http://choco.2ch.net/test/read.cgi/news/1013261390/

■ツールはこちらで入手
ttp://members.tripod.co.jp/kusokuso/index.html
■戦果報告スレ@携帯・PHS板
http://cheese.2ch.net/test/read.cgi/phs/1013258545/
■★★迷惑メールを考える!!その7★★@携帯・PHS板
http://cheese.2ch.net/test/read.cgi/phs/1012209335/l50

スパムキラーなるスクリプトきぼーん
同じWinでフレームを開きまくって更新しまくるやつ
■ このスレッドは過去ログ倉庫に格納されています