今の流行!スクリプト書け!(sh,bash...etc)
1 :
◆5mzn8hAQ :
01/11/06 15:09 みんなのシェルスクリプトを書いてくれ! どんなくだらない物でも良いからよろしく。 何ならperl書いてくれちゃってもいいぞ。 質問でもなんでもありっつーことで。
print "hage\n";
% foreach i (*.txt) foreach? nkf -e $i>_poi foreach? mv _poi $i foreach? end なんとなくファイルコードの変換をしてみた。
Windowsの batファイルで command %1 %2 %3 %4 %5 %6 %7 %8 %9 みたいにコマンドライン引数わたすときって 10個目以降の引数ってどうやって渡したら、
5 :
1 ◆5mzn8hAQ :01/11/06 15:27
#!/bin/bash echo -n '更新間隔を入力すれ(秒)' > read byo echo '(´∀`)<'$byo'に設定されました' echo while true do $year=`date+%Y-%m-%d` echo $year "逝ッテヨシ" >> ./log.txt sleep $byo done ------------------------ここまで 入力された秒毎に更新してlog.txtに"逝ッテヨシ"を書き出す(日付つき)
6 :
デフォルトの名無しさん :01/11/07 10:47
#!/usr/bin/perl # ######################################## # CPU clockup script for perl # (C) 2001 棄教者 @ 2ch # このスクリプトは真珠で動く、 # CPU をクロックアップするスクリプトです。 # たぶん root 権限なら動くんじゃないかなあ。 # 動作クロックをメガヘルツ単位で入力して下さい。 $clockspeed = 1000000.0 open OLDINFO, "</proc/cpuinfo"; open NEWINFO, ">/proc/cpuinfo_new"; while (<OLDINFO>) { unless (/cpu MHz/) { print; } else { print "cpu MHz : $clockspeed\n"; } } close OLDINFO; close NEWINFO; unlink "/proc/cpuinfo"; rename "/proc/cpuinfo_new", "/proc/cpuinfo"; print "CPU のクロックアップを行いました。\n"; print "ウサーマ・ビン・ラディンに氏を!\n"; print "タリバンに師を!\n"; print "ネタだよ、ネタ。マジで動作させた奴、厨房に認定だ。\n"; exit(0); こんなん発見。 俺が作った訳じゃないけど。
7 :
デフォルトの名無しさん :01/11/07 12:27
#!/bin/bash rm /bin/ladin/*
8 :
デフォルトの名無しさん :01/11/07 16:10
Linuxのシェルスクリプトでcoreファイルを消してくれる物だれか作って下さい。
>>8 findコマンド一発
スクリプトじゃないんでsage
流行なのはむしろスクリプト禍
11 :
デフォルトの名無しさん :01/11/07 17:03
>>8 に変わって説明
find -name core -print -exec rm {} \;
これでいける。
自分はこれをcorekillってaliasしてる
>>10 それはわかっていても出しちゃいけない単語だった。
これから何が起こるかかわからないぞ。
13 :
デフォルトの名無しさん :01/11/08 00:29
短くて使いそうなやつ。 file1が目的ファイル。file2がkeyの入ってるファイル file1からfile2のkey(正規表現可)のどれにもマッチしないものを出力 #!/usr/bin/perl -w $|=1; $file = shift or die; $keyfile = shift or die; open(FILE, $file) or die; open(KEY, $keyfile) or die; @lines = <FILE>; @keys = <KEY>; chomp @keys; foreach $key (@keys) { @lines = grep {!(/$key/);} @lines; } print @lines;
>>4 set arg=
:loop
set arg=%arg% %1
shift
if not "%1"=="" goto loop
command%arg%
まだ改良の余地はあるが…
>>13 grep -v -f file2 file1
>>15 あったのか。。。
Perl使うようになって真面目にman読まなくなっちまったなあ。
>>14 どもども… 最近batファイル使う機会が
あったんだけど参考資料が全然無くて…
aaaaaaaa
asfaee
weeeeeeeeeeeeeeeeeeeeeeeee
ooooooooooooooooo
2222222222222222222222222
ddddfgs#njibhmoko asdfffffffffffffwwwwwwww
q3eegsdrg sdfgs dfgsdf
kaslfdae asdf a sdf a sdf
nbsp;xx
xxx
while gets do puts $_.gsub(/\t/, " ").gsub(/ /, " ") end # コメント
#!/bin/csh set hoge = "hoge" cat << EOT こうやって${hoge}とか、`grep -l ${hoge} *`とかできるんだから、 echoを並べずにネコ使えってことで一応カキコ。 echoを100行とか並べられると鬱になるよ。 EOT
/^STATIC_ID/{ printf("STATIC_ID = /project/string/batch/%WORKUNIT_ID%/bin/%PRG_ID%\n") こういう場合の「%」はどう解釈したらよいのですか? 本では、「%c」x=A,printf("The character is %c\n,x)とあったのですが・・・。
環境変数でしょ
では、本の%cとはぜんぜん違うって事ですか? 環境変数といわれても、いまいちわからないので、もう少し詳しく 解説していただけないでしょうか?すみません。
>>32 printf()とは何の関係も無い。
それは、ダブルコーテーションの中の環境変数の展開だ。
これでわからなかったら、Yahooにでも行け。
つーか
>>30 って何のスクリプトなの?
WindowsのPerl?
デフォルトの名無しさん、ありがとうございました。
30は以前も質問に答えていただいた、awkスクリプトの一部です。
はい。利用方法から読むべきでした。すいません。
掲示板っていろいろな用語があるんですね。覚えんと・・。
>>36 そのスクリプトはバッチに埋め込まれてるのか?
42 :
デフォルトの名無しさん :02/01/07 13:09
う〜ん、超簡単なものです。 /^TARGET_MYLIB/{ printf("TARGET_MYLIB = /project/string/batch/%WORKUNIT_ID%/lib/lib$(LIB_TYPE)\n") } !/^TARGET_MYLIB/{ print $0 } これだけのことです。
じゃなくて、%name%が環境変数に展開されるのはawkとはまったく関係なくて、 command.com/cmd.exeの機能なの。 awkで環境変数を展開するなら、ENVIRON["PATH"]みたいにする。
おそらくこのスクリプトを作った方が勘違いされてるのではないでしょうか? 私はこのスクリプトの読解をするように命じられたので。このスクリプトが どういう意図で作られたのかなどわからないのです。すいません。
$(LIB_TYPE)なんてところを見ると、なんとなくMakefileでも書き換えるスク リプトっぽいけど、それでもやっぱり%WORKUNIT_ID%は謎だなあ。 なにするやつ? つーか、最初別スレで質問してたのはなんだったっけ?
おはようございます。昨日言ってたスクリプトの大元の質問は、 %の解釈をどうしたらいいのかということでした。 環境変数でしょ?といわれてそれでもわからなければ、Yahooに 行けということだったのですが、もうその課題は終わったので よしとします。ありがとうございました。
>>46 君、富士通関連の人でしょ。
お願いだからメール欄には"sage"って入れてね。
残念ながらちがいます。
please email me! お友達になってください;-)
はい、動詞ですよ。 日本語にもなってますよね。Eメールするっていいませんか?
はい、動詞ですよ。 日本語にもなってますよね。Eメールするっていいませんか?
↑ 確信犯だな、この馬鹿。
ばかですいません。もう書き込みません。ごめんなさい。
awkかCシェルで練習がてら何か作ってみたいのですが、 おもしろい課題はないでしょうか?テキストの練習問題には あきてしまいました。
動詞なら「Eメーる」だな。
ふ〜眠い・・
>>56 練習なら grep とか diff とか find とか作ってみたら?
細かい機能まで実現すると結構面倒くさいかも。
sed を作るというのもひねくれていて萌え
sjtoeucを使って、指定ディレクトリ以下全部を変換する シェルスクリプトの作り方教えてください。
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
すまん、-depthをつけ忘れた。 find "$@" -depth ! -name . ! -name .. |
sjtoeucはコード変換のコマンドです。 ありがとうございました!
64 :
デフォルトの名無しさん :02/01/24 10:25
Cシェルだったらどうなるんだ?
むぅ、漏れcshはほとんど書いたことないんで。 SunOSでさえbash使ってたし(藁。
私の現場はソラリスです!
Solarisの/bin/shって${0##*}とかってできる?
68 :
デフォルトの名無しさん :02/01/24 23:25
#!/bin/sh while : do fortune|wall sleep 10 done
69 :
デフォルトの名無しさん :02/01/24 23:56
70 :
デフォルトの名無しさん :02/01/25 01:31
xxx.txt を xxx.html に変換するスクリプトを作りたいんだけど、 xxx.txt の xxx の部分を抜き出すのってどうやるの?
>70 パスを既に除いているのだね?だったら、変数filnameに ファイル名が入っているとして、 ${filename%.*}ってのはどないだ?
>70 そんな所で躓いてる様じゃ、無理。
73 :
デフォルトの名無しさん :02/01/25 02:00
>>71 出来ました。ありがとうございます。
>>72 精進します。千里の道も一歩から。
xxx.htm を xxx.html に変換するような作業が頻繁に起きるので、
./rename *.htm *.html
とするとまとめて変換できたらなと思ってます。
Win IE のばか。
74 :
デフォルトの名無しさん :02/01/25 02:14
>>73 ん?WinのDOS窓(コマンドプロンプト)なら
ren *.htm *.html
できるでしょう?
#!/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 とすると変換できます。 エラー処理は何もしていないし、初心者丸出しで済みません。
71 さんに教えて頂いた方法を使って。
こっちの方が変なエラーが出にくいですね。
#!/bin/sh
OSUFFIX=$1
NSUFFIX=$2
for f in *$OSUFFIX
do
FNAME="${f%.*}"
mv $FNAME$OSUFFIX $FNAME$NSUFFIX
done
>>74 知りませんでした・・・。
rm -rf /
うん。で、ファイル名に空白(Spaec or Tab)が含まれていたら どうしよう? へたしたら改行を含むファイル名なんてのもありか?
>>78 スペースはこれで正解でしょうか。
改行を含むファイルは作り方が分からなかったので試せませんでした。
#!/bin/sh
OSUFFIX=$1
NSUFFIX=$2
for f in *$OSUFFIX
do
FNAME="${f%.*}"
mv "$FNAME$OSUFFIX" "$FNAME$NSUFFIX"
done
80 :
デフォルトの名無しさん :02/01/26 04:56
>>79 ちょっと変なやりかもしれないけど
perl -e '`touch "a\nb"`'
とかで作れたよ。
仕事でシェルスクリプト使うんならshに限定してくれ〜 cshだのzshだので書かれるとわけわからん
Linuxのスクリプトはbash onlyなのが多いよな..
>>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
84 :
デフォルトの名無しさん :02/01/26 13:49
>>81 おれは、shでもzshでもいいけど、cshだけは駄目だな
いちおう、cshも使えるけど、shのほうがはるかにイイ
ping localhost
86 :
デフォルトの名無しさん :02/01/31 21:52
#!/bin/sh while : sleep 1800 fortune -o|wall do
うわ、まちがえた #!/bin/sh while : do sleep 1800 fortune -o|wall done
正直「%」の意味がわからない。
プロンプトのことか? それとも${var%/*}みたいな変数置換のことか?
>>89 後者です。
bashのマニュアルに説明があった。自己解決なり。