シェルスクリプト総合@LINUX Part3
レス数が900を超えています。1000を超えると表示できなくなるよ。
0001login:Penguin
2007/07/10(火) 23:17:13ID:qGthZdMEまあそれはそれとして、BASHウゼーとか言われる心配なく
平和にLINUX的スクリプト談義しましょうよ。
初めての自作スクリプト、自信ないから見てください。な初心者から
トリッキーな技を駆使した作品を披露したい、蘊蓄を語りたい上級者まで
いろいろな人に参加して頂けると嬉しいです。
perlやらPythonやらの話が混ざっても良いんでない?
【sed】シェルスクリプト総合@LINUX Part2【awk】
http://pc11.2ch.net/test/read.cgi/linux/1154578200/
http://pc8.2ch.net/test/read.cgi/linux/1121994321/
>>2-5あたりに色々と。
0830login:Penguin
2008/03/24(月) 04:12:10ID:dtyI9N0mあえてシェルスクリプトで書くのならこんな感じかな。
#! /bin/bash
for file in "$@" ; do
num=${file#*(}
num=$( printf '%06d' "${num%)*}" )
mv "$file" "ero-pic${num}.jpg"
done
bashism が嫌いなら sed に置き換えれば
/bin/sh でも動くんじゃないかな
0831login:Penguin
2008/03/24(月) 06:30:29ID:bi7lOxG6for n in {1..100073}; mv お宝画像($n).jpg ero-pic`printf %06d $n`.jpg
0832login:Penguin
2008/03/24(月) 10:57:24ID:62iD1Dht>>826=>>828だけど、ええとそれってシェルスクリプトで使えるの?
/usr/bin/rename が置き換えられているとか?
どうなっているんだろう。
>>830
うちでは動かないようだ。
日本語が混じるとためかな。あとかっことか。
で結局こうやったのだけど。
$ls | sed s/.*\(//g | sed s/\).*//g | awk '{printf("mv \"お宝動画(%d).jpg\" \"ero-pic%06d.jpg\"\n",$1,$1)}' | sh
前やったときはawkの代わりにcのプログラムでやってた。まぁawkでも同じか。
0833login:Penguin
2008/03/24(月) 10:57:58ID:62iD1Dhtzshって便利そうだね。
0834login:Penguin
2008/03/24(月) 22:35:08ID:7MP5JU0gいろんなやり方があるけど、スクリプト内でいきなりmvなりrenameして
失敗すると悲劇なので、
mv "旧いお宝画像1.jpg" "新しいお宝画像1.jpg"
mv "旧いお宝画像2.jpg" "新しいお宝画像2.jpg"
mv "旧いお宝画像3.jpg" "新しいお宝画像3.jpg"
mv "旧いお宝画像4.jpg" "新しいお宝画像4.jpg"
mv "旧いお宝画像5.jpg" "新しいお宝画像5.jpg"
mv "旧いお宝画像6.jpg" "新しいお宝画像6.jpg"
(以下略)
みたいに一旦テキストに落として、それざっと眺めてからshで流しなおしたほうが良いよ。
以前、
mv "旧いお宝画像1.jpg" "新しいお宝画像1.jpg"
mv "旧いお宝画像2.jpg" "新しいお宝画像1.jpg"
mv "旧いお宝画像3.jpg" "新しいお宝画像1.jpg"
mv "旧いお宝画像4.jpg" "新しいお宝画像1.jpg"
mv "旧いお宝画像5.jpg" "新しいお宝画像1.jpg"
mv "旧いお宝画像6.jpg" "新しいお宝画像1.jpg"
(中略)
mv "旧いお宝画像1000.jpg" "新しいお宝画像1.jpg"
ってやっちゃった(´・ω・`)
0835login:Penguin
2008/03/24(月) 23:31:47ID:If29/JKDなんて頭の悪い…
0836login:Penguin
2008/03/24(月) 23:35:42ID:If29/JKD> perl版renameというのは普通のrenameとは違いますよね?多分。
renameがperl版renameじゃないUNIX類って具体的には何があります?
UNIX類じゃないけど、VMSはそうでした。
0837login:Penguin
2008/03/25(火) 00:24:28ID:FMsixLid> 日本語が混じるとためかな。あとかっことか。
括弧の方だな。すまん。クォートするなりしてやってくれ。
0838login:Penguin
2008/03/25(火) 00:44:35ID:Mm1m5DLO$ whereis rename
rename: /usr/bin/rename
$ less /usr/bin/rename
"/usr/bin/rename" may be a binary file. See it anyway?
多分debianが変わり者では?
0839login:Penguin
2008/03/25(火) 00:50:23ID:6V9ksjI9util-linux に入ってるよ。
0840login:Penguin
2008/03/25(火) 00:56:57ID:ukA1etix古典的なLinuxはこのrenameなのかな。
/*
* rename.c - aeb 2000-01-01
*
--------------------------------------------------------------
#!/bin/sh
if [ $# -le 2 ]; then echo call: rename from to files; exit; fi
FROM="$1"
TO="$2"
shift
shift
for i in $@; do N=`echo "$i" | sed "s/$FROM/$TO/g"`; mv "$i" "$N"; done
--------------------------------------------------------------
* This shell script will do renames of files, but may fail
* in cases involving special characters. Here a C version.
*/
0841login:Penguin
2008/03/25(火) 01:44:34ID:Mm1m5DLO古典的なLinuxというより一般的な普通のLinuxはそうだろうな。
Here C Version.のほうな。
http://d.hatena.ne.jp/takunama/20061123/rename
http://d.hatena.ne.jp/moriyoshi/searchdiary?word=*%5Bdebian%5D
debianのrenameは/usr/bin/prenameへのリンクで
prenameは Debian のパッケージメンテナが独自にパッケージ生成時に追加したスクリプト
つーのが真相らしい。perl版renameはdebianの方言つーことだわな。困ったもんだね。
0842login:Penguin
2008/03/25(火) 01:51:01ID:uIxNik7Bもし使いたかったら$HOME/binあたりに突っ込めばいいんじゃない
0843login:Penguin
2008/03/25(火) 02:00:22ID:+i6zdHekls -1 ero_dir | sort | ruby -nle 'printf "mv " + $_ + " " + $_.sub("お宝画像\(", "ero-pic").delete("\)")' | sh
0844login:Penguin
2008/03/25(火) 02:03:33ID:+i6zdHekls -1 ero_dir | ruby -nle 'print "mv " + $_ + " " + $_.sub("お宝画像\(", "ero-pic").delete("\)")' | sh
0845login:Penguin
2008/03/25(火) 02:05:27ID:6V9ksjI9> prenameは Debian のパッケージメンテナが独自にパッケージ生成時に追加したスクリプト
↓だってさ。
# This script was developed by Robin Barker ([email protected]),
# from Larry Wall's original script eg/rename from the perl source.
0846login:Penguin
2008/03/25(火) 03:45:05ID:mfggD9uB0847login:Penguin
2008/03/25(火) 06:52:15ID:Mm1m5DLOprenameは Debian のパッケージメンテナが独自に
「the perl source(perlのオルジナルセット、いわゆるラクダ本)」から
パッケージ生成時に追加したスクリプト、つーことですね。
/usr/bin/renameがC版の代わりにこれで置き換えて拡張してあるのが
debianの方言ということで。
実はラクダ本のやつは見たことがあるな。
0848login:Penguin
2008/03/25(火) 17:01:59ID:7L4Qk+Sn・Here a C versionは正規表現を全く理解しない
・perl版はperl版正規表現を理解する
というわけでLinuxでも三種類あるんですね。
0849login:Penguin
2008/03/25(火) 17:59:25ID:Mm1m5DLOスレからはずれるけど、apache/httpdのコンフィグがバージョン系列は
一緒なのにDebian系(ubuntuも)とRH系(RedHat/Fedora/CentOS)で
まるっきり違ってて面くらったことがある。
0850login:Penguin
2008/03/25(火) 18:02:21ID:IQ4Jbr/00851login:Penguin
2008/03/26(水) 21:17:50ID:B6BxqxUifind / -type d|sort|sed -ne'1b;s/[^\/]*\//┗━━/g;s/┗━━┗━━/┃ ┗━━/g;
s/┗━━┗━━/┃ ┗━━/g;
s/┗━━┃/┃ ┃/g;p'
これだと下記のような表示になるのですが
┗━━proc
┃ ┗━━1
┃ ┃ ┗━━attr
┃ ┃ ┗━━fd
┃ ┃ ┗━━task
┃ ┃ ┃ ┗━━1
┃ ┃ ┃ ┃ ┗━━attr
┃ ┃ ┃ ┃ ┗━━fd
┃ ┗━━1106
┃ ┃ ┗━━attr
不要な線を無くして見栄えを良くしたいのですが、何か良い方法はありませんでしょうか
┗━━proc
┃ ┗━━1
┃ ┃ ┗━━attr
┃ ┃ ┗━━fd
┃ ┃ ┗━━task
┃ ┃ ┗━━1
┃ ┃ ┗━━attr
┃ ┃ ┗━━fd
┃ ┗━━1106
┃ ┃ ┗━━attr
0852login:Penguin
2008/03/26(水) 21:52:30ID:f9ufLLgD0853851
2008/03/26(水) 22:04:51ID:B6BxqxUi# which tree
/usr/bin/which: no tree
残念なことに入ってないんです。
いろいろ調べまわった結果がこれなんです。
もう少し自分でも調べてきます。
0854login:Penguin
2008/03/26(水) 22:31:33ID:f9ufLLgD0855login:Penguin
2008/03/26(水) 23:21:22ID:5Znd97qm0856login:Penguin
2008/03/27(木) 00:04:09ID:ZXE2f6WUPATH が通ってないだけとか。locate 辺りで調べてみたら?
他に何かあったっけ>探す方法
0857851
2008/03/27(木) 00:35:50ID:yDbPGpUf下記のシェルスクリプトを「/usr/bin/tree」に置いて代用することにしました。
#!/usr/bin/perl
use strict;
my($top)=$ARGV[0];
if($top eq ""){ $top="."; }
print "[$top]\n";
&tree("",<$top/*>);
sub tree
{
my($bar,@dir)=@_;
for my $i(0..$#dir){
my($bl1)=($i<$#dir)?"┣":"┗";
my($bl2)=($i<$#dir)?"┃":" ";
my(@path)=split(/\//,$dir[$i]);
if(-d $dir[$i]){
print "$bar $bl1 [$path[$#path]]\n";
tree("$bar $bl2",<$dir[$i]/*>);
}else{
print "$bar $bl1 $path[$#path]\n";
}
}
}
ちょっと中身を理解するのは難しいですけど、使いこなせたらperlも結構便利そうですね。
0858login:Penguin
2008/03/27(木) 01:47:43ID:nVTK+35Z> 下記のシェルスクリプト
ちょっとマテ
0859login:Penguin
2008/03/27(木) 04:19:25ID:LOwKjqa0ちなみに、鳥は何なの?
0860851
2008/03/27(木) 19:23:00ID:yDbPGpUfちなみに鳥はCentOS4.6で、サーバー構築の勉強用で使ってます。
最小構成でインストールしたからtreeコマンドが入って無かったのかもしれないです。
0861login:Penguin
2008/03/27(木) 19:43:49ID:ysMS9Gn70862login:Penguin
2008/03/27(木) 19:56:21ID:ORW3s1IJemerge beautiful_girl
0863login:Penguin
2008/03/27(木) 23:51:02ID:QsCLAAygpstreeだと思うんだ・・
0864login:Penguin
2008/03/28(金) 00:18:06ID:jk3nWqNP0865login:Penguin
2008/03/28(金) 00:18:55ID:deyesKz0そだったw
0866789
2008/03/28(金) 01:42:56ID:QgSpL7VJもりあがってんじゃねーかw
0867login:Penguin
2008/03/28(金) 01:46:42ID:deyesKz0javascriptをjavaと呼ぶひと、こんばんはw
0868login:Penguin
2008/03/28(金) 14:06:32ID:Z7X2dF3N下記のように変数をperlに渡したいんですが、変数を認識してくれません。
どうすれば良いですか?
set hoge = funi
perl -pe 'print $hoge' file
0869login:Penguin
2008/03/28(金) 15:16:41ID:KjmTtujqシングルクォートをダブルクォートに変える
0870login:Penguin
2008/03/28(金) 15:47:45ID:Z7X2dF3Nありがとうございます。
試してみましたが、ダメのようです。
setenvで与えると上手く行きましたが、setで出来る方法も知りたいです。
0871login:Penguin
2008/03/28(金) 16:04:18ID:UFHtgKJCあえてやるなら
perl -e 'print "'"$hoge"'"'
これはperlに print "funi" という式を渡したに等しい。
0872login:Penguin
2008/03/28(金) 17:22:58ID:Z7X2dF3Nありがとうございます。
やってみたら出来ました。
意味は分かんないのでこれから調べてみようと思います。
0873login:Penguin
2008/03/28(金) 17:26:00ID:s6QtoqP9sh 系で書いた方がいいんじゃない?
0874login:Penguin
2008/03/29(土) 22:39:26ID:Je2/7f5V(manpage でなくともそれに準ずる文書であれば構いません)
JM Project の bash(1) などや google で検索してみたのですが見つかりません。
>&- を使用しているシェルスクリプトは見つかりましたが、そこには正式な説明はありませんでした。
google って記号検索がとても弱いようなので シェルスクリプトとか GAME言語みたいな記号で頑張るタイプのを探すのは大変。
何か効果的な検索技があるんですかね。
0875login:Penguin
2008/03/29(土) 22:48:22ID:6BdICwv71から100を1、2、3…ではなく
001、002、003…と出力させたい場合どうしたらよいでしょう?
val=1
while $val lt 100
do
echo $val
val=expr`$val+1`
done
0876login:Penguin
2008/03/29(土) 22:53:17ID:z7EKOxA5for i in {0..9}; do printf "%03d\n" ${i}; done
0877login:Penguin
2008/03/29(土) 22:57:09ID:ZodWq0Ht0878874
2008/03/29(土) 23:01:58ID:Je2/7f5V0879875
2008/03/29(土) 23:02:33ID:6BdICwv7凄まじくソッコーのレス ありがとうございます。
形式を指定してるってことくらいは分かりました。
調べてきます!
ありがとございました。
0880login:Penguin
2008/03/29(土) 23:06:18ID:z7EKOxA5単純に、必要な個数の名前のリストがありゃいいだけなら、
これでもいいと思う。
seq -f "moe_ero_guro_%03g.png" 0 9
0881login:Penguin
2008/03/29(土) 23:16:52ID:U1N+QPd9{0..9} は bash3 じゃないと動かないはず。
まだ bash 2.05b の環境ってけっこうあるよね?
0882login:Penguin
2008/03/29(土) 23:19:47ID:ZodWq0Ht0883login:Penguin
2008/03/29(土) 23:23:13ID:ZodWq0Ht単に連番がつくりたいとき個人的によくやるのは
yes '' | cat -n | sed 100q
とか。
0884login:Penguin
2008/03/29(土) 23:30:36ID:WiwCN3W0seq -f %03g 1 100
0885login:Penguin
2008/03/29(土) 23:33:55ID:z7EKOxA5聞かれたから一応、答えておこう。そんな環境は知らん。
bash 2.05bなのはRHEL3かVineか、2005年ぐらいで閉鎖空間へ移行したやつだけだろ。
0886login:Penguin
2008/03/29(土) 23:36:52ID:WiwCN3W00887874
2008/03/29(土) 23:41:18ID:Je2/7f5VLa Fonera の seq は -f オプションなんか無いので
printf "%03d\n" `seq 1 10`
0888login:Penguin
2008/03/30(日) 00:08:49ID:36hI9fyL$ printf "%03d%03d\n" 1 2 3 4 5
001002
003004
005000
0889login:Penguin
2008/03/30(日) 00:34:47ID:91o/3wOFseq -w 1 100
0890874
2008/03/30(日) 00:48:35ID:VLE1BQADUsage: seq [first [increment]] last
Print numbers from FIRST to LAST, in steps of INCREMENT.
-w ? そんなオプション見たこと無い。(笑)
0891login:Penguin
2008/03/30(日) 15:18:36ID:AAKkqqTbfor f in *.hoge; do
mv $f ${f%.hoge}.fuga
done
っていちいち打ち込んでるんだけど、なんかいい方法ない?
0892login:Penguin
2008/03/30(日) 16:16:42ID:SBrBro/C過去ログ読め。
0893login:Penguin
2008/04/01(火) 00:07:30ID:mTzNKv6N0894login:Penguin
2008/04/01(火) 00:12:45ID:+SHNTduy仕様出てるだろ。
0895login:Penguin
2008/04/01(火) 00:12:57ID:bWFHq2/Gnicovideo-dl
0896login:Penguin
2008/04/01(火) 22:06:47ID:Mk5CpRwrbash: oppai: command not found
0897login:Penguin
2008/04/04(金) 13:09:23ID:Lie/X+/Subuntu7.1 server を使用しています。
シェルスクリプトを勉強し始めてLinuxの設定セットアップシェルを作ろうとしています。
■入力受付状態を省略し、自動入力にするにはどのようにすればいいのでしょうか?
例えばsambaのコマンドですが
smbpasswd -a root
をするとパスワードの入力を求められます。
普段なら手動でxxxxと入力するのですが、この作業を自動化したいのです。
色々調べてsedの使い方等はわかりファイルの書き換えによる設定はおおむね出来たのですが
上記のやり方は見つけることができませんでした。
どうかアドバイス頂けないでしょうか?
宜しくお願い致します。
0898login:Penguin
2008/04/04(金) 21:25:51ID:WDSwmhLmWindowsから接続しているなら、TeraTermのマクロで何とかできるかもね。
ただユーザー名やパスワードが見えてしまう状態でファイルに保存するから
セキュリティ上には良くないかも
sambaの設定ファイルだけバックアップ取って
ユーザーとパスワードはその都度入力するのが無難かと
0899login:Penguin
2008/04/05(土) 11:09:58ID:co3/wC9lexpectスクリプト
expectに突いてくるサンプルを読んで
0900login:Penguin
2008/04/05(土) 11:16:23ID:co3/wC9lapt-get source expect
して、サンプル見て。
0901login:Penguin
2008/04/06(日) 14:52:52ID:20te6qz40902login:Penguin
2008/04/06(日) 15:42:41ID:6d0Si0sC0903login:Penguin
2008/04/06(日) 17:08:40ID:Y81bdbYIシェル・スクリプトは基本だが、perl は awk やら python やらのワン・オブ・ゼムに過ぎないので、それが普通。
MS-Windows95の頃、cgiはperlスクリプトでという謎の風潮があった名残で、あなたのような疑問が出て来るのだろう。
0904login:Penguin
2008/04/07(月) 02:13:58ID:WGY+O99Dそうそう。
別に、cgiがシェルスクリプトでも問題ないし(使いにくいけど)、なんでもいい。
perlだろうが難だろうが、所詮手段なんだから、どうでもいいじゃんw
0905login:Penguin
2008/04/07(月) 08:01:37ID:DKzh8iuy多分、
同じ構造化手続き型言語なのに何で方言によって使える使えないみたいなこと言ってんの?
ということかと。
0906login:Penguin
2008/04/07(月) 20:27:53ID:ky4RCRjOそうなら「シェル」スクリプトスレで何言ってんだこのバカは?
ってな話しにしかならんからそれはなかろ。
0907login:Penguin
2008/04/08(火) 00:22:25ID:xWC78uSv0908login:Penguin
2008/04/08(火) 21:18:54ID:mlftshp4ttp://en.wikipedia.org/wiki/Alfred_V._Aho
0909login:Penguin
2008/04/08(火) 21:20:29ID:L1HkWImv0910login:Penguin
2008/04/09(水) 01:18:06ID:8anDW64k0911login:Penguin
2008/04/09(水) 01:40:20ID:vyKS0pT60912login:Penguin
2008/04/09(水) 02:03:59ID:JRgbXb6Kこの人もフィンランドだったな
0913login:Penguin
2008/04/09(水) 13:12:39ID:vyKS0pT60914login:Penguin
2008/04/09(水) 18:16:40ID:pjxRKuKNしょーもないレスして悲しくなってこないか?
0915login:Penguin
2008/04/09(水) 19:47:59ID:D07VbGXNbash: shoumo: command not found
0916login:Penguin
2008/04/09(水) 21:12:29ID:HudBzGNB/usr/local/mh/bin/show
なんていう時代もありました。
0917login:Penguin
2008/04/11(金) 16:25:19ID:3vnovWPW0918login:Penguin
2008/04/11(金) 16:30:16ID:p4V9vMAs0919login:Penguin
2008/04/11(金) 16:38:37ID:3vnovWPWめちゃくちゃありがとうございます!!!
0920login:Penguin
2008/04/11(金) 16:41:55ID:h4xwic1Oecho 00{0..9} 0{10..99} {100..999}
zsh なら
echo {000..999}
0921login:Penguin
2008/04/13(日) 00:08:59ID:C50QhsEF例として、mltermとurxvtを立ちあげ、
mltermでhogedを起動して、もうurxvtでhogec -e 'echo aaa'ってやったら
mltermの画面にaaaとか表示されるようなものです
同時に複数の作業をさせてるときにその進捗を1つのコンソールで見通せたらなとか思いまして…
0922login:Penguin
2008/04/13(日) 00:37:03ID:tBy+WuAg0923login:Penguin
2008/04/13(日) 08:41:28ID:LTuSsBD0端末B $ echo 'term B' > /dev/console
に類したことは、まれにやる。
0924login:Penguin
2008/04/13(日) 09:11:42ID:DHms7wovmlterm$ screen
urxvt$ screen -x
0925login:Penguin
2008/04/13(日) 09:16:44ID:DHms7wov0926login:Penguin
2008/04/13(日) 10:23:50ID:+bcR3tRWwall
0927login:Penguin
2008/04/13(日) 15:29:10ID:7nxEkg5Vそれは違うんじゃね?
0928login:Penguin
2008/04/14(月) 21:52:01ID:yIAGZ+M9┐('〜`;)┌ モウツカレタ
0929login:Penguin
2008/04/15(火) 07:03:22ID:KF+FiULrレス数が900を超えています。1000を超えると表示できなくなるよ。