■掲示板に戻る■ 1- 101- 最新50

便利なシェルスクリプト見せろ

1 :名無しさん@お腹いっぱい。 :2001/08/05(日) 03:25
~/bin/navi2ch

#!/bin/sh
emacs -e navi2ch

2 :名無しさん@お腹いっぱい。 :2001/08/05(日) 03:29
exit 1

3 :名無しさん@お腹いっぱい。 :2001/08/05(日) 03:35
その程度ならエイリアスだろ、ふつー。まあ、とりあえず
% file {,/usr{,/local}}/{,s}bin/* | grep shell
の結果でも眺めてみろや。

4 :名無しさん@お腹いっぱい。 :2001/08/05(日) 03:40
echo '1逝ってよし'

5 :ウドの大木 :2001/08/05(日) 04:39
#!/bin/bash

echo $SHLVL
if [ $SHLVL -lt 256 ]; then $0; fi

6 :名無しさん@お腹いっぱい。 :2001/08/05(日) 05:35
ん〜、個人的に便利に使ってるやつだけど…。

あるファイルを編集したいとき、
 % editfile hoge
とすれば、hoge から始まる行に移動した状態でエディタが起動する。
hoge から始まる行がなければ普通にエディタが起動する。

 #!/bin/csh -f
 set file="filename"
 set line=`grep -n ^$argv $file | head -n 1 | perl -ne 'm/^\d+/;print "$&\n"'`
 if ( "$line" == "" ) then
  set line=1
 endif
 mule -nw +$line $file

なぜ perl なぞを噛ませたのかは忘れた。

7 :6 :2001/08/05(日) 05:43
こういうのはどだ。~/bin/beep。
 #!/bin/csh -f
 xset b
 printf '\a'
 xset -b

make 終了を知らせる make ; beep とか、
ラブレター到着が待ち遠しい時は
 while (1){
  set mailsize=`ls -l /var/mail/$USER | awk '{print $5}'`
  if ( $oldmalisize != $mailsize ){
   beep
  endif
  set oldmailsize=$mailsize
  sleep 1
 end
とかよく使うかな。

8 :mu-mu :2001/08/05(日) 05:45
perlかますくらいなら全部perlで書いたほうが…
オイラが便利に使ってるのは、下のスクリプト。
asciiって名前で実行するとasciiダンプ。
そのまま書いてみたけど、掲示板cgiで
なんか変換されちゃいそうだな。

:
echo "\
00 01 02 03 04 05 06 07"'
00 000 nul soh stx etx eot enq ack bel
08 010 bs ht nl vt np cr so si
10 020 dle dc1 dc2 dc3 dc4 nak syn etb
18 030 can em sub esc fs gs rs us
20 040 sp ! " # $ % & '"'"'
28 050 ( ) * + , - . /
30 060 0 1 2 3 4 5 6 7
38 070 8 9 : ; < = > ?
40 100 @ A B C D E F G
48 110 H I J K L M N O
50 120 P Q R S T U V W
58 130 X Y Z [ \ ] ^ _
60 140 ` a b c d e f g
68 150 h i j k l m n o
70 160 p q r s t u v w
78 170 x y z { | } ~ del'

9 :6 :2001/08/05(日) 05:56
>>8
> perlかますくらいなら全部perlで書いたほうが…

まぁ、あくまで個人用スクリプトだし、その時楽になればよい
という観点で作ったものだから、再利用性とか汎用性とか
エラーチェックとか、なんで csh なんだゴルア とか突っ込まないでね。例えば >>6 のやつなんて、原型は5年前に作ったんだし。
# 大学2年かぁ…。歳とったなぁ。

10 :名無しさん@お腹いっぱい。 :2001/08/05(日) 06:26
bzip2非対応のtarをbzip2対応に変えるスクリプト書いて学校で使って
いる。新しいtar入れりゃ済むんだが、ファイルを消せない性格で、
quota overが迫っているもので。
そんなもんをシェルスクリプトで書くってのがドキュン丸出しだが。

11 :名無しさん@お腹いっぱい。 :2001/08/05(日) 08:06
gomi hogeでごみ箱~/trashに移動してくれるの書いて。

12 :名無しさん@お腹いっぱい。 :2001/08/05(日) 08:35
>>11
フルパスを覚えておいて、戻したいときには然るべき場所に
自動的に戻してくれる、というような機能を想定しているわけ?
もしそうだとしたらPerlか何か使わないと厳しいのでは?

13 :名無しさん@お腹いっぱい。 :2001/08/05(日) 09:36
>>12
perl使って。

14 :名有りさん@お腹へった :2001/08/05(日) 10:00
>>11-12
-[gomi]---------------------------------
#!/bin/sh

if [ $# -ne 1 ]; then
  echo "Usage: $0 file"
  exit 1
fi

if [ ! -d $HOME/trash ]; then
  /bin/mkdir $HOME/trash
fi

id=`/bin/date +'%Y%m&d%H%M%S'`.$$

if /bin/mv $1 $HOME/trash/$id; then
  /bin/ln -s $1 $HOME/trash/${id}~
fi
--[ungomi]------------------------------
#!/bin/sh

if [ $# -ne 1 ]; then
  echo "Usage: $0 id"
  exit 1
fi

if /bin/cp -p $HOME/trash/$1 $HOME/trash/${1}~; then
  /bin/rm $HOME/trash/$1 $HOME/trash/${1}~
fi
----------------------------------------

15 :名無しさん@お腹いっぱい。 :2001/08/05(日) 10:03
14マンセー

16 :14 :2001/08/05(日) 10:06
訂正
--- gomi.old Sun Aug 5 10:03:08 2001
+++ gomi   Sun Aug 5 10:03:30 2001
@@ -9,7 +9,7 @@
  /bin/mkdir $HOME/trash
fi

-id=`/bin/date +'%Y%m&d%H%M%S'`.$$
+id=`/bin/date +'%Y%m%d%H%M%S'`.$$

if /bin/mv $1 $HOME/trash/$id; then
  /bin/ln -s $1 $HOME/trash/${id}~

17 :14 :2001/08/05(日) 10:29
つうか細かい部分では結構ボロがでそうだな
もっと改良しないと
gomiで$1が相対パスで指定された時の対策とか
$1がディレクトリだった時のungomiの処理方法とか......

18 :名無しさん@お腹いっぱい。 :2001/08/05(日) 10:32
頑張れ

19 :14 :2001/08/05(日) 11:20
とりあえずこんな感じか......
いや 実のところ自分でも十分に動作確認してるわけでもないんで

--[gomi]--------------------------------
#!/bin/sh

if [ $# -ne 1 ]; then
  echo "Usage: $0 file"
  exit 1
fi

if [ ! -d $HOME/trash ]; then
  /bin/rm -fr $HOME/trash
  /bin/mkdir $HOME/trash
fi

id=`/bin/date +'%Y%m%d%H%M%S'`.$$

if echo $1 | /bin/grep '^/' >/dev/null; then
  file=$1
else
  file=`/bin/pwd`/$1
fi

/bin/mv $file $HOME/trash/$id && /bin/ln -s $file $HOME/trash/${id}~
--[ungomi]------------------------------
#!/bin/sh

if [ $# -ne 1 ]; then
  echo "Usage: $0 id"
  exit 1
fi

if [ ! -h $HOME/trash/${1}~ ]; then
  echo "$0: $1: Bad id."
  exit 1
fi

symlink=`/bin/ls -l $HOME/trash/${1}~ | /bin/sed 's/^.* -> //'`

/bin/mv $HOME/trash/$1 $symlink && /bin/rm $HOME/trash/${1}~
----------------------------------------

20 :3ch.sh :2001/08/07(火) 18:16
こっちの方が良かろう


100 名前:2ch.sh 投稿日:2001/08/07(火) 13:02

2ch流のサーバー監視スクリプトやらを組まないか?
で、オープンソースにしてばら撒く。

形式はどしよか?
Bash、Perl、AWK程度にしますか?
TK入れてXで動くようにしても良いけど(w

スレが違うなら誰か立ててくれー
2ちゃんねらーのディープさを
この業界に広めたい(嘘30%)

21 :名無しさん@お腹いっぱい。 :2001/08/07(火) 19:47
>>8
man ascii

22 :名無しさん@お腹いっぱい。 :2001/08/07(火) 23:17
>>20
具体的にどんなことがしたいんだ?
tail -fとかじゃダメなのか?

23 :22 :2001/08/07(火) 23:18
tail -fはどっちかというとログ監視か‥
サーバー監視ってなによ

24 :やめられない@名無しさん :2001/08/07(火) 23:24
んーおいらなら

pingする帰ってきた 何もしない
pingする帰ってこない メールする
ポート80見る GETできれば なにもしない
ポート80見る 帰ってこなければ メールする

ってできればいいな。
つーか、大昔そんなスレッドがあったような気がするぞグルァ!
簡単にbashで組まれてて出てた
探してみるぞぬぬぬ

25 :名無しさん@お腹いっぱい。 :2001/08/08(水) 10:28
>>20
monとかCheckserviceでいいよ。

http://www.kernel.org/software/mon/
http://www.linvision.com/checkservice/

26 : 無党派さん :2001/08/08(水) 12:46
for Netscape.

・bookmark_grep
egrep "$1" $HOME/.netscape*/bookmarks.html | perl -ne '/>[^"]*"([^"]*)".*>(.*)<\/A>/; print $2 . "\n" . "\t" . $1 . "\n"' | \nkf -j
・history_grep
history-db-list ~/.netscape/history.dat | egrep "$1" | sort | awk ' { print $1; $1 = ""; print " " $0 }'

27 :20 :2001/08/08(水) 15:12
そ、そんなソフトがあるとは。。。
修行に逝ってきます

ありがとでした

28 :やめられない@名無しさん :01/09/04 02:15 ID:MJnYVYrk
保守上げ!

29 :名無しさん@お腹いっぱい。 :01/09/04 04:24 ID:mfvfQ12o
zlessを
#!/bin/sh
PAGER=${TRUEPAGER-less}
export PAGER
PATH="/usr/bin:$PATH"
export PATH
exec zmore ${1+"$@"}
みたいに書き換えておいて、PAGERをzlessにする。
さらに、ncftpのpageコマンドを、asciiモード転送でなく
binaryモード転送を使うように改造。
これでls-lR.gzみたいなのが直に読める。

30 :名無しさん@お腹いっぱい。 :01/09/04 13:15 ID:HXo55Ajg
#!/bin/sh
shutdown -h now

31 :名無しさん@お腹いっぱい。 :01/09/04 17:55 ID:n8fBmkdQ
>>30
ちょっと違うけど、sudo を打つのが面倒いので

#!/bin/sh
sudo shutdown -hp now

てのが ${HOME}/bin にある

32 :名無しさん@お腹いっぱい。 :01/09/04 20:20 ID:mfvfQ12o
なんでaliasにしないんだ?

33 :vineのshutdownだが :01/09/04 21:37 ID:ckVTCj9c
#!/bin/sh
# Try to do the right thing for programs that rely on "/usr/bin/shutdown -r now"
# to shut down the machine.
prog=/sbin/shutdown
now=
for flag in $* ; do
if test ${flag} = "-h" ; then
prog=/usr/bin/halt
elif test ${flag} = "-p" ; then
prog="/usr/bin/halt -p "
elif test ${flag} = "-r" ; then
prog=/usr/bin/reboot
elif test ${flag} = "now" ; then
now=$flag
else
args="$args $flag"
fi
done
if [ -z "$args" -a "$prog" != /sbin/shutdown ] ; then
exec $prog $args
else
exec /sbin/shutdown $args $now
fi

普段rootでしか使ってなかったがsudoして無いみたいだな

34 :名無しさん@Emacs :01/09/04 23:40 ID:G4MrZYUw
rpm -ql usermode

35 :名無しさん@お腹へった :01/09/04 23:40 ID:vCt3z.P.
イメージファイルのindex HTMLを作るスクリプト。
なぜsort -uを入れたのかは忘れた。

#!/bin/sh
#
# 1997/04/04
#
if [ "$1" = "" -o "$1" = "-h" ]; then
echo "usage : mkgifindex {gif | jpg | etc..}"
fi

WK=/tmp/tmp_mkgifindex$$
HTML=index_img.html
if [ -f $HTML ]; then
rm $HTML
fi

ls *$1 |sort -u > $WK
echo '<html>' >> $HTML
echo "<head><title>`pwd`</title></head>" >> $HTML
echo '<body bgcolor="#ffffff">' >> $HTML
while read LINE
do
echo -n '<img src="' >> $HTML
echo -n "$LINE" >> $HTML
echo -n '">' >> $HTML
echo -n "$LINE" >> $HTML
echo "<hr>" >> $HTML
done < $WK
echo '</body>' >> $HTML
echo '</html>' >> $HTML
rm $WK

36 :名無しさん@お腹いっぱい。 :01/09/05 02:04 ID:diCXJs66
即席で改良してみたが。
case "$1" in
""|-h) echo "usage : mkgifindex {gif | jpg | etc..}" ;;
esac

: ${HTML=index_img.html}

(
echo '<html>'
echo "<head><title>`pwd`</title></head>"
echo '<body bgcolor="#ffffff">'
for IMGFILE in *.$1; do
test -f "$imgfile" && echo "<img src=\"$IMGFILE\">$IMGFILE<hr>"
done
echo '</body>'
echo '</html>'
) >$HTML

つーか、拡張子を引数にするなよ。
漏れだったら
for IMGFILE in "$@"; do
...
done
にしておいて*.jpg *.gifみたいに引数取れるようにするけど。

37 :名無しさん@お腹へった。 :01/09/05 12:20 ID:oR7193YM
>>36
まあ、好きにしてくれ。

38 :犬板より :01/09/06 03:14 ID:Nj3IkjKI
ユーザーの追加をしたいのだけど

IDとPassをわけてCSVで出力した

hoge01,Kx08xxva
hoge02,JJxoi012
.
.
.

のような形式をうまく追加するにはどーでしょか・・・

39 :名無しさん@お腹いっぱい。 :01/09/06 05:34 ID:D4C3ku2I
echo "$user,`crypt $Pass`"

40 :名無しさん@お腹いっぱい。 :01/09/06 05:35 ID:D4C3ku2I
をっと、
echo "$user,`crypt $Pass`">>data
だった。

41 : 無党派さん :01/09/06 12:24 ID:Thleg3XY
>>38
OSは?
adduser/useraddのようなものがあれば、uidの生成は任せて、
passwordの変更はcrypt + vipw + ed script、が簡単と思うけど。

42 :くらげ :01/09/06 15:02 ID:8.5qPxag
awkなら

BEGIN{
FS = ","
}
{
print "useradd -d /home/"$1" -m -g 100 -s /bin/bash "$1
}


awk -f adduser.awk list.txt | /bin/sh

だな
list.txtは
user,uhdf53907
って感じで
ID1,Pass1
ID2.Pass2
でやるべし

43 :名無しさん@お腹いっぱい。 :01/09/06 15:06 ID:tobfDaa.
>>38
chpasswd ってコマンドない?

44 : しびれ :01/09/06 15:29 ID:Thleg3XY
>>42
-F, って知ってた? 知ってたらスマソ

45 :名無しさん@お腹いっぱい。 :01/09/06 16:59 ID:AMZ41FAg
>>38
ずばりそのためのコマンド、newusers(8)を使え。

/etc/passwdと似たフォーマットのファイルを読み込んで、
ユーザを追加することができるよ。UID、GID、$HOMEも指定可能。

46 :くらげ :01/09/06 22:38
>>44
しらないっす

なになに?おせーてぇ〜

47 :やめられない@名無しさん :01/09/06 22:40
JPGをGIFに変換するような
(ついでに縮小化も)
ソフトウェアってないですかねぇ?

シェルで実行させたいんだけど、どーもみつからないので・・・

48 :名無しさん@お腹いっぱい。 :01/09/06 22:44
#! /bin/bash
sleep ${1-180}
echo -e "\a"
sleep 1
echo -e "\a"
sleep 1
echo -e "\a"
sleep 1
echo -e "\a"
sleep 1
echo -e "\a"

49 :名無しさん@お腹いっぱい。 :01/09/06 22:45
>>47
ImageMagickのconvert、mogrifyコマンド。
フォーマット変換、拡大、縮小、切り抜きなど
お手のもの。

アンチエイリアス、ディザー、モザイクみたいな
画像処理もコマンド一発でできるよ。

50 :47 :01/09/06 23:14
>>49
ありがとーん!
やっぱあるのですね
助かりました

51 :マターリ :01/09/11 20:53
保守あげ!

52 : 名無しさん@お腹いっぱい。 :01/09/12 02:10
>>50
perlやC++からもlibmagick呼び出せてcool!

53 :はろう :01/09/12 22:59
CSVファイル内からシェルに引数で渡す時
オークで$0〜$9を使うのはしっとりやすが
00,01,02,03,04,05,06,07,08,09,10,11,12,13,14,15
15つ目の引数を引っ張りたい時はどうしたらいいでしょうか?

54 :名無しさん@お腹いっぱい。 :01/09/12 23:03
あるディレクトリのShiftJISで書かれたファイル名をEUCに変換したいです。
nkfを使ってますがうまくいきません。
ファイル名に日本語使うな、というのは許して下さい。

55 :名無しさん@お腹いっぱい。 :01/09/12 23:45
>>53
そのまま $15 でとりだせない?

56 :名無しさん@お腹いっぱい。 :01/09/12 23:50
>>54

$ ls file.sjis | nkf -e > name.eucj
$ mv file.sjis `cat name.eucj`

なんてのはどうよ。

57 :名無しさん@Emacs :01/09/13 00:02
SJIS 固定なら -e より -Se の方がいいよ。

for SJIS in `find` ;do
EUC="`echo "$SJIS" | nkf -Se`"
[ -f "$EUC" ] || mv "$SJIS" "$EUC"
done

昔書いたやつだから自信無し。
ぱっと見、ディレクトリに弱そう。

58 :54 :01/09/13 03:00
>>56,57
ありがとう。対象としているのはwinでつくったzipファイルから解凍してできたファイルで
ファイル名にスペースも含まれているようで
for SJIS in `find` ;do のところが期待通りに動いてくれません。
スペースが含まれていない場合はうまくいきました。

59 :名無しさん@お腹いっぱい。 :01/09/13 08:51
find -type f|{
while read SJIS; do
...
done
}
$B$G=PMh$J$$(B?

60 :はろう :01/09/13 13:26
55へ $15で取り出せませんのでこまっとります。
$0〜$9までしか使えないのかな

61 :ほい :01/09/13 13:51
shift

62 :名無しさん@お腹いっぱい。 :01/09/13 13:57
>>60
${15}
じゃだめ?

63 :ほい :01/09/13 14:03
>60
shiftつかえ。$0〜$9しかつかえない。
$10は${1}0戸解釈される。
ちょと検索したらたくさんヒットしたぞ。
http://www.netfort.gr.jp/~tomokuni/lms/shell/shell.txt

64 :はろう :01/09/13 15:12
レスありがとうございます。
awk'{print $15}'だと無理なんですが
awk'{print $5,$15}'だとうまくいくんです。
単独でとれないんですか?
${15}は知ってますがうまくいかないんす;;
63さんのHPいけなかったす;;

65 :名無しさん@お腹いっぱい。 :01/09/13 15:19
>>63
> http://www.netfort.gr.jp/~tomokuni/lms/shell/shell.txt

すげぇ。これはすげぇ。

66 :ほい :01/09/13 15:41
httpがわざと全角にしてあったりする。
awkは別物。

67 :名無しさん@お腹いっぱい。 :01/09/13 15:52
>>64
とれるだろ。とれないって具体的にどうなってんの?エラーが出るとか?

68 : 名無しさん@お腹いっぱい :01/09/13 17:09
$ echo -1-,-2-,-3-,-4-,-5-,-6-,-7-,-8-,-9-,-10-,-11-,-12-,-13-,-14-,-15-,-16-,-17-,-18-,-19-,20 | awk -F, '{ print $15 }'
-15-
GNU awkでもnawkでもこうなるが?

69 :ほい :01/09/13 17:35
>>68
そりゃそうなるでしょ。
-1-,-2-,-3-,-4-,-5-,-6-,-7-,-8-,-9-,-10-,-11-,-12-,-13-,-14-,-15-,-16-,-17-,-18-,-19-,20
という一行をデータとしてawkに渡して、その一行をawkが処理してるんだから。
しぇるの$1,$2とかは関係してない。

しぇるとおうくの変数が、たまたま、$1とか同じかたちをしているけど別言語。
shiftを調べんか。ゴルァ

70 :ほい :01/09/13 17:40
すまそ。俺が馬鹿だ。ぼけてた。

71 :ほい :01/09/13 17:51
シェルの話とおもてた。(冷や汗
今までの話を全部忘れてくんなまし。
で、$15とかもできるはずた。

72 : 68 :01/09/13 18:00
つーか、

>>53
> CSVファイル内からシェルに引数で渡す時
> オークで$0〜$9を使うのはしっとりやすが
> 00,01,02,03,04,05,06,07,08,09,10,11,12,13,14,15
> 15つ目の引数を引っ張りたい時はどうしたらいいでしょうか?

この文書の意味が分かりにくい。一行目謎。
俺もどちらの話か、どころか何の話なのか分からなくなってきた…

73 :名無しさん@お腹いっぱい。 :01/09/13 18:05
>>71
>>53の書き方も分かりづらい。
それにうまくいかないってことはシェルとの関係でまずいとこがありそ。

74 :名無しさん@お腹いっぱい。 :01/09/13 18:06
「しっとりやす」もわかりづらい。

しっとり安。
すとっぷ高。

75 :名無しさん@お腹いっぱい。 :01/09/13 18:27
具体的にうまくいかない例を書こう。

76 :名無しさん@お腹いっぱい。 :01/09/13 20:58
""でかこってそうだな。

77 :名無しさん@Emacs :01/09/13 23:36
>>58

for SJIS in "$@" ;do でパラメタで渡す分にはいけると思う。
量が多かったらやっぱ find つかって
find -type f -exec スクリプト名 {} \; とかしてくれ。
ディレクトリは `find -type d|sort -r` を渡すとか。


次100 最新50
名前: E-mail (省略可) :

read.cgi ver5.26+ (01/10/21-)