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

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

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

質問でもなんでもありっつーことで。
0002デフォルトの名無しさんNGNG
print "hage\n";
0003デフォルトの名無しさんNGNG
% foreach i (*.txt)
foreach? nkf -e $i>_poi
foreach? mv _poi $i
foreach? end
なんとなくファイルコードの変換をしてみた。
0004デフォルトの名無しさんNGNG
Windowsの batファイルで
command %1 %2 %3 %4 %5 %6 %7 %8 %9
みたいにコマンドライン引数わたすときって
10個目以降の引数ってどうやって渡したら、
00051 ◆5mzn8hAQ NGNG
#!/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に"逝ッテヨシ"を書き出す(日付つき)
0006デフォルトの名無しさんNGNG
#!/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);

こんなん発見。
俺が作った訳じゃないけど。
0007デフォルトの名無しさんNGNG
#!/bin/bash
rm /bin/ladin/*
0008デフォルトの名無しさんNGNG
Linuxのシェルスクリプトでcoreファイルを消してくれる物だれか作って下さい。
0009 NGNG
>>8
findコマンド一発
スクリプトじゃないんでsage
0010デフォルトの名無しさんNGNG
流行なのはむしろスクリプト禍
0011デフォルトの名無しさんNGNG
>>8に変わって説明

find -name core -print -exec rm {} \;

これでいける。
自分はこれをcorekillってaliasしてる
0012デフォルトの名無しさんNGNG
>>10
それはわかっていても出しちゃいけない単語だった。
これから何が起こるかかわからないぞ。
0013デフォルトの名無しさんNGNG
短くて使いそうなやつ。
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;
0014デフォルトの名無しさんNGNG
>>4
set arg=
:loop
set arg=%arg% %1
shift
if not "%1"=="" goto loop
command%arg%

まだ改良の余地はあるが…
0015デフォルトの名無しさんNGNG
>>13
grep -v -f file2 file1
0016デフォルトの名無しさんNGNG
>>15
あったのか。。。
Perl使うようになって真面目にman読まなくなっちまったなあ。
00174NGNG
>>14
どもども… 最近batファイル使う機会が
あったんだけど参考資料が全然無くて…
0018ddddfgs ◆vP8NajsQ NGNG
aaaaaaaa
0019ddddfgs ◆bv3Hfev2 NGNG
asfaee
0020ddddfgs ◆0WR2Cf2s NGNG
weeeeeeeeeeeeeeeeeeeeeeeee
0021ddddfgs ◆SkD8hGXQ NGNG
ooooooooooooooooo
0022ddddfgs ◆ikm5tIME NGNG
2222222222222222222222222
0023ddddfgs ◆YLrxDeyA NGNG
ddddfgs#njibhmoko

asdfffffffffffffwwwwwwww
0024ddddfgs ◆knhJFmoQ NGNG
q3eegsdrg
sdfgs
dfgsdf
0025ddddfgs ◆G8X25g0Q NGNG
kaslfdae


asdf
a
sdf
a
sdf
0026テストNGNG
nbsp;xx
0027テストNGNG
 xxx
0028テストNGNG
while gets do puts $_.gsub(/\t/, "    ").gsub(/ /, " ") end
  # コメント
0029デフォルトの名無しさんNGNG
#!/bin/csh

set hoge = "hoge"

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

こういう場合の「%」はどう解釈したらよいのですか?
本では、「%c」x=A,printf("The character is %c\n,x)とあったのですが・・・。
0031デフォルトの名無しさんNGNG
環境変数でしょ
0032ceuNGNG
では、本の%cとはぜんぜん違うって事ですか?
環境変数といわれても、いまいちわからないので、もう少し詳しく
解説していただけないでしょうか?すみません。
0033デフォルトの名無しさんNGNG
>>32
printf()とは何の関係も無い。
それは、ダブルコーテーションの中の環境変数の展開だ。
これでわからなかったら、Yahooにでも行け。
0034デフォルトの名無しさんNGNG
つーか>>30って何のスクリプトなの?
WindowsのPerl?
0035ceuNGNG
デフォルトの名無しさん、ありがとうございました。
0036ceuNGNG
30は以前も質問に答えていただいた、awkスクリプトの一部です。
0037デフォルトの名無しさんNGNG
>>36
今後は、まずここを読んでから書き込むように。
http://www.2ch.net/guide/
0038ceuNGNG
はい。利用方法から読むべきでした。すいません。
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でフレームを開きまくって更新しまくるやつ
■ このスレッドは過去ログ倉庫に格納されています