[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 05/10 01:32 / Filesize : 243 KB / Number-of Response : 985
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

シェルスクリプト総合@LINUX Part4



1 名前:login:Penguin mailto:sage [2008/05/17(土) 13:44:57 ID:9hFWtCOD]
UNIX板のスレを見ている方も多数おられるかと思いますが、
まあそれはそれとして、BASHウゼーとか言われる心配なく
平和にLINUX的スクリプト談義しましょうよ。

初めての自作スクリプト、自信ないから見てください。な初心者から
トリッキーな技を駆使した作品を披露したい、蘊蓄を語りたい上級者まで
いろいろな人に参加して頂けると嬉しいです。

perlやらPythonやらの話が混ざっても良いんでない?

Part3 : pc11.2ch.net/test/read.cgi/linux/1184077033/
Part2 : pc11.2ch.net/test/read.cgi/linux/1154578200/
Part1 : pc8.2ch.net/test/read.cgi/linux/1121994321/

>>2-5あたりに色々と。

196 名前:login:Penguin [2008/06/19(木) 01:45:49 ID:syeq8gZ9]
>>195
perl スクリプトを別ファイルに追い出す。

197 名前:login:Penguin mailto:sage [2008/06/19(木) 08:19:04 ID:k7GKeo3u]
シェルに評価されてはいけない部分をシングルクォートする。
i=tama
perl -e 'printf( "%s: nya-\n", '"$i"' )'

198 名前:login:Penguin mailto:sage [2008/06/19(木) 17:34:35 ID:qZMvy29K]
shの質問です
スクリプトがCtrl+Cなどで終了させられた時に特定の動作を持たせたいのですが
どのようにすれば実装できるでしょうか?

199 名前:login:Penguin mailto:sage [2008/06/19(木) 17:37:01 ID:syeq8gZ9]
>>198
trap

200 名前:login:Penguin mailto:sage [2008/06/19(木) 18:08:53 ID:qZMvy29K]
>>199
ありがとうございますm(_ _)m

201 名前:login:Penguin mailto:sage [2008/06/19(木) 23:30:35 ID:JFsnEc1J]
>>196
 なるべく一つのファイルにまとめたいんで。。。アドバイスありがとうございます。
>>197
197さんのアドバイスを参考にして、perlの行を下のように書くと動きました。
tmp=`perl -e '$a = "'"$i"'"; if ( $a=~ /^\S+(\S{1})$/ ) { print "s${ 1 }x_player" }'`

 しかし、こう書くと$aの前のシングルクォーテーションがバッククォーテーションで
perlを実行した時に消えると思うのですが、sh -x で確認して見ると消えてません。
これで正しく書けているんでしょうか?勉強不足ですみませんがよろしくお願い致します。

202 名前:login:Penguin mailto:sage [2008/06/20(金) 08:28:49 ID:PYgL06kk]
evalに渡すと消えるという意味なら。

tmp=`eval perl -e "'"'$a = "'"'""$i""'"'"; if ( $a=~  /^\S+(\S{1})$/ ) { print "s${ 1 }x_player" }'"'"`

203 名前:login:Penguin mailto:sage [2008/06/20(金) 09:48:11 ID:mQhh6bQc]
tmp=$(perl -e 'print "s${1}x_player" if $ARGV[0]=~/^\S+(\S{1})$/' "$i")

204 名前:login:Penguin mailto:sage [2008/06/21(土) 01:08:40 ID:lACEyUp0]
shでスクリプトを走らせている時に
スクリプト内でスーパーユーザの権限を得るにはどうやったらいいのでしょうか

スクリプトにsuを埋め込むとスクリプトが止まってしまって
exitしてから再びスクリプトが動き出すのですが
権限だけ持たせてスクリプトをそのまま走らせたいと思っています
何か手は無いでしょうか



205 名前:login:Penguin mailto:sage [2008/06/21(土) 01:11:38 ID:4k/SNXDG]
>>204
sudo

206 名前:login:Penguin mailto:sage [2008/06/21(土) 01:42:03 ID:EyYhn7dK]
リサ

207 名前:login:Penguin mailto:sage [2008/06/21(土) 01:49:53 ID:lACEyUp0]
>>205
ありがとうございます

(自分にとっては)有用なスクリプトが組めましたm(_ _)m
感謝の極みです

208 名前:login:Penguin mailto:sage [2008/06/21(土) 12:58:15 ID:9C5PYE0l]
ふとした疑問だが、スクリプト内でスーパー・ユーザにスイッチするのと、スクリプト自体をスーパー・ユーザ専用にするのと、どちらが安全なのだろう。

209 名前:login:Penguin mailto:sage [2008/06/21(土) 13:28:05 ID:ESYd9xh6]
>>208
運用の仕方によって変わるでしょ。
一概にどちらが安全とか言えないよ。

210 名前:login:Penguin mailto:sage [2008/06/22(日) 13:34:22 ID:IsXP6W78]
標準出力は標準出力のままで標準エラーだけをパイプしたいのですが
どのようにすればよいですか?(sh)


211 名前:login:Penguin mailto:sage [2008/06/22(日) 13:38:00 ID:aBc+5bz2]
exec 3>&1
(echo stdout; echo stderr >&2) 2>&1 1>&3 | rev

212 名前:210 mailto:sage [2008/06/22(日) 13:59:15 ID:IsXP6W78]
>>211
どうもありがとうございました。

213 名前:login:Penguin [2008/06/22(日) 16:57:49 ID:3HpeFvyL]
あれ?更新されてない


214 名前:login:Penguin [2008/06/22(日) 17:03:12 ID:3HpeFvyL]
rsyncをあえてつかわずローカルでのWEBサイトの更新を別のPCへFTP(put)
したいのですが混乱してきましたどなたかわかりますでしょうか?
#!bin/sh
#pukiwiki内のファイルで更新のあったファイルのあぶりだし。
echo = "`ls --full-time -F`" > fulltime
awk '{print $6$7}' /var/www/html/pukiwiki/fulltime
awk '{print $6$7}' /var/www/html/pukiwikibk/fulltime2
diff=diff /var/www/html/pukiwiki/fulltime /var/www/html/pukiwikibk/fulltime2
#diffの中身が空なら抜ける
if [ "$diff"-eq /dev/null ];then
logout
#diffの内容がディレクトリなら再度中身のファイルの更新がないかを確認。
#diffの中から$10のファイル名を取り出す



215 名前:login:Penguin mailto:sage [2008/06/22(日) 17:04:18 ID:G5GD5xl+]
>>214
lftp使え。

216 名前:login:Penguin [2008/06/22(日) 17:13:28 ID:3HpeFvyL]
わかりました。ありがとうございます。lftp調べてみます。

217 名前:login:Penguin [2008/06/22(日) 17:19:23 ID:3HpeFvyL]
ローカルになく、リモートにのみあるファイルを削除したいときは
mirror -R -e

mirror -e
などできるみたいですが、
ローカルで更新されたファイルのみアップといったこともできるのでしょうか?

218 名前:login:Penguin [2008/06/22(日) 17:47:05 ID:3HpeFvyL]
#!/bin/sh

cd /var/www/html/pukiwiki
lftp -e "mirror -e -vvv pukiwiki; bye" ftp:XX.XX.XX.XX/var/www/html/pukiwiki

これだけでいけますでしょうか?

219 名前:login:Penguin mailto:sage [2008/06/22(日) 18:16:38 ID:7nMjRrut]
n 更新されたのみ

mirror -Rn


220 名前:login:Penguin mailto:sage [2008/06/22(日) 22:21:11 ID:R/kAIh0A]
ubuntu初心者スレから誘導されました。

成形した時刻の文字列をクリップボードにコピーするシェルスクリプトを作りたいのですが
まずdateで時刻を取得出来ることがわかりました。それで日付や時間を成形してみました。
で、その取得した時刻をクリップボードにコピーさせる方法が分かりません。

ubnutuは8.04です。よろしくお願いします。

221 名前:login:Penguin mailto:sage [2008/06/22(日) 22:29:53 ID:G5GD5xl+]
>>220
xclip が使える。ただし日本語が通らない。
ruby がクリップボード操作できるみたい。

222 名前:login:Penguin mailto:sage [2008/06/22(日) 23:37:38 ID:MIeLc8tv]
シェルスクリプトで正規表現使いたいのですが、
末尾が .jp のものだけマッチさせたい場合は
$\.jp
でよろしいのでしょうか?

223 名前:login:Penguin mailto:sage [2008/06/22(日) 23:55:19 ID:iLaxDbCt]
シェルだけで正規表現って扱えるの?

224 名前:login:Penguin [2008/06/23(月) 00:09:49 ID:xSXSaj7v]
>>223
[[ 'www.example.jp' =~ '\.jp$' ]] && echo OK



225 名前:login:Penguin mailto:sage [2008/06/23(月) 00:26:20 ID:bFQcdw6C]
>>223
man expr

226 名前:login:Penguin [2008/06/23(月) 07:14:57 ID:xSXSaj7v]
>>225
expr は外部コマンドじゃね?

227 名前:login:Penguin mailto:sage [2008/06/23(月) 07:23:33 ID:/dfygF5Q]
bash 3.2.33だが>>224だとOKと表示されない件について

228 名前:login:Penguin mailto:sage [2008/06/23(月) 07:55:06 ID:xSXSaj7v]
quote しちゃだめになったのか。

[[ 'www.example.jp' =~ \.jp$ ]] && echo OK

229 名前:login:Penguin mailto:sage [2008/06/23(月) 08:04:56 ID:E3xyu4wD]
>>221
そうですか。日本語通らないですか。
rubyがいけるならPythonもいけるのかな。探してみます。ありがとうございます。

230 名前:login:Penguin mailto:sage [2008/06/23(月) 13:11:35 ID:R4pyjC2R]
>>229
xselでおk

231 名前:login:Penguin mailto:sage [2008/06/23(月) 20:44:19 ID:E3xyu4wD]
>>230
さっそく入れて使ってみました。
中クリックで文字列を選択した内容をそのまま貼り付けれてものすごく便利でした!
いいものを知りました。ありがとうございます。

で本題
スクリプトはこんな感じまで書きました。
#!/bin/bash

y=`date +%Y`
m=`date +%m`
d=`date +%d`
t=`date +%T`
DATE= $y/$m/$d/" "$t
echo $DATE

これで、chmod -x で権限を与えて実行すると、現在の時間を返してくれるようになりました。
が、xselを使って$DATEをクリップボード(かプライマリ)にコピーする方法が分かりませんでした。--inputは変数が代入出来ないようですし。
xsel -p  < $DATE ではうまくいきませんでした(ファイルじゃないので当たり前ですか)

232 名前:login:Penguin mailto:sage [2008/06/23(月) 20:57:33 ID:II3EglSV]
>>231
>xsel -p < $DATE ではうまくいきませんでした

echo $DATE > xsel -p


233 名前:login:Penguin mailto:sage [2008/06/23(月) 21:41:12 ID:t++FsyID]
echo $DATE | xsel -i

234 名前:login:Penguin mailto:sage [2008/06/23(月) 21:51:30 ID:E3xyu4wD]
>>232
どうもうまくいきませんでした。
修正したものを実行すると、〜.shと同じディレクトリに xsel という中身が"-p"の入ったファイルが作成されてました。



235 名前:login:Penguin mailto:sage [2008/06/23(月) 21:54:47 ID:eV6dG77Y]
>>234 look asap >>233

236 名前:login:Penguin mailto:sage [2008/06/23(月) 22:05:35 ID:E3xyu4wD]
>>233
こちらもうまくいきませんでした。

実行すると、以下の結果が表示されました。

./date_clipboard.sh: 7: 2008/06/23/ 21:52:49: not found

/が入っていると、ディレクトリと認識してしまうのではないかと思って、/を外して数字だけ並んだものも作って見ましたが、だめでした。 同じく echoで$DATEの中身とnot foundと出されました。

>>235
こういうことでしょうか?

#!/bin/bash

y=`date +%Y`
m=`date +%m`
d=`date +%d`
t=`date +%T`
DATE= $y/$m/$d/" "$t
look asap
echo $DATE | xsel -i

これを実行しても、同じく、echoで$DATEの中身とnot foundと出ました。

237 名前:login:Penguin mailto:sage [2008/06/23(月) 22:18:40 ID:t++FsyID]
#!/bin/sh
date "+%Y/%m/%d %T" | xsel -i


238 名前:login:Penguin mailto:sage [2008/06/23(月) 22:26:25 ID:E3xyu4wD]
>>237
おお! 見事に表示されました。
dateごと渡してやればよかったのですね。勉強になりました。
ありがとうございました。

239 名前:232 mailto:sage [2008/06/23(月) 22:40:24 ID:7JKTU8Gt]
ごめん! (汗)

240 名前:login:Penguin mailto:sage [2008/06/23(月) 22:50:21 ID:xSXSaj7v]
>>238
> dateごと渡してやればよかったのですね。
別に echo $DATE | xsel -i でもいいよ。

241 名前:login:Penguin mailto:sage [2008/06/23(月) 22:51:35 ID:xSXSaj7v]
>>236
> DATE= $y/$m/$d/" "$t
問題はここだ。
= の後の空白が余分。

むしろ
DATE="$y/$m/$d/ $t"
と書くべき。

242 名前:login:Penguin mailto:sage [2008/06/24(火) 08:29:39 ID:/ei8InYp]
>>239
いえいえ。

>>240-241
空白がまずかったのですね。気がつきませんでしたorz
ダブルクオーテーションでくくると文字列がそのまま出てくる気がして、
> DATE= $y/$m/$d/" "$t の途中の" "は空白を出力したつもりでしたが、全体をくくってやってもよかったのですね。実行して確認しました。

#!/bin/sh

y=`date +%Y`
m=`date +%m`
d=`date +%d`
t=`date +%T`
DATE="$y/$m/$d/ $t"
echo $DATE | xsel -b -i

(xsei -b -iでクリップボードにもコピー出来るようにしてあります。xsel -pでも動きました。)
見え栄は>>237のほうがいいですねw

勉強になりました。ありがとうございました!



243 名前:login:Penguin mailto:sage [2008/06/24(火) 08:33:49 ID:/ei8InYp]
一部ミスりました

× ダブルクオーテーションでくくると文字列がそのまま出てくる気がして、
○ ダブルクオーテーションでくくると文字列がそのまま出てくる気がして、 全体をくくらずにしていました。


244 名前:login:Penguin mailto:sage [2008/06/24(火) 09:36:52 ID:7q12wxxB]
>>242
> ダブルクオーテーションでくくると文字列がそのまま出てくる気がして、
www.linux.or.jp/JM/html/GNU_bash/man1/bash.1.html#lbAQ

YEAR=2008
echo "$YEAR"
echo '$YEAR'



245 名前:login:Penguin mailto:sage [2008/06/24(火) 10:37:39 ID:/ei8InYp]
>>244
そうだったのですか、シングルクオーテーションは文字として出てきて、ダブルクオーテーションでは、$も例外として、$が機能すると言うことですか。
いやはや知らないことだらけでした。勉強になります。ありがとうございます。

246 名前:login:Penguin mailto:sage [2008/06/24(火) 19:18:26 ID:GHnoP+if]
初心者の書くスクリプトは、むしろダブルクォートを忘れて
インジェクション的な事故多発なわけですがw

if [ x"$HOGE" == x"DQN" ] ; then

ちゃんとこういう風にまで保護されているスクリプトは稀。

247 名前:login:Penguin mailto:sage [2008/06/24(火) 19:36:34 ID:RnXDPQy/]
俺さ、その x が何のためにあるのか、以前から不思議なんだ。

if [ "${HOGE}"="DQN" ] ; then

との違いは何?

248 名前:login:Penguin mailto:sage [2008/06/24(火) 19:40:10 ID:y8G0f9r3]
$HOGEが未定義の場合どうなるんだ?

249 名前:login:Penguin mailto:sage [2008/06/24(火) 19:41:45 ID:7q12wxxB]
>>247
= と == は違う。
== の前後に空白が必要。

その上で、$HOGE が空文字列の場合にエラーになるのを回避するため。

250 名前:login:Penguin mailto:sage [2008/06/24(火) 19:50:56 ID:GHnoP+if]
>>247 の = は == の typo でしょうw

で、"${HOGE}" == "DQN" だったら $HOGE が未定義でもエラーにならない。
x"$HOGE" == x"DQN" との違いは漏れは知らん。ジジイ仕様の /bin/sh とかが
あって "${HOGE}" できない場合があるんじゃない?

× export HOGE="DQN"
○ HOGE="DQN"; export HOGE

こんな環境もあるぐらいだからなぁ・・・・・・

251 名前:login:Penguin mailto:sage [2008/06/24(火) 20:00:18 ID:7q12wxxB]
>>250
> で、"${HOGE}" == "DQN" だったら $HOGE が未定義でもエラーにならない。
bash はそうだけど、エラーになるシェルもある。
Solaris の /bin/sh とか。

252 名前:login:Penguin mailto:sage [2008/06/24(火) 20:07:28 ID:GHnoP+if]
やはり Solaris かw そんな気はしていた。

普段は Linux 使ってるから必然と bash になっちゃうんだよね。sh で出来たっけ?
とか結構記憶が曖昧になってしまって鬱。場合にもよるけど、ポータビリティを
意識してなーんとなく昔ながらの書き方を守ってる漏れ・・・・・

あえて #!/bin/bash って書くべき?w

253 名前:login:Penguin mailto:sage [2008/06/25(水) 02:03:39 ID:QRiAgjkv]
Solarisの古いshなんて無視していいだろ。
POSIX shell (ash, bash, ksh, ...) で動けばいいよ

254 名前:login:Penguin mailto:sage [2008/06/25(水) 03:24:07 ID:CH5fnn3k]
実際 そんなに拡張されてないし でしょw
#!/bin/bash
でいいよね。



255 名前:login:Penguin mailto:sage [2008/06/25(水) 03:42:02 ID:r4HiK5gk]
>>254
スクリプト動かすのに重量級のbashなんか使わないだろ。
#!/bin/sh
で十分。

256 名前:login:Penguin mailto:sage [2008/06/25(水) 04:07:08 ID:CZiflGY7]
>>255
先生!うちの環境では
file /bin/sh
/bin/sh: symbolic link to `bash'
です.どうすればいいですか?

257 名前:login:Penguin mailto:sage [2008/06/25(水) 04:46:49 ID:N+m64wV+]
>>255 i486SX/16MHz

258 名前:login:Penguin mailto:sage [2008/06/25(水) 04:59:00 ID:CH5fnn3k]
だから もう 手じかな環境では
/bin/shはないでしょ。
/bin/shと書けばいちおー 互換モードで動くってだけで。

259 名前:login:Penguin mailto:sage [2008/06/25(水) 10:58:55 ID:NWVIKvCl]
FreeBSDの事もあるしshで書いておこうってだけじゃね

260 名前:login:Penguin mailto:sage [2008/06/25(水) 11:25:51 ID:r4HiK5gk]
debian 系だと
$ file /bin/sh
/bin/sh: symbolic link to `dash'

~$ ls -l /bin/bash /bin/dash
-rwxr-xr-x 1 root root 686K 2008-05-13 03:33 /bin/bash*
-rwxr-xr-x 1 root root 79K 2008-03-12 20:22 /bin/dash*

サイズが全然違う。

261 名前:login:Penguin mailto:sage [2008/06/25(水) 11:46:13 ID:e3mj3BLL]
別にどっちかに決める必要なんてない。
portabiltiy が必要なスクリプトは protable に書く。
そうでなければ bash 依存な書き方をしてもいい。
それだけのこと。

262 名前:login:Penguin mailto:sage [2008/06/25(水) 12:06:01 ID:foNddTWJ]
>>256
ぶっちゃけbashはzshよりも遅い。軽量のashなんかとは比べるべくもなく。

ログインシェルとしてなら使い勝手云々ってのがあるけど、
/bin/shをbashにしておくメリットはあんまないよ。

263 名前:login:Penguin mailto:sage [2008/06/25(水) 12:36:18 ID:Qkn+OwYP]
なんかもっともらしいウソが垂れ流されてるぞ。

>>251
>> で、"${HOGE}" == "DQN" だったら $HOGE が未定義でもエラーにならない。
>bash はそうだけど、エラーになるシェルもある。
>Solaris の /bin/sh とか。

solaris ではたしかにエラーになるけど、それは $HOGE が未定義だからではない。
== という演算子自体がないため。
互換性を考えると文字列の比較には == ではなく = を使う。
= なら $HOGE が未定義でもエラーにならない。

x"$HOGE" のようにするのは、$HOGE が -f とか ! のような文字列だったときに
別の意味に解釈されないようにする対策。

264 名前:login:Penguin mailto:sage [2008/06/25(水) 17:32:32 ID:PrRjFF/A]
マジッスカ
ちょっとコンビニで Soliras 買ってくる><



265 名前:login:Penguin mailto:sage [2008/06/25(水) 20:22:07 ID:g812rZ0o]
>>251
Sun4 で試したら、未定義でもエラーにならんかったよ。

$ cat test.sh
uname -rvs
VAR="VAL"
[ "${VAR}" = "VAL" ] && 'true'
[ x"${VAR}" = x"VAL" ] && 'true'

unset VAR
[ "${VAR}" = "VAL" ] && 'true'
[ x"${VAR}" = x"VAL" ] && 'true'
$ /bin/sh -x test.sh
+ uname -rvs
SunOS 4.1.4-JL 2
VAR=VAL
+ [ VAL = VAL ]
+ true
+ [ xVAL = xVAL ]
+ true
+ unset VAR
+ [  = VAL ]
+ [ x = xVAL ]

266 名前:login:Penguin mailto:sage [2008/06/26(木) 15:09:48 ID:ZojLTS6b]
お邪魔します。

シェルスクリプトを走らせて、あるシェルスクリプトを起動させるようにするにはどういう書き方したらよいですか。
また、そのシェルスクリプトを走らせた結果を変数にぶちゅっと入れる書き方はどうしたらいいですか。

267 名前:login:Penguin mailto:sage [2008/06/26(木) 15:35:52 ID:ZojLTS6b]
事故解決しますた。すいません。

268 名前:login:Penguin mailto:sage [2008/06/26(木) 22:18:06 ID:ZPxwXTvf]
ぶちゅっ


269 名前:login:Penguin [2008/06/28(土) 20:17:43 ID:/ZK60QF9]
シェルでエロゲをつくるためにはどうしたらいいですか

270 名前:login:Penguin mailto:sage [2008/06/28(土) 21:21:44 ID:MDU5A1fa]
エロゲって何ですか

271 名前:login:Penguin [2008/06/28(土) 22:52:16 ID:/ZK60QF9]
linuxがwindowsに唯一負けてるのがエロゲです

272 名前:login:Penguin mailto:sage [2008/06/28(土) 23:29:11 ID:fs03Gty7]
だとすれば、sh スクリプトでなく、BAT ファイルで作ると良いのではないでしょうか

273 名前:login:Penguin [2008/06/28(土) 23:48:10 ID:ZJYzC1iZ]
windowsに対抗するため、Linuxにエロゲを導入します
また、複数のplayerがエロゲサーバにtelnetしてplayすることを想定としているため
GUIではなくCUIで行いたいと思っています

274 名前:login:Penguin mailto:sage [2008/06/29(日) 00:53:49 ID:nwf205tS]
>>273
CUIでいかにエロさを出すかが問題だ

絵もない本当のノベルゲームでいいっていうなら、
ひたすらechoとifとかwhileとかcaseを駆使すればできる気がするけど

今どきtelnetってのもツッコミどころだけどな



275 名前:login:Penguin mailto:sage [2008/06/29(日) 01:02:35 ID:wXyVSJIl]
Nethackはエロゲ
異論は認める

276 名前:login:Penguin mailto:sage [2008/06/29(日) 01:16:19 ID:4XAvfgBl]
NetHackを2ch-AA拡張すればエロくなる。

主人公:( 'A`)
ヒロイン:J( 'ー`)し

てな具合。そんでもって濡れ場ではフルスクリーンAAでアニメーションするの。

277 名前:login:Penguin mailto:sage [2008/06/29(日) 02:09:45 ID:O4g3tYWz]
エロゲの話はこっちで。

Linuxで動くオープンソースエロゲを作ろう!2
pc11.2ch.net/test/read.cgi/linux/1178690729/

278 名前:login:Penguin mailto:sage [2008/06/30(月) 18:35:41 ID:Y3MWGahT]
Linux + Darwin Streaming Server で自分専用の放送局を何チャンネルも建てて
どこでも自分のコレクションした音楽を聞けるようにして楽しんでいるのですが、
面倒くさいのは、メタファイルを用意せねばならない点。
例えばマイケル・ジャクソンだけを集めた専門局を作るとします。これを
1). www.example.com/michael.pls
2). www.example.com/michael.m3u
などといったメタファイルに、以下のような内容を記述しておいてやらねばなりません。
1). [playlist]
File1=www.example.com:8000/michael
Title1=nina
Length1=-1
NumberOfEntries=1
Version=2
2). www.example.com:8000/michael
ま、大した量じゃないので、今まではいちいち手作業で cp して vi で編集していたのですが、
これを、例えば
$ mkpls michael
などと言った変数 $streaming_name を与えれば、
自動的にファイル内の特定の部分も書き換えて、
かつ、.pls .m3u それぞれのストリーミング用メタファイルも
まとめて生成してくれるようなスクリプトがあれば便利なのに、
と思っているのですが、どう書けばいいのかサッパリ解りません。
基本は、単に変数を含んだひな形を用意し、ひな形を複製、与えられた変数を代入して、
変数の名前+拡張子で保存、というだけのことだと思うんですが。。。。orz

279 名前:login:Penguin [2008/06/30(月) 22:16:41 ID:mYyaCshH]
超入門者です。下記内容のシェルを作成しなければならないのですが、参考書を見てもよく分からず
知り合いにも分かる人間がおりません。。ごめんなさい、どなたかご教授頂けないでしょうか?

・/var/log/mailを解析して特定のユーザに関する調査を実施して結果をファイル出力する。
(条件)
 ・スクリプトの実行形式は「スクリプト名 ログファイル名 メールアドレス」
 ・受信メール数と送信メール数を集計する。
 ・調査をするユーザは引数として与える。
 ・調査をするユーザはtest@toyo.co.jp
どのような記述にすれば良いのか、参考となる情報を何でも構いませんのでお願いいたしますm(__)m

280 名前:login:Penguin mailto:sage [2008/06/30(月) 22:19:25 ID:LfTOpvVG]
>>279
grep $2 $1 | wc -l

さっさと学校辞めて派遣労働者にでもなってしまえ。
その方が親孝行だ。

281 名前:login:Penguin mailto:sage [2008/06/30(月) 22:51:24 ID:LE+io00E]
シェルからwindowsにrshのような感じでコマンドを打ちたいんですが、
telnetを使ったりしてどうにかならんでしょうか?

282 名前:login:Penguin mailto:sage [2008/06/30(月) 22:51:47 ID:LfTOpvVG]
>>281
expect

283 名前:login:Penguin mailto:sage [2008/06/30(月) 22:55:37 ID:pVpnujlR]
>>279
スクリプト以前にひょっとしてシェルプロンプトで何も叩いた事がないほど初心者?

284 名前:login:Penguin [2008/06/30(月) 23:08:10 ID:mYyaCshH]
279です。
>>280
その言葉真摯に受け止めます。ですが今後努力する所存です。
すいません。諸事情で時間がない中でしたのでこちらで質問させて頂きました。
参考情報ありがとうございます。
>>283
簡単なコマンドなら叩いたことはありますがシェルは全くの初心者です。
どうか宜しくお願い致しますm(__)m



285 名前:login:Penguin mailto:sage [2008/06/30(月) 23:13:41 ID:LE+io00E]
>>282
家のfedoraでインストールして試してみてexpectすげーと思ったけど、業務用のredhat 3 には多分入ってないです・・・
ありがたいですけど、他にないですか?

286 名前:login:Penguin mailto:sage [2008/06/30(月) 23:35:01 ID:EeC8VQhU]
>>285
Expect.pmとかopen3.rbとか・・・
最悪openptyで相当品を書けばいい。tccで書けばそれでもスクリプト。

287 名前:login:Penguin mailto:sage [2008/06/30(月) 23:41:54 ID:pVpnujlR]
>>284
それじゃまずgrepを使ってあるユーザーの受信メールの行と送信メールをどうやったら切り出せるか
試行錯誤し、それが出来たらwc。 ひっかかったらgrepのmanページでまず回答を探す努力を。
awkとかのほうが色々柔軟性があるけどたぶん使った事無いでしょう。

あと>>3のリンク先をいくつかながめるといいと思う。


288 名前:login:Penguin [2008/06/30(月) 23:48:15 ID:hskJhfYi]
初心者です。お願いします。

cutコマンドはファイルのみ使えますか?
変数にも使えるでしょうか。
変数に格納してある文字列からcut.grepを使いたいんですが。


289 名前:login:Penguin mailto:sage [2008/06/30(月) 23:49:01 ID:mYyaCshH]
>>287
ご教示いただいた方法にて調べてみます。本当にありがとうございますm(__)m

290 名前:login:Penguin mailto:sage [2008/06/30(月) 23:54:15 ID:LE+io00E]
>>286
それらはアプリでしょうか?
インストールが必要なのはNGなんです。
標準的なコマンドで実装できれば・・

291 名前:login:Penguin mailto:sage [2008/07/01(火) 00:23:35 ID:7AvBIvdb]
>>278
plsとm3uは多くのプレイヤーが使ってる形式のようですから
お使いのプレイヤーにその機能がないか確認してはいかがでしょう。
プレイヤーをお使いでないならこういうものもあります。
ttp://freshmeat.net/projects/fapg/
ビルドにuriparserを求められますがconfigureに--disable-xspfを
つけると要らなくなります。

292 名前:login:Penguin mailto:sage [2008/07/01(火) 00:37:40 ID:F/ZP/0+B]
>>278
外してるかもしれないのですがこれだけで十分ですかね

#!/bin/sh
streaming_name=$1

cat <<END >$streaming_name.pls
[playlist]
File1=www.example.com:8000/$streaming_name
Title1=nina
Length1=-1
NumberOfEntries=1
Version=2
END

cat <<END >$streaming_name.m3u
www.example.com:8000/$streaming_name
END

293 名前:login:Penguin mailto:sage [2008/07/01(火) 01:20:48 ID:DL3owd7E]
>>288
$echo 1111 bbbbbb | cut -f1 -d ' '
で1111と表示できるからcutにパイプして
echo $var | cut -fx
で出来る

変数にファイル名を入れてる場合なら
cut -fx < $filename
でおk

あとはエスパーじゃないんで分からん

294 名前:login:Penguin mailto:sage [2008/07/01(火) 07:30:47 ID:/iSyGj3E]
>>288
echoしてリダイレクト。基本。



295 名前:login:Penguin [2008/07/01(火) 10:01:29 ID:ckhBGtgF]
質問です。
変数の中に=があったらそれまでの文字を出力したいんですが、

例)$1に abc=defg -> abcのみ出力
  $2に abcdefgh -> 何もせず

こういった場合、abcを取り出す(=の前までCUT?)事はできますか?
if(( grep '=' $1 ))
then
cut〜
みたいになるんでしょうか。お願いします。

296 名前:login:Penguin mailto:sage [2008/07/01(火) 10:12:23 ID:wSJ46Tmn]
>>295
case "$1" in
*"="*) echo "$1" | sed 's/=.*//' ;;
esac






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<243KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef