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

このエントリーをはてなブックマークに追加
1 ◆5mzn8hAQ
みんなのシェルスクリプトを書いてくれ!
どんなくだらない物でも良いからよろしく。
何なら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個目以降の引数ってどうやって渡したら、
51 ◆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ファイルを消してくれる物だれか作って下さい。
9 :01/11/07 16:28
>>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読まなくなっちまったなあ。
174:01/11/08 21:41
>>14
どもども… 最近batファイル使う機会が
あったんだけど参考資料が全然無くて…
18ddddfgs ◆vP8NajsQ :01/12/21 06:01
aaaaaaaa
19ddddfgs ◆bv3Hfev2 :01/12/21 06:02
asfaee
20ddddfgs ◆0WR2Cf2s :01/12/21 06:02
weeeeeeeeeeeeeeeeeeeeeeeee
21ddddfgs ◆SkD8hGXQ :01/12/21 06:02
ooooooooooooooooo
22ddddfgs ◆ikm5tIME :01/12/21 06:02
2222222222222222222222222
23ddddfgs ◆YLrxDeyA :01/12/21 06:03
ddddfgs#njibhmoko

asdfffffffffffffwwwwwwww
24ddddfgs ◆knhJFmoQ :01/12/21 06:04
q3eegsdrg
sdfgs
dfgsdf
25ddddfgs ◆G8X25g0Q :01/12/21 06:04
kaslfdae


asdf
a
sdf
a
sdf
26テスト:01/12/26 02:37
nbsp;xx
27テスト:01/12/26 02:48
 xxx
28テスト:01/12/26 02:54
while gets do puts $_.gsub(/\t/, "    ").gsub(/ /, " ") end
  # コメント
#!/bin/csh

set hoge = "hoge"

cat << EOT
こうやって${hoge}とか、`grep -l ${hoge} *`とかできるんだから、
echoを並べずにネコ使えってことで一応カキコ。
echoを100行とか並べられると鬱になるよ。
EOT
30ceu:02/01/07 09:24
/^STATIC_ID/{
printf("STATIC_ID = /project/string/batch/%WORKUNIT_ID%/bin/%PRG_ID%\n")

こういう場合の「%」はどう解釈したらよいのですか?
本では、「%c」x=A,printf("The character is %c\n,x)とあったのですが・・・。
環境変数でしょ
32ceu:02/01/07 09:47
では、本の%cとはぜんぜん違うって事ですか?
環境変数といわれても、いまいちわからないので、もう少し詳しく
解説していただけないでしょうか?すみません。
>>32
printf()とは何の関係も無い。
それは、ダブルコーテーションの中の環境変数の展開だ。
これでわからなかったら、Yahooにでも行け。
つーか>>30って何のスクリプトなの?
WindowsのPerl?
35ceu:02/01/07 09:59
デフォルトの名無しさん、ありがとうございました。
36ceu:02/01/07 10:01
30は以前も質問に答えていただいた、awkスクリプトの一部です。
>>36
今後は、まずここを読んでから書き込むように。
http://www.2ch.net/guide/
38ceu:02/01/07 10:23
はい。利用方法から読むべきでした。すいません。
>>38
つーか、まずこっちだな。
http://www.skipup.com/~niwatori/

まずsageを覚えよう。話はそれからだ。
40ceu:02/01/07 11:18
掲示板っていろいろな用語があるんですね。覚えんと・・。
>>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"]みたいにする。
44ceu:02/01/07 17:58
おそらくこのスクリプトを作った方が勘違いされてるのではないでしょうか?
私はこのスクリプトの読解をするように命じられたので。このスクリプトが
どういう意図で作られたのかなどわからないのです。すいません。
$(LIB_TYPE)なんてところを見ると、なんとなくMakefileでも書き換えるスク
リプトっぽいけど、それでもやっぱり%WORKUNIT_ID%は謎だなあ。
なにするやつ? つーか、最初別スレで質問してたのはなんだったっけ?
46ceu:02/01/08 09:04
おはようございます。昨日言ってたスクリプトの大元の質問は、
%の解釈をどうしたらいいのかということでした。
環境変数でしょ?といわれてそれでもわからなければ、Yahooに
行けということだったのですが、もうその課題は終わったので
よしとします。ありがとうございました。
>>46
君、富士通関連の人でしょ。
お願いだからメール欄には"sage"って入れてね。
48ceu:02/01/08 12:44
残念ながらちがいます。
>>46
結局どう解決したのか、気になる…。
50ceu:02/01/08 13:40
please email me!
お友達になってください;-)
>>50
email は動詞なのか?
52ceu:02/01/08 13:49
はい、動詞ですよ。
日本語にもなってますよね。Eメールするっていいませんか?
53ceu:02/01/08 13:56
はい、動詞ですよ。
日本語にもなってますよね。Eメールするっていいませんか?

確信犯だな、この馬鹿。
55ceu:02/01/08 14:17
ばかですいません。もう書き込みません。ごめんなさい。
56ykok1:02/01/15 11:00
awkかCシェルで練習がてら何か作ってみたいのですが、
おもしろい課題はないでしょうか?テキストの練習問題には
あきてしまいました。
動詞なら「Eメーる」だな。
58ykok1:02/01/15 13:14
ふ〜眠い・・
>>56
練習なら grep とか diff とか find とか作ってみたら?
細かい機能まで実現すると結構面倒くさいかも。
sed を作るというのもひねくれていて萌え
60ym:02/01/24 09:14
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 .. |
63ym:02/01/24 10:19
sjtoeucはコード変換のコマンドです。
ありがとうございました!
64デフォルトの名無しさん:02/01/24 10:25
Cシェルだったらどうなるんだ?
むぅ、漏れcshはほとんど書いたことないんで。
SunOSでさえbash使ってたし(藁。
66ym:02/01/24 16:20
私の現場はソラリスです!
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
人のコードを理解せずに試しちゃだめだぞ。
被害例(w http://pc.2ch.net/test/read.cgi/unix/1001393679/87-
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
できるでしょう?
7573:02/01/26 00:41
#!/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

とすると変換できます。

エラー処理は何もしていないし、初心者丸出しで済みません。
7673:02/01/26 01:41
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)が含まれていたら
どうしよう?
 へたしたら改行を含むファイル名なんてのもありか?
7973:02/01/26 02:14
>>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"`'
とかで作れたよ。
81bash房:02/01/26 11:21
仕事でシェルスクリプト使うんなら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
8786:02/01/31 21:53
うわ、まちがえた
#!/bin/sh
while :
do
sleep 1800
fortune -o|wall
done
正直「%」の意味がわからない。
プロンプトのことか?
それとも${var%/*}みたいな変数置換のことか?
>>89
後者です。
bashのマニュアルに説明があった。自己解決なり。
92非通知さん
ただ今、迷惑メール送信元を一斉訪問中につきボランティア募集中!!!

目標は 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でフレームを開きまくって更新しまくるやつ