08/05/17 13:44:57 9hFWtCOD
UNIX板のスレを見ている方も多数おられるかと思いますが、
まあそれはそれとして、BASHウゼーとか言われる心配なく
平和にLINUX的スクリプト談義しましょうよ。
初めての自作スクリプト、自信ないから見てください。な初心者から
トリッキーな技を駆使した作品を披露したい、蘊蓄を語りたい上級者まで
いろいろな人に参加して頂けると嬉しいです。
perlやらPythonやらの話が混ざっても良いんでない?
Part3 : スレリンク(linux板)
Part2 : スレリンク(linux板)
Part1 : スレリンク(linux板)
>>2-5あたりに色々と。
2:login:Penguin
08/05/17 13:45:47 9hFWtCOD
関連スレ
おまいら! sed の使い方教えて下さいm(_ _)m@linux板
スレリンク(linux板)
【Shell】どのシェル使ってる?【Script】@LINUX板
スレリンク(linux板)
シェルスクリプト総合 その10
スレリンク(unix板)
sed@UNIX板
スレリンク(unix板)
2ちゃん画像落としまくりスクリプト@UNIX板
スレリンク(unix板)
連番のH画像/動画を一気にダウンロードする2
スレリンク(unix板)
ログを読みたい人はこちら
URLリンク(makimo.to)
3:login:Penguin
08/05/17 13:46:06 9hFWtCOD
参考リンク
bashで始めるシェルスクリプト基礎の基礎 @IT
URLリンク(www.atmarkit.co.jp)
シェルスクリプト(Bash)入門 CYBERAM Documents Project
URLリンク(cyberam.dip.jp)
IBM developerWorks
実例でわかるsed
URLリンク(www-06.ibm.com)
URLリンク(www-06.ibm.com)
URLリンク(www-06.ibm.com)
実例でわかるawk
URLリンク(www-06.ibm.com)
URLリンク(www-06.ibm.com)
URLリンク(www-06.ibm.com)
コマンドラインからのグラフィックス操作
URLリンク(www-06.ibm.com)
洗練されたPerl: MP3とPerlで遊ぶ
URLリンク(www-06.ibm.com)
URLリンク(www-06.ibm.com)
4:login:Penguin
08/05/17 13:46:45 9hFWtCOD
>2
おまけの関連スレ
シェルスクリプト相談室
スレリンク(tech板)
awkについて語るスレ $2
スレリンク(tech板)
5:login:Penguin
08/05/21 00:32:13 a/iElE66
Unix系は仕事でSolarisから入ったので、Linuxでもtcsh使ってますが何か?
6:login:Penguin
08/05/21 00:32:36 a/iElE66
お、何かいいID
7:login:Penguin
08/05/21 20:20:15 5fFqv5kV
シェルでエロゲ作成したいんだけど意見聞かせてくださいな
8:login:Penguin
08/05/21 20:57:55 MNgR1LfO
ギガバイ子ちゃんでお願いします。期待しています。
9:login:Penguin
08/05/21 23:57:35 DRn6AcXl
ヒロインの一人に使ってあげてくれ
_,,.. -ー 'ヘ-、、_
.!、、 !、_、,.ィ'" _ ,,.. _,゙ヽ,
\`ー`= '´ _,..、 ヽ `、 ヽ
ゝ、 /´ ` `ヽ ゙、
/ ,/ ,、/ ,.イ ! ヽ、
ノ ー=ニ,..-、,ヾ;、' /,.' ! i| ! 、__ ,.Zャ
ー- 7 , /,、ヾ;、,.ィ // ,イ! ,!ト | ,イ 、ヾ、_
/ ,.' ,' ! ヾ;、'イ/ / / / |i |!,! / ヽ、 \、_
,/イ / ,!,イ!/_ !|;/ //_,.ィー|' /,ィ、 、ー- '"
_/,.イ/!|i !ニ。ミ /' ,ィ:;゚ソゞ |i }、-r-ー'ィ
 ゙̄/',.ヽ,|!ヾ`ゞ'=' ` ´ /!'" ーヤ
 ̄´フ! / ハ ,: ,イ ト、 ー_ユ-r''"`!
/___ ,. \ ー_-;ァ /!-''"イ´ |;;! ,.|
 ̄ /´ /イ!|/ ,ヘ、、 ,..イ;''´::;イ| ,.! '´イ!
/ヘ! { !/:::!'ヾi| ` ゙/:::::/ | !.-,..=-'´!| ゙|!
イ{゙ ト、 ヾ::::::::゙、 /::::::; ' ,r',.ヘヾ ゙!| ゙、
_,.-ゞト!、 ヽ ゙!:::::::ヽ/::::,イ| /イ-r'┴-、、 |;i !
/ !__,,...|;i,.._ヽi!、 |::ヽ::イ!::/ ヾ!ィ'´ |;! ゙iヽ| ト'' ソ
/ r|'"`7/゙T`,>ヾ>;!ノ:r!::く ,イ´,.!|__,,.. -┴ー -、!|ヾ゙!_ノ
,イL/゙! // / //´>::|!:::|i::ネ{! i!,!'´ // ヾ,.|i|
,!,イ/ヾi! | L;. /イ/::::::|!::::|ir-、' /___//_ ノソi;|
10:login:Penguin
08/05/23 04:46:10 RB3w3nsA
ちょっとスレの趣旨から離れてしまいますが、
たとえば Windows の WSH のように Javascript で
一般的なシェルスクリプトのようなものを実行できる
インタープリタって、Linux にはないんでしょうか?
普段は bash 使っててそれで仕事上は全然問題ないんですが、
Windows ではバッチ処理を WSH + JScript で書いているので
ふとなんで Linux にはそういうのがないんだろうか、って思って。
11:login:Penguin
08/05/23 07:16:44 uTynWoSg
OpenJDK+Rhinoじゃダメかい?
12:login:Penguin
08/05/23 22:34:35 tQ4+YbeK
自宅のLinuxマシンをsmbサーバにして、
画像、テキスト、動画など、すべてのファイルを保存・管理しています。
仕事で書いた原稿記事などについても、
いちいち GUI アプリで開かなくても、
ターミナルからでも中身を閲覧できるように、
必ず文字コードは UTF-8, 改行コードは LF で保存しています。
が、クライアント(主として MacOSX、たまに Windows)のターミナルから、
そうしたテキストファイルを less で見ると、当然のことながら、
見やすい場所での改行を一切しないで、
ターミナルの幅いっぱいにテキストを広げてくれます。
これを、何か適当なところ(例えば一行は50字など)で
改行を入れて表示させてやる方法ってあるでしょうか?
クライアントは主として MacOSX 10.4.11 で、
使っている仮想端末は、OSX 標準の /Applications/Terminal.app です。
たまぁに WindowsXP や Windows2000 などからもアクセスし、
その場合には poderosa.exe を使っています。
サーバマシンは CentOS4.6 です。
ls になんらかのオプションを与えて整形するのか、
それともなんらかのシェルスクリプトを組んでやる必要があるのか、
基本的なところからわかりません。
どなたかアドバイスいただけませんでしょうか?
よろしくお願いいたします。
13:login:Penguin
08/05/23 23:29:13 1NkPPjck
>>10
こういうものはある。使ってる人は見ないけど。
URLリンク(www.wxjavascript.net)
>>12
スレチだけど lv -W50
これでわからなければCentOSのスレへ
14:login:Penguin
08/05/23 23:44:07 emu552tY
lvってCentOS製だったの?
15:login:Penguin
08/05/23 23:52:41 yTe4r5LG
>>13
どうもありがとうございました。
CentOS 用のパッケージは見つからなかったんですが、
ソースが見つかったので、checkinstall で rpm を作り、
インストールしたらすぐに希望通りのことができました。
16:login:Penguin
08/05/24 08:58:44 RlisQGoN
Mac OSXはUnix系と聞いたが、改行コードが違うのか。
17:login:Penguin
08/05/24 09:20:38 yYzGER+2
>>16
昔の MacOS は違ったなぁ.
18:login:Penguin
08/05/24 09:42:14 z250jUqQ
まだ\rなのか
19:login:Penguin
08/05/24 10:01:19 R69XGiJs
ええと、標準だと今でも CR+LF ではないかと思いますが、よく知りません。
20:login:Penguin
08/05/24 16:36:20 tQzGMWxj
>>16
Linuxと同じくLF
URLリンク(ja.wikipedia.org)改行コード
URLリンク(ja.wikipedia.org)プレーンテキスト
URLリンク(www.openspc2.org)
21:login:Penguin
08/05/24 16:52:04 yYzGER+2
* LF: UNIX系のシステム。Linux、AIX、Xenix、Mac OS X、BeOS、Amiga、RISC OSなど。
* CR+LF: CP/M、MP/M、DOS、OS/2、Microsoft Windows。
* CR: コモドールによるシステム、Apple IIファミリ、Mac OS(バージョン9まで)、OS-9。
22:login:Penguin
08/05/24 20:48:36 5ErPV5SE
>>20-21
あ、OSの改行コードの違いにより改行されないことが>>12の相談かと思ったよ。
そもそも改行していない文章を fmt したいということか。
23:login:Penguin
08/05/24 22:57:24 //jRJGUZ
MACはCRとずっと思ってたのにLFなのかぁ
24:login:Penguin
08/05/28 15:18:10 HsWDzpDn
子プロセスとして起動されたのか,
. で読み込まれたのか,
スクリプトの中から判断することはできますか?
25:login:Penguin
08/05/28 15:23:33 HsWDzpDn
それぞれ set の結果を diff してみた.
#子プロセスとして起動した ./test.sh
< BASH_ARGC=()
< BASH_ARGV=()
< BASH_LINENO=([0]="0")
< BASH_SOURCE=([0]="./test.sh")
---
#. で読み込んでみた . test.sh
> BASH_ARGC=([0]="1")
> BASH_ARGV=([0]="test.sh")
> BASH_COMPLETION=/etc/bash_completion
> BASH_COMPLETION_DIR=/etc/bash_completion.d
> BASH_LINENO=([0]="39")
> BASH_SOURCE=([0]="test.sh")
ふぅん.BASH_SOURCE じゃ判定できそうにないな.
BASH_ARGC が 0 じゃないことでチェックするのかな?
26:login:Penguin
08/05/28 15:31:38 HsWDzpDn
-------すくりぷと test.sh
#!/bin/sh
set
-------ここまで
chmod +x test.sh
./test.sh
./test.sh a b c
. test.sh
. test.sh a b c
4つともやってみたけど,結局何で判定すりゃいいのかわからない.
死ね俺.
27:login:Penguin
08/05/28 15:36:50 HsWDzpDn
${BASH_LINENO[0]}
で判定するのがよさげなんだけど,
そもそも sh にはそんな機能ないの?
bash 限定はちょっとやだなぁ.
28:login:Penguin
08/05/28 15:42:12 HsWDzpDn
単純に $0 で判定するのがいいのか?
29:login:Penguin
08/05/28 15:43:32 RYpMT0gt
lessの代わりにleafpadを使えば
30:login:Penguin
08/05/28 17:51:58 4Ch8TEZp
sh または bash で配列の結合ってできますか?
31:login:Penguin
08/05/28 19:03:04 xwe44XYV
神様助けてください
関数に配列を渡す方法がわかりません
a=( あ い う え お )
fnc(){
echo ${1[0]}
}
fnc a
これで”あ”が出ると思ったんですがでません
教えてください
お願いします
32:31
08/05/28 20:20:45 xwe44XYV
シェルスクリプトにはスクリプト内でスコープが無いことを知り
a=( あ い う え お )
fnc(){
echo $a[0]
}
fnc
で”あ”が表示できるようになりました
33:login:Penguin
08/05/28 23:35:58 auu89eB+
ループ文で外部ファイルから読み込んだコマンドを実行しようとしたときに
パイプ処理ができずに困ってます。(下記の場合、ls -lの結果しかでません)
サブシェルの方に行ってしまっているのかな?と思っているのですが、どう処理したらよいのでしょうか?
FILE=test.txt
while read LINE
do
$LINE
done < $FILE
■test.txtの内容(例)
ls -l | grep abc
34:login:Penguin
08/05/29 00:07:17 vP9yV59g
>30
c=(${a[*]} ${b[*]})
>33
FILE=test.txt
while read LINE
do
eval $LINE
done < $FILE
35:33
08/05/29 00:17:22 iY0MCSHA
>>34
ありがとう!できました!便利なもんがあるんですね。
助かりました~。
36:login:Penguin
08/05/30 19:21:49 p9jie4Lm
echo $a[0]
これってちゃんと出力できるの?
${a[0]}
ってしないとエラーにならね?
37:login:Penguin
08/05/30 19:45:31 ZG0+9xy3
% a[0]='abcef'
% echo $a[0]
abcef
% echo ${a[0]}
abcef
% echo $SHELL
/bin/zsh
38:login:Penguin
08/05/31 06:16:56 g+xuahlh
#!/bin/sh
a[0]='abcef'
echo $a[0]
a[0]='abcef'
echo ${a[0]}
--------------------
[siomizu@cluster ~]$ ./test.sh
abcef[0]
abcef
39:login:Penguin
08/05/31 16:10:17 qUj8kkoX
uniqはUTFには対応していないでしょうか?
たとえば、以下2行がある場合にuniqすると承のみになってしまいます。
承 <- 0xE689BF
良 <- 0xE889Af
環境はdebianのcoreutils 6.10-6、改行コードはLFを使用しています。
よろしくお願いします。
40:login:Penguin
08/05/31 16:22:33 q3zltHwi
再現できるスクリプトを書いてください
41:39
08/05/31 16:33:59 qUj8kkoX
>>40
私でしょうか?
単に以下の2行を書いたファイルを用意してuniqです。
承
良
あ、「<-」以降は単にUTF8でこんなバイナリになるというのを示しただけです。
失礼しました。
42:login:Penguin
08/05/31 16:36:28 q3zltHwi
私の環境では再現できませんので。
$ printf "\xe6\x89\xbf\n\xe8\x89\xaf\n" | uniq
承
良
43:39
08/05/31 16:46:52 qUj8kkoX
>>42
そうですか・・・
うちでは
% printf "\xe6\x89\xbf\n\xe8\x89\xaf\n" | uniq | hexdump -C
00000000 e6 89 bf 0a e8 89 af 0a |........|
00000008
でした。参考までにディストリとLC_ALL何にしているか教えていただけませんか?
44:39
08/05/31 17:01:51 qUj8kkoX
すいません 43でできてるじゃないかorz
LC_ALLをUTFにした状態だとうまくいきました。
uniqはロケール見るのか・・・
ありがとうございました
45:login:Penguin
08/06/01 19:54:58 3xisQkfz
オライリの入門bash難しいよ・・・
これホントに入門なの・・・?
46:login:Penguin
08/06/01 21:38:04 EWKpU6i4
オライリーは全般的に中級者が読む本だ
47:login:Penguin
08/06/02 18:36:56 GT1ocSub
すみません。くだ質から誘導されてきました。よろしくお願いします。
bangou.txtには
▲
123123
123123
100000
▲
▲
というように数値が入っています。(▲は空白ですが改行コードがはいってます)
この場合、1行目と3行目を比較して3行目に数値が入っている場合のみ2行目の値を別表に表示する
スクリプトを作りたいと思って色々調べて以下のようなスクリプトを作ってみましたけど
うまく動きません。(空白は空白として認識してくれないと行がずれるのでそれも認識したいです)
#!/bin/bash
for iii in `cat bangou.txt`
do
jjj=`sed -n '2p' bangou.txt`
export jjj
kkk=`sed -n '3p' bangou.txt`
export kkk
if [ "$iii" = -n ]
then
echo "$kkk>/dev/null
else
echo "$jjj > jjj.txt
paste jjj.txt toku.txt >> toku2.txt
rm -rf jjj.txt
fi
done
どこか間違ってるんでしょうか?よろしくお願いします。
48:login:Penguin
08/06/02 19:03:36 X93+nxzv
>>47
やりたいことがよくわからん。
toku.txt の内容と、
実行後に toku2.txt がどういう内容になってればいいのかを書いてくれ。
49:login:Penguin
08/06/02 19:28:58 GT1ocSub
>>48さん
返信ありがとうございます。
toku.txtは住所録です。
それをとりあえず一旦、toku2.txtにbangou.txtと組み合わせたものを
書き出しているだけなのでtoku2.txtには特に何も入っていません。
toku.txtは
▲
東京都
東京都
東京都
東京都
東京都
▲
愛知県
みたいな感じです。(▲は空白です)
これをそのままpasteでbangou.txtと結合すると
▲▲
123123 東京都
123123 東京都
100000 東京都
▲ 東京都
▲ 東京都
となってしまうのでこれを
▲▲
123123 東京都
123123 東京都
100000 東京都
100000 東京都
100000 東京都
というようにしたいんです。空白の行に一番最後の
番号を割り当てたいんです。わかりにくくてすみません。宜しくお願いします。
50:login:Penguin
08/06/02 19:35:12 GT1ocSub
ごめんなさい。「▲は空白」と書きましたけど実際は改行コードが入っているだけです。
すみません。ごめんなさい。
51:login:Penguin
08/06/02 19:44:36 X93+nxzv
いまいちよくわからんな。
>>47 の
> この場合、1行目と3行目を比較して3行目に数値が入っている場合のみ2行目の値を別表に表示する
っていう話もどうなったのやら。
シェルスクリプトでがんばるより perl あたりで書いちゃった方が早そう。
52:login:Penguin
08/06/02 19:54:09 GT1ocSub
>>47の書き方が悪かったかもしれないです。ごめんなさい。
実際には>>49のような処理をしたいんです。
perlでもいいです。一旦処理できればいいんで。お願いします。
53:login:Penguin
08/06/02 20:01:01 6RTLtbwy
pasteコマンドで結合して処理すればいいんじゃないの?
54:login:Penguin
08/06/02 20:07:59 GT1ocSub
>>53さん
ご指導ありがとうございます。pasteで結合しただけだと
bangou.txtで空白の部分があるので >>49 のように
▲▲
123123 東京都
123123 東京都
100000 東京都
▲ 東京都
▲ 東京都
となってしまうので困ってます。
これを
123123 東京都
123123 東京都
100000 東京都
100000 東京都←空白が上の行と同じ番号
100000 東京都←空白が上の行と同じ番号
という風にしたいんです。お願いします。
55:login:Penguin
08/06/02 20:09:26 6RTLtbwy
100000 でいいならsedで置換するだけじゃん。
56:login:Penguin
08/06/02 20:11:48 GT1ocSub
>>55さん
お返事ありがとうございます。
数値は「10000」ではないんです。
上にある行の数値が欲しいんです。
わかりにくい説明ですみません。
宜しくお願いします。
57:login:Penguin
08/06/02 21:14:50 W+U/n8+A
paste bangou.txt toku.txt | awk '{printf( "%s %s\n", (NF>1)? $1: onaji, $NF );
onaji=$1}'
とかかな?
でも、番号の1行目が空白のときはどうするのだろう。
58:login:Penguin
08/06/03 00:37:37 xzQHL5F2
>>57さん
ありがとうございます!
明日早速試してみます。ありがとうございます。
59:login:Penguin
08/06/03 16:14:01 CIWG+PQ4
あのスレ住人(特にdebユーザ)に、お願いなんだが、テンブレにあるし絶対ダメだとかいわんけど
書き込むとき、せめてシェルスクリプトと他のperlなんかのスクリプト言語は
意識して区別してくれまいか?ここ、「シェルスクリプトスレ」だから。
(上で「特にdebユーザ」と言ったのは、批判じゃなくて、前スレで発覚したんだが
debはディストリレベルでコマンドとperlスクリプトなんかが混在になってるらしく
ユーザ自身が区別しない慣習のようだから。でも、それって一般的じゃないし混乱のもとだよね?)
sedでもawkでもperlでもいいけど(ここら辺までは普通にシェルで使うだろけど、
perlで複雑なことやりこんだり)なんでもありありなら、わたしゃpythonやzenityや
織り込んでGUIやgtkベースの話はじめちゃうぞw
60:login:Penguin
08/06/03 16:16:16 8f1erIVq
「テンブレ」?
「ディストリレベルで混在」?
どういう意味?
61:login:Penguin
08/06/03 16:43:03 CIWG+PQ4
>>60
テンプレつーのは、つーか、>1に
>perlやらPythonやらの話が混ざっても良いんでない?
とあるし、>2-4にスクリプト言語のリンクも張ってある。
混在つーのは、具体例では、debではrenameコマンドがperlスクリプトprenameに置き換えてあるし
どうやらシェル上のパスの通し方なんぞが、perlなどを使いやすいように拡張されてるようだ。
ま、debユーザじゃないので詳しいところまではわからないけどね。
一応断っておくけどdeb批判じゃないよ。
62:login:Penguin
08/06/03 16:56:54 8f1erIVq
「テンプレ」を「テンブレ」と書いていたことには気付いているのだろうか。
>>61
> 混在つーのは、具体例では、debではrenameコマンドがperlスクリプトprenameに置き換えてあるし
これは特殊かつ些細な例でしょ。
他に何かある?
> どうやらシェル上のパスの通し方なんぞが、perlなどを使いやすいように拡張されてるようだ。
そんな事実はないよ。
63:login:Penguin
08/06/03 17:08:25 CIWG+PQ4
うわぁ、やっぱりdeb信者は・・・ごめんなさいね。趣旨だけ理解してちょ。
64:login:Penguin
08/06/03 17:10:02 GEyZQq+8
これだけで信者扱いする君もそうとうなものだと思うぞ。
65:login:Penguin
08/06/03 17:11:57 CIWG+PQ4
はいはい、ごめんなさい、ごめんなさい。あんたが大将。
66:login:Penguin
08/06/03 17:23:16 8f1erIVq
信者って決めつけられてもな。
Debian も使ってるし他のディストリも使ってるし。
よく知りもしないのにいいかげんなこと言うな、ってだけ。
67:login:Penguin
08/06/03 17:46:57 L2QLzXUM
ちんこ
68:login:Penguin
08/06/03 20:26:13 UQvQZC/E
>>59
分界点が判らない。
69:login:Penguin
08/06/03 20:51:52 +2Z+EheD
>>68
分界線という言葉ならあるが
70:login:Penguin
08/06/03 22:24:45 4bIEot6Q
Debianではっつうか、そいつの問題だろう。
シェルスクリプトかperlスクリプトか見てわからないような奴は他の鳥使ったってわかるようにならない。
71:login:Penguin
08/06/03 22:25:09 meWc8EbG
>>59
> debはディストリレベルでコマンドとperlスクリプトなんかが混在になってる
デブな人だけどなんのこっちゃ?
まさかPerlスクリプトなら*.plになるとか言ってるわけじゃないよな?
72:login:Penguin
08/06/03 22:31:11 /nacTMrw
というか、俺も言ってる意味が分からない
とくにディストリレベルっていう言葉
ディストリレベルってのはどのレベル?
73:login:Penguin
08/06/03 22:41:59 8iXvkF35
#/bin/sh
perl -e printf( "hello world\n" );
だと、>>59基準でOKか否かが分かんない。
74:login:Penguin
08/06/03 22:48:40 513yN16/
例えばls って打つと ls.pl が起動されるって事だと読み取った。
Debian系は使っていないので真実は知らない。
75:login:Penguin
08/06/03 22:49:50 OcnJ3se+
#!/bin/sh
perl sh.pl
ruby sh.rb
php sh.php
system("hoge.sh",$ret);
exec("hoge.sh",$ret);
exec("sed 's/B/A/g' $current > $tmp",$ret);
exec("rm $current",$ret);
system("mv $tmp $current",$ret);
もう人生バラ色です
76:login:Penguin
08/06/03 23:39:04 /nacTMrw
俺の人生はルビー色
77:login:Penguin
08/06/03 23:48:22 J2hvNDuq
質問です。
$ ls "a"
file1 file2
$ echo ls \"a\"
ls "a"
$ `echo ls \"a\"`
ls: cannot access "p": No such file or directory
三つめでエラーになるのはなんででしょう?
こういう時はどう書くのが正しいのですか?
78:login:Penguin
08/06/03 23:52:30 4a1SGQ4Q
$ ls "a"
ls: a: No such file or directory
$ echo ls \"a\"
ls "a"
$ `echo ls \"a\"`
ls: "a": No such file or directory
$
79:login:Penguin
08/06/03 23:53:03 wxT19Ovz
eval `echo ls \"a\"`
80:77
08/06/03 23:55:16 J2hvNDuq
>>79
おお!早速ありがとうございました。
81:login:Penguin
08/06/04 10:36:15 bCIXok9Z
bashの/dev/nullについて質問します。
lsの表示結果でエラー出力だけは表示させずに
標準出力のみtest.txtファイルに出力したいのですが
自分の理解では以下に書いた2になりますが、表示結果
では1でないと通りません。どのようにイメージしたら宜しいのでしょうか?
1: ls /home/ > /dev/null 2>&1 > test.txt
2: ls /home/ > test.txt > /dev/null 2>&1
82:login:Penguin
08/06/04 10:42:14 jifIrR2s
>>81
「bash のリダイレクトについて」だろ。
/dev/null は bash の問題ではない。
ls /home/ >/dev/null 2>test.txt
で OK。
83:login:Penguin
08/06/04 11:04:40 bCIXok9Z
>>82
すいません、リダイレクトについてでした。回答有難うございます。
ls /home/ >/dev/null 2>test.txtについての流れで確認を
して頂きたいのですが宜しくお願い致します。
上記の標準出力1の状態について、lsの結果が/dev/nullに行く。
(ここでデータは破棄されてしまうという考えなのですが)
そして、エラー出力2はtest.txtになってますよね?
1の状態 /dev/null
2の状態 test.txt
84:login:Penguin
08/06/04 11:52:58 3E+PCnl7
>>81
> 1: ls /home/ > /dev/null 2>&1 > test.txt
1) /dev/null を標準出力の出力先に指定
2) 標準出力の出力先をエラー出力の出力先に指定
3) test.txt を標準出力の出力先に指定
結果
標準出力: test.txt
エラー出力: /dev/null
> 2: ls /home/ > test.txt > /dev/null 2>&1
1) test.txt を標準出力の出力先に指定
2) /dev/null を標準出力の出力先に指定
3) 標準出力の出力先をエラー出力の出力先に指定
結果
標準出力: /dev/null
エラー出力: /dev/null
85:login:Penguin
08/06/04 11:59:59 jifIrR2s
>>81
1: でほんとにうまく行ってる?
86:login:Penguin
08/06/04 16:29:28 bCIXok9Z
>>84
リダイレクトは出力先を決めるだけなのですか。
解説して頂いた通りで色々パターンを考えてみましたら
出来るようになりました、有難うございます
>>85
一応処理結果では正常な雰囲気なのですが、>>81ですと
理解しずらいので、変えようか考えています。
レス遅れましたが皆さんありがとうございました
87:login:Penguin
08/06/04 22:17:21 T1bDhlj1
>>86
シェルどころか日本語まで・・・
88:login:Penguin
08/06/05 00:21:00 lO8RLUCT
与えられたパスを絶対パスに正規化したいのですがどうすればよいですか?
単に相対->絶対の変換をするだけじゃなくて
.とか..も適切に変換してくれるとうれしいのですが。
89:login:Penguin
08/06/05 00:23:58 qyhUQGl8
>>88
`pwd`/$1
90:login:Penguin
08/06/05 00:32:17 brEG0pS6
realpathだっけ?
91:login:Penguin
08/06/05 06:27:50 Ysl4yLMq
ここはLinux板だからreadlink -fでどうか
92:login:Penguin
08/06/07 17:03:59 lYfLA/cT
スレ違いのような気もしますが・・・
lsの出力が端末だとスペース区切りなのにパイプやリダイレクトすると改行になるのはどういう仕組みですか?
93:login:Penguin
08/06/07 17:10:19 6DqLCPKX
isatty(3)
94:92
08/06/07 17:13:39 lYfLA/cT
なるほど、lsのほうで端末かどうかみてるんですね…
納得しました。どうもありがとうございます。
95:login:Penguin
08/06/08 00:25:14 z0g0MNBT
スレ違いだと思うならくだ質に行きなさい。
96:login:Penguin
08/06/08 14:37:28 w3H8z2Sk
シェルスクリプト中で、リダイレクトでファイルを生成するとファイル名が文字化けしてしまうのですが
一体何が悪いんでしょうか。
↓みたいなことになります。
$ echo $LANG
ja_JP.UTF-8
$ cat test.sh
echo a > "$1"
$ echo hoge > "あいうえお.hoge" ; ls
test.sh あいうえお.hoge
$ sh test.sh "あいうえお.hoga” ; ls
??????????.hoga test.sh あいうえお.hoge
touchとかなら文字化けしないようなのですが。
97:96
08/06/08 14:54:23 w3H8z2Sk
補足です。
$ ls | hexdump -C
00000000 e3 82 e3 84 e3 86 e3 88 e3 8a 2e 68 6f 67 61 0a |...........hoga.|
00000010 74 65 73 74 2e 73 68 0a e3 81 82 e3 81 84 e3 81 |test.sh.........|
00000020 86 e3 81 88 e3 81 8a 2e 68 6f 67 65 0a |........hoge.|
0000002d
98:login:Penguin
08/06/08 21:58:48 cpZuCikO
ls --show-control-chars
99:login:Penguin
08/06/09 19:55:01 Dt/jCYdy
URLリンク(jp.youtube.com)
ワロタ
100:login:Penguin
08/06/09 20:44:39 19yx0Oqh
注文スクリプトを作りました、ってこと?
101:login:Penguin
08/06/09 20:52:39 1XPLtUDQ
日本でもオンライン注文のピザ屋があれば出来そうね。
映画ジュラシックパークの中でプログラマーがデブでピザ食べていたけど、
この動画もその皮肉?
102:login:Penguin
08/06/09 20:56:56 zrUasBao
シェルスクリプトじゃないけど。
URLリンク(e8y.net)
103:login:Penguin
08/06/09 21:02:45 zrUasBao
>>101
hacker の食べ物といえば
ピザと Jolt Cola と相場が決まっておる。
104:login:Penguin
08/06/10 00:00:50 Uz5XyeDf
なんだPizza Partyか
URLリンク(slashdot.jp)
105:login:Penguin
08/06/10 13:27:23 Gys5ZtGT
2037→1048→2481207→↓
2037→1048→2481207→↓
20311→1056→2481211→↓
20320→1114→2481218→↓
20320→1114→2481218→↓
20326→1155→2481211→↓
20326→1155→2481211→↓
→ →2481211→
→ →2481211→↓
tomo.txtの中身はこうなっています。(→はタブ、↓は改行コードです)
これで2列目に何も文字列が入っていない場合は3列目も何も文字列を
入れないようにしたいです。(上のtxtの場合だと下の2行が対象になります)
sedとcutでなんとかなるかと思ったんですけどなかなかうまくいきません。
誰かいいスクリプトを教えて下さい。宜しくお願いします。
106:login:Penguin
08/06/10 14:03:41 rnP/TIGa
これでどう?
awk '{if (length($2) != 0) print;}' tomo.txt
107:105
08/06/10 15:27:43 Gys5ZtGT
早速のレスありがとうございます。でもうまく動かないです。。。
試しにlengthの値を変えてみたりしたんですが何も変化がないです。。
108:login:Penguin
08/06/10 16:24:40 mINSOvv3
>107
もっと具体的に目的を書かないとどういう結果が欲しいのか解らんよ。
>105の下から2行目は改行が入ってないの?
それとなにも列に入っていないと言いつつ全角スペースが入っているのは何故?
まあ、やりたいことを推測して例を出せばこんな感じか?
cat tomo.txt | while read LINE;do set -- $LINE; if [ $# = 3 ]; then echo "$LINE"; fi; done
109:105
08/06/10 19:02:47 CM93IypP
>>108さん
ご回答ありがとうございます。
すみません。
>105の下から2行目は改行が入ってないの?
入ってます。
>それとなにも列に入っていないと言いつつ全角スペースが入っているのは何故?
実際には入っていません。
ですから正確にはtomo.txtはこうなってます。
2037→1048→2481207→↓
2037→1048→2481207→↓
20311→1056→2481211→↓
20320→1114→2481218→↓
20320→1114→2481218→↓
20326→1155→2481211→↓
20326→1155→2481211→↓
→→2481211→↓
→→2481211→↓
110:105
08/06/10 19:05:04 CM93IypP
それを以下の下2行の2列目に文字列がない場合は
削除したいので以下のような結果を出して欲しいんです。
2037→1048→2481207→↓
2037→1048→2481207→↓
20311→1056→2481211→↓
20320→1114→2481218→↓
20320→1114→2481218→↓
20326→1155→2481211→↓
20326→1155→2481211→↓
→→→↓
→→→↓
何度もすみません。よろしくお願いします。
111:105
08/06/10 19:19:42 CM93IypP
cat tomo.txt | while read LINE;do set -- $LINE; if [ $# = 3 ]; then echo "$LINE"; fi; done
を試してみましたけどやはり何も変化はありませんでした。
すみません。お願いします。
112:login:Penguin
08/06/10 19:35:16 gcco3DVH
よくわからんけど、タブが2回続いたらタブ3個だけの行に置き換えるとかじゃだめなの?
やり方は知りません
113:login:Penguin
08/06/10 21:34:41 39ga6S1g
これはどうだ?
awk -F '¥t' '{if ($2 == "") { $3 = ""}; print}' < tomo.txt
awkのデフォの列識別はタブじゃないから-Fで指定してね。
114:105
08/06/11 03:27:04 bnnOzDXT
>>113
ありがとうございます。今日はこんな時間なので明日試してみます。
'\t'の部分がうまく識別してくれたらいけそうな感じがします。
115:105
08/06/11 05:10:34 bnnOzDXT
おはようございます。
今試してみたらうまく動きました。ありがとうございました。
116:login:Penguin
08/06/11 05:47:46 wK/2Md+f
>>114 >>115
明日ってw
117:105
08/06/11 08:14:21 sVHDZWwZ
あっーーー!よくみたら
2037→1048→2481207→↓
2037→1048→2481207→↓
20311→1056→2481211→↓
20320→1114→2481218→↓
20320→1114→2481218→↓
20326→1155→2481211→↓
20326→1155→2481211→↓
↓
↓
って感じで最後の2行のタブが全部消えてました。。。
これは消えると困るんです。再度お願いします。。。
118:login:Penguin
08/06/11 08:47:58 uz75y6lZ
難問が…
119:login:Penguin
08/06/11 10:00:16 NnMk6hEw
>112でいけるだろ
sed -e 's/\t\t[^\t][^\t]*/\t\t/' tomo.txt
\tが使えなかったらタブで置きかえる。
120:login:Penguin
08/06/11 10:14:39 tvbxZjG7
>>117
あり? $2 = ""をしない行はちゃんとタブで分けたまま出力してるのに
置き換えをした行はスペースが出力区切り文字になっちゃうな。
じゃ、無理矢理修正
awk -F '¥t' -v OFS='¥t' '{if ($2 == "") { $3 = ""}; print}' < tomo.txt
OFS はoutput field separator
121:105
08/06/11 11:52:44 sVHDZWwZ
ありがとうございます!
今度こそ大丈夫です!本当にありがとうございます!
122:login:Penguin
08/06/11 22:25:09 8Wsl19+C
Open Foundation Software じゃないのか。
123:login:Penguin
08/06/12 00:10:41 JqmZrOtu
>>122
OSFですがw Open Software Foundation
124:login:Penguin
08/06/12 11:24:21 irJT+vdW
誰かピザハット対応ピザ注文コマンド作ってくれないものか。
125:login:Penguin
08/06/12 11:52:43 3DTOjPry
>>124
出前館にあるみたいだから、>>102 をいじれば作れるんじゃない?
126:login:Penguin
08/06/12 12:44:22 Y4yiWWC/
#xxx.txtの1行目を変数iに代入します
for i in `cat xxx.txt`
do
#xxx.txtの2行目を$jに入れます
j=`sed -n '2p'
export j
#変数eeeにxxx.txtの2行目から15行目を代入します
eee=`sed -n '2-15p'
export eee
#pasteで結合できるように変数をtxtファイルに入れます
echo $i > i.txt
echo \t > ccc.txt
echo $eee > eee.txt
if
#xxx.txtの行の先頭が20から始まる場合
then test $j = "^20"
#結合します
paste i.txt ccc.txt eee.txt
else
#何もしない
fi
done
初心者です。こんなスクリプトを作ったんですけどうまく動きません。
修正していただけるとありがたいです。お願いします。
127:126
08/06/12 12:55:44 Y4yiWWC/
#xxx.txtの1行目を変数iに代入します
for i in `cat xxx.txt`
do
#xxx.txtの2列目を$jに入れます
j=`sed -n '2p'
export j
#pasteで結合できるように変数をtxtファイルに入れます
echo $i > i.txt
echo \t > ccc.txt
if
#xxx.txtの行の先頭が20から始まる場合
then test $j = "^20"
#結合します
paste i.txt ccc.txt eee.txt
else
#何もしない
fi
done
間違えました。eee.txtは別途作りますので上記のような感じです。
128:login:Penguin
08/06/12 14:03:25 Y4yiWWC/
意味不明ですみません。会社から回りの人の目を盗みながら
こそこそと2ちゃんねるやってるんで・・・
これでお願いします。
#変数aaaにxxx.txtの1行目を代入します
for aaa in `cat xxx.txt`
do
#変数bbbにxxx.txtの2行目を代入します
bbb=`sed -n '2p'
export=bbb
#変数cccに$iの1列目を代入します
ccc=`cat $i | cut -f1`
export=ccc
#変数dddに$iの2から14列目を代入します
ddd=`cat $i | cut -f2-14`
exprot=ddd
if
#xxx.txtの2行目の先頭行が20の場合は切り出したファイルを結合します
then test $aaa = "^20"
paste ccc.txt tab.txt ddd.txt
elsei
#それ以外の場合はその列をそのままファイルに書き出します
echo aaa.txt
fi
done
129:login:Penguin
08/06/12 18:57:20 RuYhMH5C
>>126
日本語でおk
人に説明するためにやりたいことを整理すると自然に解決したりするものよ。
130:login:Penguin
08/06/12 19:11:00 3DTOjPry
最初に for を持ち出したところからすでに意図がわからん。
131:login:Penguin
08/06/12 19:16:11 kPFkNEQb
perlでやればいいと思うよ
132:126
08/06/12 19:28:24 TxRWHMwb
>>129
ありがとうございます。でもなかなかうまくいかないんです。
>>130
すみません。for文の処理がうまくいかないんで抜粋しました。
>>131
perlは全然わかんないんでなんとかシェルでやりたいです。
133:login:Penguin
08/06/12 20:00:58 48VJya+Z
任意の時間を入力し、それをUTC時間に変換することは可能でしょうか?
dateコマンドだとカレントタイムを変換してしまうので。。
134:login:Penguin
08/06/12 20:55:58 JwqUhAVV
date -u
じゃダメなのかな
135:login:Penguin
08/06/12 21:14:33 lC+5xa2L
それに -d オプションを付けたいんじゃないのかな。
$ date -u -d '2001/5/20 13:33:35 JST'
136:login:Penguin
08/06/12 21:41:49 JqmZrOtu
>>133
awkにあるmktime, strftime関数を使うのが一番手軽かな。
137:133
08/06/12 23:39:42 mOwz8//t
>>134-136
実現できました!
即レス助かりました。ありがとうございます。
138:login:Penguin
08/06/13 08:03:49 TrNV+QBw
>>126 は解決したのだろうか。
俺には意図が解らなかったが。
139:126
08/06/13 09:47:03 j8pwVaea
>>138
心配していただきありがとうございます。まだ未解決です。
簡単にいうと
aaa.txtが
[100]
201
202
203
[200]
301
302
303
となっている場合に
[100] 201
[100] 202
[100] 203
[200] 301
[200] 302
[200] 303
としたいんです。(スペースのところはタブ区切りを入れたいです)
お願いします。
140:login:Penguin
08/06/13 10:12:43 +c/4qhZ/
#!/usr/bin/perl
my $i = '';
while (<>) {
chomp;
if ($_ eq '') {
$i = '';
print "\n";
} elsif ($i eq '') {
$i = $_;
} else {
print "$i\t$_\n";
}
}
141:126
08/06/13 10:25:54 j8pwVaea
>>140
それを今試してみたら
[100]
[100] 201
[100] 202
[100] 203
[100]
[100] 301
[100] 302
[100] 303
みたいになっちゃいました。
せっかくコードを書いていただいたのですがちょっと
結果が違いました。すみません。
142:login:Penguin
08/06/13 10:28:27 5MIbjJC0
> 126
awk 'BEGIN {OFS = "\t";}; $0 != "" {if ($0 ~ /^\[/) section = $1; else print section, $1}' aaa.txt
多分もっと格好よくできるはずなんだけどなぁ
143:login:Penguin
08/06/13 10:38:47 obeusV/U
>>139
gawk '{if(match($0,/^\[[0-9][0-9]*\]$/))t=$0;else{if(length)$0=t "\t" $0;print;}}' aaa.txt
sed -e '/^\[[0-9][0-9]*\]$/{h;d}/^..*/{x;G;s/\n/\t/;p;s/\t.*//;h;d}' aaa.txt
まだ短くならないかな。
144:login:Penguin
08/06/13 10:43:39 +c/4qhZ/
>>141
203 の次の行は空行じゃないの?
145:login:Penguin
08/06/13 10:45:41 +c/4qhZ/
>>126
> #変数eeeにxxx.txtの2行目から15行目を代入します
> #xxx.txtの行の先頭が20から始まる場合
最初と言ってることぜんぜん違うじゃねーか。
146:126
08/06/13 11:04:27 j8pwVaea
>>142
おおおっ。すごいです。ありがとうございます。
で、あまりにも簡単に説明しすぎたせいで少し動作が違いました。
実際にはaaa.txtは複数の列でできています。
[100]
201 100 200
202 100 200
203 100 200
""
[200]
301 100 300
302 100 300
303 100 300
""
あと先頭が数字では始まらないけど文字列が入っている場合もあります。
その列は何も処理をしたくないんです。もちろん空白の列にも何も処理をしたくないです。
説明が不足していてすみません。お願いします。
147:login:Penguin
08/06/13 11:08:06 +c/4qhZ/
どんどん条件変わるな。
もう付き合いきれん。
148:login:Penguin
08/06/13 11:09:51 +c/4qhZ/
>>140 を好きに改造して使ってくれ。
149:login:Penguin
08/06/13 11:57:53 5MIbjJC0
>>126
#!/usr/bin/awk
BEGIN {
OFS = "\t"
}
{
if ($1 ~ /^\[.+\]$/) {
section = $1
} else if ($1 ~ /^[0-9]/ ) {
sub(FS, OFS) # これがいるかどうか分からない
print section, $0
} else {
}
}
まぁ暇だし,自分の勉強にもなるしな
150:126
08/06/13 12:12:09 j8pwVaea
>>147
ごめんなさいごめんなさい。許して下さい。
>>148
ありがとうございます。今から試してみます。感謝してます。
151:126
08/06/13 12:24:52 j8pwVaea
>>149
^ syntac error
^ 正規表現が終端がされていません
って出ます。
そのコードを2.awkとして保存してchmod 755 で
./2.awk < aaa.txt > bbb.txt
としたんですけど僕のやりかたが悪かったんでしょうか。
もうちょっと試してみます。すみません。
152:login:Penguin
08/06/13 13:34:55 frtx8yVp
シェルとかプログラミング言語よりも,ちゃんと説明できる日本語を習得するのが先だとしみじみ思う.
153:126
08/06/13 13:45:24 j8pwVaea
awk -f ./2.awk < aaa.txt > bbb.txt で実行できました。すみません。
でも結果としては数字のところにタブが挿入されただけでうまくいきませんでした。
また時間がある時にで結構ですので教えてくださると助かります。よろしくお願いします。
154:126
08/06/13 14:31:16 j8pwVaea
あれれ。すみません。aaa.txtを作って試してみたらうまく動作してました。
元データのほうに何か問題があるようです。確認してみます。
155:126
08/06/13 14:57:25 j8pwVaea
>>149
ありがとうございます。感謝感謝です。
if ($1 ~ /^\[.+\]$/) {
を
if ($1 ~ /^\[.+\]*$/) {
にして無事動作しました。[]の後ろに文字列が入っているのが原因でした。
本当にありがとうございます。
156:login:Penguin
08/06/15 03:39:35 sc6xQlic
#!/bin/sh
n=`cat text.txt`
で読み込んだ$nに対して
一行ずつ処理を行いたいのですがどうしたらよいでしょうか
for a in $n
を使おうと思ったのですが、スペースでも分割されてしまい
理想の動作をさせることができません
よろしくお願いします
157:login:Penguin
08/06/15 04:58:13 wo2EqLas
cat text.txt | while read line;
do
echo "$line";
done
while read line;
do
echo "$line";
done < text.txt
ダブルクオート
158:login:Penguin
08/06/15 07:24:02 Wqtu/af2
done < text.txt はbash依存だったような
159:login:Penguin
08/06/15 09:18:42 sc6xQlic
>>157
できましたありがとうございます!
whileの中でreadを再び使えば同時に何行まとめて、という処理が出来るんですね
160:login:Penguin
08/06/15 09:44:47 riPFD/ci
>>158
Linux板的にはいいんでないの。 Unix板だったら気にしたほうがいいかもしれんが。
161:login:Penguin
08/06/15 10:19:04 +vOR/R57
>>158
/bin/shでも動くからおk
162:login:Penguin
08/06/15 10:47:11 Wqtu/af2
dashもOKだから、まぁいいのか
163:login:Penguin
08/06/15 12:04:09 MYPOmB3X
そのあたりってPOSIXでちゃんと規定されてるものなの?
単にbashをまねて取り込んだshなのか、真のshからサポートする機能か
どうしたら見分けつけられるのかよくわからない。
164:login:Penguin
08/06/15 12:33:26 +vOR/R57
URLリンク(www.opengroup.org)
165:login:Penguin
08/06/15 12:43:50 cU/mpVoU
bash や dash があるなら、cash もあるのかな。
Csh-Again SHell とか。
166:login:Penguin
08/06/15 12:53:50 MYPOmB3X
>>165
生まれ変わらなくていい。そのまま墓場で寝ててくれ>*csh
167:login:Penguin
08/06/15 12:56:31 MYPOmB3X
>>164
トン。$(command)とか$((expr))って標準だったんだとか色々勉強になるな。
168:login:Penguin
08/06/15 18:20:40 ue0hzIrD
bashで文字列の最後尾が / にあたるものをヒットさせたいのですが、どのようにしたら宜しいでしょうか?
169:login:Penguin
08/06/15 18:49:35 LSl6/nZ+
bashにそんな機能はない
170:login:Penguin
08/06/15 18:53:49 aTr7Cyki
bash()笑
171:login:Penguin
08/06/15 18:54:17 2ND6A6mz
grepで$を使うって話?
172:login:Penguin
08/06/15 19:14:12 AOTtbX65
エスケプすればなんとでも。
173:login:Penguin
08/06/15 19:23:37 lWrIWsAm
>>168
case "$str" in
*/)
echo "match."
;;
*)
echo "unmatch."
;;
esac
174:login:Penguin
08/06/16 02:02:05 irk9chgy
>>168です。仕事が入ってしまいレス遅れました、すいません。
bashにそのような機能はありませんか・・・。
grepでは無く条件式で文字列の末尾を判定させたかったのですが
何も知らない自分としては>>173さんの書いて頂いたのを参考に
しようかと思います。助かりました、有難うございます。
175:login:Penguin
08/06/16 08:11:50 JECOF4SI
>>169に対する皮肉としか読めない。
176:login:Penguin
08/06/16 11:27:24 1Ms3xCVR
#!/bin/csh -f
set s=$1
set t=$2
set f=$3
cat $f | tail +$s | head -$t
exit 0
echo ------------------
以上を改良しろ、と言われました。みなさんならどうしますか?どなたか教えて下さい。
177:login:Penguin
08/06/16 11:28:31 /AfhYEBu
>>176
*csh を使うのをやめる。まずそれからだ。
178:login:Penguin
08/06/16 12:44:56 qvjZYD3V
>>176
速度面で改善ならアセンブリで書き直してやれ
179:login:Penguin
08/06/16 13:59:17 6AAfiJB4
>>176
とりあえずマルチをやめること
180:login:Penguin
08/06/16 23:26:05 gSPrzSdg
>>176
次に日本語を勉強すること
181:login:Penguin
08/06/17 07:40:56 AmqP2Db0
abc
bcd
cde
<abc> hoge hoge
(スペースはタブです)
となっている場合、<abc>の列を削除したい場合
sed 's/\t//g' | sed "s/<abc>*//g" > hoge
だとうまくいかないんですけどどこかおかしいんでしょうか。
ご指摘お願いします。
182:login:Penguin
08/06/17 08:11:56 +a7Qx5aV
>>181
sed 's/^<abc>.*//'
* は「前のものの0回以上の繰り返し」。
シェルの glob と違って「任意の文字列」ではない。
183:login:Penguin
08/06/17 08:57:44 AmqP2Db0
>>182
ありがとうございます。試してみます。
184:login:Penguin
08/06/17 10:01:29 AmqP2Db0
先程はありがとうございました。今度はまた問題が出ました。
aaa
bbb
ccc
ddd
eee
となっているファイルに例えばcccの行にだけ行頭にタブを二ついれたいんですけど
どうすればいいでしょうか。検索してみたんですけどそんなことをする例がないので
わからないです。お願いします。
185:login:Penguin
08/06/17 10:12:39 +a7Qx5aV
>>184
sed 's/^ccc$/\t\tccc/'
186:login:Penguin
08/06/17 11:07:44 AmqP2Db0
>>185
ありがとうございます。
でも僕の例の出しかたが悪かったです。正確には英語じゃなくて日本語なんです。
あああ
いいい
ううう
えええ
おおお
となってて「ううう」の先頭行に処理をしたいんです。
本当にすみません。
187:login:Penguin
08/06/17 20:22:32 RyDH/vmA
同じ人が、ここ10日ぐらい似たような質問を繰り返しているような気がしてならない。
188:login:Penguin
08/06/17 21:23:10 yjVz7+7h
>>187
わわわ
たたた
ししし
ももも
そそそ
ううう
おおお
ももも
いいい
ままま
すすす
189:login:Penguin
08/06/18 07:36:46 U0oDy3CU
>>186
$ cat aiueo.txt
あああ
いいい
ううう
えええ
おおお
$ sed 's/^ううう/\t\tううう/' aiueo
あああ
いいい
ううう
えええ
おおお
>>185の例と全く同じにできるんだが、お前は試しもせずに文句ばっかりたれとんのか。
いい加減にしろデコスケ!
190:login:Penguin
08/06/18 21:41:14 wntHkGxD
>>189
うっせえよ秋葉原殺傷事件予備軍。
191:login:Penguin
08/06/18 22:06:13 POz9Y1nl
Debian etch使ってるんだが初期設定のスクリプトって作れたりする?
例えば・・
/etc/apt/sources.list
OS全体のフォント設定
必要なツールなどインスコ
などなど・・
複数台にインスコするのはいいけど初期設定がマンドイ・・
192:login:Penguin
08/06/19 00:14:33 syeq8gZ9
>>191
やれば作れるんじゃね?
がんばれ。
193:login:Penguin
08/06/19 01:01:28 x+K2/T6V
>>191
一番簡単なのはapache走っているサーバーにディレクトリ作り、そこの設定ファイルのテンプレとかを
置いておく。 そして新しいシステムの基本インスコをしてネットに繋がったら:
wget URLリンク(hoge)
./install-etch
で、そのスクリプトの中でapt-getしたり設定ファイルを書き換えたり、必要なファイルをwgetで持って来て
置き直したりとかごちゃごちゃ書いておく。
RH系だったらkickstartがお薦め。 sargeでdebianのカスタムインストーラー作りも一時したけど
えらくめんどくさかった。 最近はもっと優しくなったのかな?
194:login:Penguin
08/06/19 01:15:35 ETqS5qxr
>>192
おう
>>193
ようはコマンドラインを書けばいいわけだよね。とりあえずこれやってみる。
Kickstartをググってみたら簡単そうだけどローカル鯖必要そうだね。
どうもでした。
195:login:Penguin
08/06/19 01:32:21 JFsnEc1J
すいません エスケープの使い方で質問させて下さい。
下みたいなスクリプトで
#!/bin/sh
A=tama
B=mike
for i in $A $B
do
tmp=`eval perl -e \'\$\a \= \"$i\"\; if \( \$\a \=\~ \/\^\\\S\+\(\\\S\{1\}\)\$\/ \) \{ print \"s\$\{ 1 \}x_player\" \}\'`
echo "$tmp"
done
exit 0
一応こうすれば動くのですが、
perlの行のところにあるエスケープを減らしてすっきりさせたいのです。
良い方法を教えて下さい。
196:login:Penguin
08/06/19 01:45:49 syeq8gZ9
>>195
perl スクリプトを別ファイルに追い出す。
197:login:Penguin
08/06/19 08:19:04 k7GKeo3u
シェルに評価されてはいけない部分をシングルクォートする。
i=tama
perl -e 'printf( "%s: nya-\n", '"$i"' )'
198:login:Penguin
08/06/19 17:34:35 qZMvy29K
shの質問です
スクリプトがCtrl+Cなどで終了させられた時に特定の動作を持たせたいのですが
どのようにすれば実装できるでしょうか?
199:login:Penguin
08/06/19 17:37:01 syeq8gZ9
>>198
trap
200:login:Penguin
08/06/19 18:08:53 qZMvy29K
>>199
ありがとうございますm(_ _)m
201:login:Penguin
08/06/19 23:30:35 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
08/06/20 08:28:49 PYgL06kk
evalに渡すと消えるという意味なら。
tmp=`eval perl -e "'"'$a = "'"'""$i""'"'"; if ( $a=~ /^\S+(\S{1})$/ ) { print "s${ 1 }x_player" }'"'"`
203:login:Penguin
08/06/20 09:48:11 mQhh6bQc
tmp=$(perl -e 'print "s${1}x_player" if $ARGV[0]=~/^\S+(\S{1})$/' "$i")
204:login:Penguin
08/06/21 01:08:40 lACEyUp0
shでスクリプトを走らせている時に
スクリプト内でスーパーユーザの権限を得るにはどうやったらいいのでしょうか
スクリプトにsuを埋め込むとスクリプトが止まってしまって
exitしてから再びスクリプトが動き出すのですが
権限だけ持たせてスクリプトをそのまま走らせたいと思っています
何か手は無いでしょうか
205:login:Penguin
08/06/21 01:11:38 4k/SNXDG
>>204
sudo
206:login:Penguin
08/06/21 01:42:03 EyYhn7dK
リサ
207:login:Penguin
08/06/21 01:49:53 lACEyUp0
>>205
ありがとうございます
(自分にとっては)有用なスクリプトが組めましたm(_ _)m
感謝の極みです
208:login:Penguin
08/06/21 12:58:15 9C5PYE0l
ふとした疑問だが、スクリプト内でスーパー・ユーザにスイッチするのと、スクリプト自体をスーパー・ユーザ専用にするのと、どちらが安全なのだろう。
209:login:Penguin
08/06/21 13:28:05 ESYd9xh6
>>208
運用の仕方によって変わるでしょ。
一概にどちらが安全とか言えないよ。
210:login:Penguin
08/06/22 13:34:22 IsXP6W78
標準出力は標準出力のままで標準エラーだけをパイプしたいのですが
どのようにすればよいですか?(sh)
211:login:Penguin
08/06/22 13:38:00 aBc+5bz2
exec 3>&1
(echo stdout; echo stderr >&2) 2>&1 1>&3 | rev
212:210
08/06/22 13:59:15 IsXP6W78
>>211
どうもありがとうございました。
213:login:Penguin
08/06/22 16:57:49 3HpeFvyL
あれ?更新されてない
214:login:Penguin
08/06/22 17:03:12 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
08/06/22 17:04:18 G5GD5xl+
>>214
lftp使え。
216:login:Penguin
08/06/22 17:13:28 3HpeFvyL
わかりました。ありがとうございます。lftp調べてみます。
217:login:Penguin
08/06/22 17:19:23 3HpeFvyL
ローカルになく、リモートにのみあるファイルを削除したいときは
mirror -R -e
や
mirror -e
などできるみたいですが、
ローカルで更新されたファイルのみアップといったこともできるのでしょうか?
218:login:Penguin
08/06/22 17:47:05 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
08/06/22 18:16:38 7nMjRrut
n 更新されたのみ
mirror -Rn
220:login:Penguin
08/06/22 22:21:11 R/kAIh0A
ubuntu初心者スレから誘導されました。
成形した時刻の文字列をクリップボードにコピーするシェルスクリプトを作りたいのですが
まずdateで時刻を取得出来ることがわかりました。それで日付や時間を成形してみました。
で、その取得した時刻をクリップボードにコピーさせる方法が分かりません。
ubnutuは8.04です。よろしくお願いします。
221:login:Penguin
08/06/22 22:29:53 G5GD5xl+
>>220
xclip が使える。ただし日本語が通らない。
ruby がクリップボード操作できるみたい。
222:login:Penguin
08/06/22 23:37:38 MIeLc8tv
シェルスクリプトで正規表現使いたいのですが、
末尾が .jp のものだけマッチさせたい場合は
$\.jp
でよろしいのでしょうか?
223:login:Penguin
08/06/22 23:55:19 iLaxDbCt
シェルだけで正規表現って扱えるの?
224:login:Penguin
08/06/23 00:09:49 xSXSaj7v
>>223
[[ 'www.example.jp' =~ '\.jp$' ]] && echo OK
225:login:Penguin
08/06/23 00:26:20 bFQcdw6C
>>223
man expr
226:login:Penguin
08/06/23 07:14:57 xSXSaj7v
>>225
expr は外部コマンドじゃね?
227:login:Penguin
08/06/23 07:23:33 /dfygF5Q
bash 3.2.33だが>>224だとOKと表示されない件について
228:login:Penguin
08/06/23 07:55:06 xSXSaj7v
quote しちゃだめになったのか。
[[ 'www.example.jp' =~ \.jp$ ]] && echo OK
229:login:Penguin
08/06/23 08:04:56 E3xyu4wD
>>221
そうですか。日本語通らないですか。
rubyがいけるならPythonもいけるのかな。探してみます。ありがとうございます。
230:login:Penguin
08/06/23 13:11:35 R4pyjC2R
>>229
xselでおk
231:login:Penguin
08/06/23 20:44:19 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
08/06/23 20:57:33 II3EglSV
>>231
>xsel -p < $DATE ではうまくいきませんでした
echo $DATE > xsel -p
233:login:Penguin
08/06/23 21:41:12 t++FsyID
echo $DATE | xsel -i
234:login:Penguin
08/06/23 21:51:30 E3xyu4wD
>>232
どうもうまくいきませんでした。
修正したものを実行すると、~.shと同じディレクトリに xsel という中身が"-p"の入ったファイルが作成されてました。
235:login:Penguin
08/06/23 21:54:47 eV6dG77Y
>>234 look asap >>233
236:login:Penguin
08/06/23 22:05:35 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
08/06/23 22:18:40 t++FsyID
#!/bin/sh
date "+%Y/%m/%d %T" | xsel -i
238:login:Penguin
08/06/23 22:26:25 E3xyu4wD
>>237
おお! 見事に表示されました。
dateごと渡してやればよかったのですね。勉強になりました。
ありがとうございました。
239:232
08/06/23 22:40:24 7JKTU8Gt
ごめん! (汗)
240:login:Penguin
08/06/23 22:50:21 xSXSaj7v
>>238
> dateごと渡してやればよかったのですね。
別に echo $DATE | xsel -i でもいいよ。
241:login:Penguin
08/06/23 22:51:35 xSXSaj7v
>>236
> DATE= $y/$m/$d/" "$t
問題はここだ。
= の後の空白が余分。
むしろ
DATE="$y/$m/$d/ $t"
と書くべき。
242:login:Penguin
08/06/24 08:29:39 /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
08/06/24 08:33:49 /ei8InYp
一部ミスりました
× ダブルクオーテーションでくくると文字列がそのまま出てくる気がして、
○ ダブルクオーテーションでくくると文字列がそのまま出てくる気がして、 全体をくくらずにしていました。
244:login:Penguin
08/06/24 09:36:52 7q12wxxB
>>242
> ダブルクオーテーションでくくると文字列がそのまま出てくる気がして、
URLリンク(www.linux.or.jp)
YEAR=2008
echo "$YEAR"
echo '$YEAR'
245:login:Penguin
08/06/24 10:37:39 /ei8InYp
>>244
そうだったのですか、シングルクオーテーションは文字として出てきて、ダブルクオーテーションでは、$も例外として、$が機能すると言うことですか。
いやはや知らないことだらけでした。勉強になります。ありがとうございます。
246:login:Penguin
08/06/24 19:18:26 GHnoP+if
初心者の書くスクリプトは、むしろダブルクォートを忘れて
インジェクション的な事故多発なわけですがw
if [ x"$HOGE" == x"DQN" ] ; then
ちゃんとこういう風にまで保護されているスクリプトは稀。
247:login:Penguin
08/06/24 19:36:34 RnXDPQy/
俺さ、その x が何のためにあるのか、以前から不思議なんだ。
if [ "${HOGE}"="DQN" ] ; then
との違いは何?
248:login:Penguin
08/06/24 19:40:10 y8G0f9r3
$HOGEが未定義の場合どうなるんだ?
249:login:Penguin
08/06/24 19:41:45 7q12wxxB
>>247
= と == は違う。
== の前後に空白が必要。
その上で、$HOGE が空文字列の場合にエラーになるのを回避するため。
250:login:Penguin
08/06/24 19:50:56 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
08/06/24 20:00:18 7q12wxxB
>>250
> で、"${HOGE}" == "DQN" だったら $HOGE が未定義でもエラーにならない。
bash はそうだけど、エラーになるシェルもある。
Solaris の /bin/sh とか。
252:login:Penguin
08/06/24 20:07:28 GHnoP+if
やはり Solaris かw そんな気はしていた。
普段は Linux 使ってるから必然と bash になっちゃうんだよね。sh で出来たっけ?
とか結構記憶が曖昧になってしまって鬱。場合にもよるけど、ポータビリティを
意識してなーんとなく昔ながらの書き方を守ってる漏れ・・・・・
あえて #!/bin/bash って書くべき?w
253:login:Penguin
08/06/25 02:03:39 QRiAgjkv
Solarisの古いshなんて無視していいだろ。
POSIX shell (ash, bash, ksh, ...) で動けばいいよ
254:login:Penguin
08/06/25 03:24:07 CH5fnn3k
実際 そんなに拡張されてないし でしょw
#!/bin/bash
でいいよね。
255:login:Penguin
08/06/25 03:42:02 r4HiK5gk
>>254
スクリプト動かすのに重量級のbashなんか使わないだろ。
#!/bin/sh
で十分。
256:login:Penguin
08/06/25 04:07:08 CZiflGY7
>>255
先生!うちの環境では
file /bin/sh
/bin/sh: symbolic link to `bash'
です.どうすればいいですか?
257:login:Penguin
08/06/25 04:46:49 N+m64wV+
>>255 i486SX/16MHz
258:login:Penguin
08/06/25 04:59:00 CH5fnn3k
だから もう 手じかな環境では
/bin/shはないでしょ。
/bin/shと書けばいちおー 互換モードで動くってだけで。
259:login:Penguin
08/06/25 10:58:55 NWVIKvCl
FreeBSDの事もあるしshで書いておこうってだけじゃね
260:login:Penguin
08/06/25 11:25:51 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
08/06/25 11:46:13 e3mj3BLL
別にどっちかに決める必要なんてない。
portabiltiy が必要なスクリプトは protable に書く。
そうでなければ bash 依存な書き方をしてもいい。
それだけのこと。
262:login:Penguin
08/06/25 12:06:01 foNddTWJ
>>256
ぶっちゃけbashはzshよりも遅い。軽量のashなんかとは比べるべくもなく。
ログインシェルとしてなら使い勝手云々ってのがあるけど、
/bin/shをbashにしておくメリットはあんまないよ。
263:login:Penguin
08/06/25 12:36:18 Qkn+OwYP
なんかもっともらしいウソが垂れ流されてるぞ。
>>251
>> で、"${HOGE}" == "DQN" だったら $HOGE が未定義でもエラーにならない。
>bash はそうだけど、エラーになるシェルもある。
>Solaris の /bin/sh とか。
solaris ではたしかにエラーになるけど、それは $HOGE が未定義だからではない。
== という演算子自体がないため。
互換性を考えると文字列の比較には == ではなく = を使う。
= なら $HOGE が未定義でもエラーにならない。
x"$HOGE" のようにするのは、$HOGE が -f とか ! のような文字列だったときに
別の意味に解釈されないようにする対策。
264:login:Penguin
08/06/25 17:32:32 PrRjFF/A
マジッスカ
ちょっとコンビニで Soliras 買ってくる><
265:login:Penguin
08/06/25 20:22:07 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
08/06/26 15:09:48 ZojLTS6b
お邪魔します。
シェルスクリプトを走らせて、あるシェルスクリプトを起動させるようにするにはどういう書き方したらよいですか。
また、そのシェルスクリプトを走らせた結果を変数にぶちゅっと入れる書き方はどうしたらいいですか。
267:login:Penguin
08/06/26 15:35:52 ZojLTS6b
事故解決しますた。すいません。
268:login:Penguin
08/06/26 22:18:06 ZPxwXTvf
ぶちゅっ
269:login:Penguin
08/06/28 20:17:43 /ZK60QF9
シェルでエロゲをつくるためにはどうしたらいいですか
270:login:Penguin
08/06/28 21:21:44 MDU5A1fa
エロゲって何ですか
271:login:Penguin
08/06/28 22:52:16 /ZK60QF9
linuxがwindowsに唯一負けてるのがエロゲです
272:login:Penguin
08/06/28 23:29:11 fs03Gty7
だとすれば、sh スクリプトでなく、BAT ファイルで作ると良いのではないでしょうか
273:login:Penguin
08/06/28 23:48:10 ZJYzC1iZ
windowsに対抗するため、Linuxにエロゲを導入します
また、複数のplayerがエロゲサーバにtelnetしてplayすることを想定としているため
GUIではなくCUIで行いたいと思っています
274:login:Penguin
08/06/29 00:53:49 nwf205tS
>>273
CUIでいかにエロさを出すかが問題だ
絵もない本当のノベルゲームでいいっていうなら、
ひたすらechoとifとかwhileとかcaseを駆使すればできる気がするけど
今どきtelnetってのもツッコミどころだけどな
275:login:Penguin
08/06/29 01:02:35 wXyVSJIl
Nethackはエロゲ
異論は認める
276:login:Penguin
08/06/29 01:16:19 4XAvfgBl
NetHackを2ch-AA拡張すればエロくなる。
主人公:( 'A`)
ヒロイン:J( 'ー`)し
てな具合。そんでもって濡れ場ではフルスクリーンAAでアニメーションするの。
277:login:Penguin
08/06/29 02:09:45 O4g3tYWz
エロゲの話はこっちで。
Linuxで動くオープンソースエロゲを作ろう!2
スレリンク(linux板)
278:login:Penguin
08/06/30 18:35:41 Y3MWGahT
Linux + Darwin Streaming Server で自分専用の放送局を何チャンネルも建てて
どこでも自分のコレクションした音楽を聞けるようにして楽しんでいるのですが、
面倒くさいのは、メタファイルを用意せねばならない点。
例えばマイケル・ジャクソンだけを集めた専門局を作るとします。これを
1). URLリンク(www.example.com)
2). URLリンク(www.example.com)
などといったメタファイルに、以下のような内容を記述しておいてやらねばなりません。
1). [playlist]
File1=URLリンク(www.example.com:8000)
Title1=nina
Length1=-1
NumberOfEntries=1
Version=2
2). URLリンク(www.example.com:8000)
ま、大した量じゃないので、今まではいちいち手作業で cp して vi で編集していたのですが、
これを、例えば
$ mkpls michael
などと言った変数 $streaming_name を与えれば、
自動的にファイル内の特定の部分も書き換えて、
かつ、.pls .m3u それぞれのストリーミング用メタファイルも
まとめて生成してくれるようなスクリプトがあれば便利なのに、
と思っているのですが、どう書けばいいのかサッパリ解りません。
基本は、単に変数を含んだひな形を用意し、ひな形を複製、与えられた変数を代入して、
変数の名前+拡張子で保存、というだけのことだと思うんですが。。。。orz
279:login:Penguin
08/06/30 22:16:41 mYyaCshH
超入門者です。下記内容のシェルを作成しなければならないのですが、参考書を見てもよく分からず
知り合いにも分かる人間がおりません。。ごめんなさい、どなたかご教授頂けないでしょうか?
・/var/log/mailを解析して特定のユーザに関する調査を実施して結果をファイル出力する。
(条件)
・スクリプトの実行形式は「スクリプト名 ログファイル名 メールアドレス」
・受信メール数と送信メール数を集計する。
・調査をするユーザは引数として与える。
・調査をするユーザはtest@toyo.co.jp
どのような記述にすれば良いのか、参考となる情報を何でも構いませんのでお願いいたしますm(__)m
280:login:Penguin
08/06/30 22:19:25 LfTOpvVG
>>279
grep $2 $1 | wc -l
さっさと学校辞めて派遣労働者にでもなってしまえ。
その方が親孝行だ。
281:login:Penguin
08/06/30 22:51:24 LE+io00E
シェルからwindowsにrshのような感じでコマンドを打ちたいんですが、
telnetを使ったりしてどうにかならんでしょうか?
282:login:Penguin
08/06/30 22:51:47 LfTOpvVG
>>281
expect
283:login:Penguin
08/06/30 22:55:37 pVpnujlR
>>279
スクリプト以前にひょっとしてシェルプロンプトで何も叩いた事がないほど初心者?
284:login:Penguin
08/06/30 23:08:10 mYyaCshH
279です。
>>280
その言葉真摯に受け止めます。ですが今後努力する所存です。
すいません。諸事情で時間がない中でしたのでこちらで質問させて頂きました。
参考情報ありがとうございます。
>>283
簡単なコマンドなら叩いたことはありますがシェルは全くの初心者です。
どうか宜しくお願い致しますm(__)m
285:login:Penguin
08/06/30 23:13:41 LE+io00E
>>282
家のfedoraでインストールして試してみてexpectすげーと思ったけど、業務用のredhat 3 には多分入ってないです・・・
ありがたいですけど、他にないですか?
286:login:Penguin
08/06/30 23:35:01 EeC8VQhU
>>285
Expect.pmとかopen3.rbとか・・・
最悪openptyで相当品を書けばいい。tccで書けばそれでもスクリプト。
287:login:Penguin
08/06/30 23:41:54 pVpnujlR
>>284
それじゃまずgrepを使ってあるユーザーの受信メールの行と送信メールをどうやったら切り出せるか
試行錯誤し、それが出来たらwc。 ひっかかったらgrepのmanページでまず回答を探す努力を。
awkとかのほうが色々柔軟性があるけどたぶん使った事無いでしょう。
あと>>3のリンク先をいくつかながめるといいと思う。
288:login:Penguin
08/06/30 23:48:15 hskJhfYi
初心者です。お願いします。
cutコマンドはファイルのみ使えますか?
変数にも使えるでしょうか。
変数に格納してある文字列からcut.grepを使いたいんですが。
289:login:Penguin
08/06/30 23:49:01 mYyaCshH
>>287
ご教示いただいた方法にて調べてみます。本当にありがとうございますm(__)m
290:login:Penguin
08/06/30 23:54:15 LE+io00E
>>286
それらはアプリでしょうか?
インストールが必要なのはNGなんです。
標準的なコマンドで実装できれば・・
291:login:Penguin
08/07/01 00:23:35 7AvBIvdb
>>278
plsとm3uは多くのプレイヤーが使ってる形式のようですから
お使いのプレイヤーにその機能がないか確認してはいかがでしょう。
プレイヤーをお使いでないならこういうものもあります。
URLリンク(freshmeat.net)
ビルドにuriparserを求められますがconfigureに--disable-xspfを
つけると要らなくなります。
292:login:Penguin
08/07/01 00:37:40 F/ZP/0+B
>>278
外してるかもしれないのですがこれだけで十分ですかね
#!/bin/sh
streaming_name=$1
cat <<END >$streaming_name.pls
[playlist]
File1=URLリンク(www.example.com:8000)
Title1=nina
Length1=-1
NumberOfEntries=1
Version=2
END
cat <<END >$streaming_name.m3u
URLリンク(www.example.com:8000)
END
293:login:Penguin
08/07/01 01:20:48 DL3owd7E
>>288
$echo 1111 bbbbbb | cut -f1 -d ' '
で1111と表示できるからcutにパイプして
echo $var | cut -fx
で出来る
変数にファイル名を入れてる場合なら
cut -fx < $filename
でおk
あとはエスパーじゃないんで分からん
294:login:Penguin
08/07/01 07:30:47 /iSyGj3E
>>288
echoしてリダイレクト。基本。
295:login:Penguin
08/07/01 10:01:29 ckhBGtgF
質問です。
変数の中に=があったらそれまでの文字を出力したいんですが、
例)$1に abc=defg -> abcのみ出力
$2に abcdefgh -> 何もせず
こういった場合、abcを取り出す(=の前までCUT?)事はできますか?
if(( grep '=' $1 ))
then
cut~
みたいになるんでしょうか。お願いします。
296:login:Penguin
08/07/01 10:12:23 wSJ46Tmn
>>295
case "$1" in
*"="*) echo "$1" | sed 's/=.*//' ;;
esac
297:login:Penguin
08/07/01 10:25:43 sgtpdcHD
bashで
x=$1
p=${x%=*}
[ $x = $p ] || echo $p
298:login:Penguin
08/07/01 10:28:44 ckhBGtgF
>>296
即レス有難うございます!お陰様で出来ました^^
299:login:Penguin
08/07/01 10:37:02 wSJ46Tmn
>>297
それだと $1 が「/tm*/=xx」とかのときうまくいかない。
300:login:Penguin
08/07/01 10:58:55 HD46/kcy
>>295
>(=の前までCUT?)
>>296 で sed の例が出てるけど
cut -d "=" -f 1
とか
awk -F "=" '{print $1}'
とかでもできる。
301:login:Penguin
08/07/01 11:57:13 ckhBGtgF
>>296,>>297,>>300の皆さん有難うございます!
302:login:Penguin
08/07/01 12:12:55 ckhBGtgF
すみません、力を貸して下さい。
今やらなければならないのが、lsuser ALL を叩いて、
出力結果を見出し付で出力する(体裁を整える)です。
現在見出しの部分でつまずいています。
bin id=2 pgrp=bin groups=bin,sys,adm home=/bin
guest id=100 pgrp=usr groups=usr home=/home/guest
などを
user_name id pgrp groups
bin 2 bin bin,sys,adm
guest 100 usr usr
と言った感じです。=の前後でCUTし、前部分を見出しに、
後部分を見出しの下に出したいです。難しいのが、既に見出しにidがあるのに
また見出しにidが追加されてしまうんです。
どなたかサンプルを作っていただく、またはアドバイスを頂けますでしょうか。
よろしくお願いします。長文・乱文すいません。
303:login:Penguin
08/07/01 12:33:08 wSJ46Tmn
>>302
perl か何かで書いた方が早いと思う。
304:login:Penguin
08/07/01 12:44:02 ckhBGtgF
>>302
アドバイス有難うございます。調べてみます!
書き忘れたんですが、KORNシェルです。
305:login:Penguin
08/07/01 12:46:37 EG1sJMbp
実用的な答が欲しいならもう少し環境を書くべきだ.
bash,sed,awk,perlなどが使えるのかどうかとか.
それともシェルだけでアクロバティックにこなしたいのか?
306:login:Penguin
08/07/01 12:50:08 wSJ46Tmn
そもそも使ってる OS は何よ。
307:login:Penguin
08/07/01 13:03:02 Arg2/vlJ
>>292
ありがとうございます。バッチリでした。
いやー楽になった。っていうか勉強になりました。
みなさん、どういうところで構文を学んでいらっしゃるんでしょう?
この手のことについては完全に無学なもので、
どこからどう手をつけていいやら分かりません。
308:login:Penguin
08/07/01 13:21:36 wSJ46Tmn
>>307
テンプレくらい読め。
309:login:Penguin
08/07/01 13:31:41 ckhBGtgF
302です。環境はUNIX AIXです。そしてKORNシェルです。
310:login:Penguin
08/07/01 13:39:10 wSJ46Tmn
>>309
なら板違い。
311:login:Penguin
08/07/01 13:42:53 F/ZP/0+B
IFSに=を加えて行ごとにsetすると簡単
312:login:Penguin
08/07/01 13:48:38 ckhBGtgF
>>310さん すいません板違いでしたか。移動します。
>>311さん やってみます。有難うございます。
313:login:Penguin
08/07/01 17:29:52 0HA3LMf0
今日の宿題スレッドはここですか?
314:login:Penguin
08/07/01 20:13:34 sk7tfsLb
>>309
そういえばIBMのTivoli agent for Linuxをインスコしようとしたら
インストーラーがkshを必要としやがった。
315:login:Penguin
08/07/02 07:58:38 kAlrwjxr
>>302
俺には難しかった・・orz
誰か見本よろ
316:login:Penguin
08/07/02 11:59:47 t4E6Zbe3
>>302
#!/bin/sh
st=true
while read s
do
rctop=null
rc=null
for n in $s ;do
if [ $st = true -a "$rctop" = "null" ] ;then
rctop=user_name
fi
if [ "$rc" = "null" ] ;then
rc=$n
else
if [ $st = true ] ;then
rctopadd=`echo -n $n | cut -d '=' -f 1`
rctop=`echo $rctop $rctopadd`
fi
rcadd=`echo -n $n | cut -d '=' -f 2`
rc=`echo $rc $rcadd`
fi
done
if [ $st = true ] ;then
echo $rctop
st=false
fi
echo $rc
done
$./shellscript.sh < n.data
理想の動作じゃないだろうが
フォーマットをこっちが指定するやり方として…あとは整形の仕方だな
317:login:Penguin
08/07/02 12:18:34 15uy4jBz
>>312 で移動するって言ってるんだから
もうここで言ってもしょうがないんでは。
318:login:Penguin
08/07/02 13:02:11 t4E6Zbe3
('A`)スマソ
319:login:Penguin
08/07/02 15:26:35 BlTL/xTh
>>316>>317>>318
どこに行っていいかわからなくて、ちょくちょく覗いてましたw
>>316を参考にしたら、思ったとおりの動きをしてくれました。
本当に有難いっす。
320:login:Penguin
08/07/02 15:29:18 15uy4jBz
さっさと消えろ。
シェルスクリプト総合 その11
スレリンク(unix板)
321:login:Penguin
08/07/02 18:57:00 iGIzjxTr
質問です。
たとえば、
cat test
1
2
3
4
5
と表示されるシェルスクリプトがあったとして、それを
5
4
3
2
1
と表示させるにはどうしたらいいでしょうか?
322:login:Penguin
08/07/02 18:59:10 15uy4jBz
>>321
tac test
323:login:Penguin
08/07/02 19:12:45 iGIzjxTr
>>322
即答ありがとうございますっ
324:login:Penguin
08/07/02 23:09:21 tYZaCcmU
>>322
しっ、知らなかった... なんつー冗談ネーミング。 いつからあるの? 発祥はgnuかな。 Wikipediaにも
載ってない。
325:login:Penguin
08/07/02 23:11:36 tYZaCcmU
>>324
あ、あったわ。 tac(Unix)であった。
326:login:Penguin
08/07/03 07:56:36 HJXPhQch
Terrible-monster Attacking Crew
327:login:Penguin
08/07/04 00:23:17 Z8+RYNGO
cat tac
most more less
head tail
cut paste
pgp gpg
mail nail
言葉遊び系のコマンドペアって案外少ないんだな。
328:login:Penguin
08/07/04 01:21:52 7gcupJvt
if fi case esac
#ここはコマンド以前にシェルスクリプト スレだよな
329:login:Penguin
08/07/04 01:24:49 9pO2naUI
esac にはびっくりしたなーもー
330:login:Penguin
08/07/04 05:28:59 AeTu0vqB
逆文字でネストを表現するのはお手本となる言語があった気がする
331:login:Penguin
08/07/04 08:23:27 jR7hqKfT
プロセスをkillするシェルを作成しましたが、そのシェルそのものも引っかかってしまいます。
下記を実行すると、test のプロセスはKillされますが、
./kill_test.sh: line 6: kill: (17914) - No such process
と、エラーが出ちゃいます。
どのようにすれば、そのシェルそのものを検知しなくできますでしょうか。
例えば、test というプロセスをKillするプログラム
#!/bin/bash
# kill_test.sh
ID=ps axo pid,cmd | grep test | awk '{print $1}'`
if [ -n "$ID" ]; then
kill $ID
fi
実行結果
test のプロセスはKillされますが、エラーも出る
./kill_test.sh: line 6: kill: (17914) - No such process
332:login:Penguin
08/07/04 08:32:51 dZZeWoZr
>>331
pkill test
333:login:Penguin
08/07/04 08:55:04 jR7hqKfT
ありがとうございます。
プロセスはKillされますが こんどは Terminated と出ちゃいますが...
#!/bin/bash
# kill_test.sh
pkill test
334:login:Penguin
08/07/04 16:17:24 8eslOrWY
>>331
grep -v $$ とかやって
シェルスクリプトの pid を除く。
grep -v grep とか grep [t]est とかやって
grep の pid を除く。
335:login:Penguin
08/07/04 23:59:25 /fP/UZlP
most なんて初めて知ったよ。
URLリンク(www.jedsoft.org)
336:login:Penguin
08/07/05 05:45:46 zldIi++e
>>335
同じく
support multiple windowsの意味がわからんwww
337:331
08/07/05 08:21:10 f1ZF3ker
ps axo pid,cmd | grep test| grep -v ' grep' | awk '{print $1}'
で、できました。 m(._.*)mペコッ
pkill 知りませんでした。pgrepも知ることができ感謝です
338:login:Penguin
08/07/05 15:47:51 9A3h5Tdb
>>335
漏れも漏れも
can scroll left and rightの意味がわからん。
339:login:Penguin
08/07/05 16:46:32 QzBtt5r9
文字どおり左右にもスクロールできる、ってことじゃないのか
複数のファイルが見られるとか書いてあるし
URLリンク(www.slackbook.org)
340:login:Penguin
08/07/05 19:44:37 wIp47NAo
perlとかrubyとかpythonとかはシェルスクリプトよりも確かに優れてる面もたくさんあるけど、
classpathの設定とかで混乱する手間と暇を総合的に考えると、単純なシェルスクリプトの範囲内で
問題を解決する能力がある人のほうが貴重。
341:login:Penguin
08/07/06 00:07:36 H+bXS9E7
>>340
めんどいからさっさと結論を出すと、適材適所だな。
次の方どうぞ。
342:login:Penguin
08/07/06 00:17:49 KiLBqQPD
>>340
> classpathの設定とかで混乱する手間と暇
ちょっとまてw。perlとかrubyとかpython使ったことないだろ?
java男ご乱心。
343:login:Penguin
08/07/06 00:19:29 H+bXS9E7
>>342
例えばperlとかには@INCとかあるから、その辺のことを話したいんだろうと理解。
行間くらい読んでやれ。
344:login:Penguin
08/07/06 00:29:37 KiLBqQPD
>>343 行間読んでJython,Jrubyみたいな話かとおもた。あんなキモいもん認めん。
345:login:Penguin
08/07/06 00:31:39 fSJWsnfA
作るスクリプトが動かされる環境を予測できて,ちゃんと互換性をもたせる能力があればperlでもgnu依存でもなんでもいいよ.
346:login:Penguin
08/07/06 00:33:14 KiLBqQPD
それでもjavaライブラリ依存は認めない。
347:login:Penguin
08/07/06 20:32:11 Bp8Wp40b
テキスト処理について質問させてください
SQLを格納した以下のようなログファイルがあります。
select * from table1 where 名前='田中'
select * from table1 where 名前='佐藤' and 年齢 > 20
select * from table1 where 名前='鈴木'
これの条件部分('田中'とか'佐藤'の部分)を'*'に一括で変更する方法はありますか?
環境としてbash、awk、sedは使えますがperlは使えません。
よろしくお願いします
348:login:Penguin
08/07/06 21:12:08 9FSHXxTH
$sed "s/名前='.*'/名前='*'/g" hoge > foo
$mv foo hoge
349:login:Penguin
08/07/06 21:36:34 7sKhRIVr
>>348
$ sed -i "s/名前='.*'/名前='*'/g" hoge
350:login:Penguin
08/07/06 21:42:16 9FSHXxTH
そのオプションマニュアルに載ってないな、初めて知った勉強になりました
351:login:Penguin
08/07/06 22:12:09 ksmXqbT3
再起動(shutdown -r now)後、
数分後に指定シェルを起動させたいのですが、
何か良い方法ないでしょうか?
centos4で、
/etc/rc.local
に記述すると即時起動は可能なのですが、
時間指定ができないため悩んでおります。
再起動を行うのが一定時刻ではないので
atも使えません。
どなたかお助けくださいませ。
352:login:Penguin
08/07/06 22:14:33 fSYsy/u2
>>351
sleep
353:login:Penguin
08/07/06 22:21:54 WvrNzaWB
>>348-349
ありがとう
354:login:Penguin
08/07/06 22:28:07 fMUp8CRa
>>351
at now + 数 minutes
などと /etc/rc.local に書いたらどうだろう。
355:351
08/07/06 22:45:55 ksmXqbT3
>>352
>>354
サンクスコです!!
試してみます!!
356:login:Penguin
08/07/07 21:33:14 pcTeT086
uClinux2.6上のBusyBoxのmshというシェルで質問です。
BusyBoxのバージョンは以下です。
BusyBox v1.4.1 (2008-06-02 10:22:52 CST) Built-in shell (msh)
mshでループ処理をさせていると、いつのまにか
Shell input nested too deeply
というエラーになり、スクリプトのプロセスが死んでしまうのですが、
何か良いやり方はあるでしょうか。
やりたい事は、アプリケーションの裏方で、1秒毎にサーバに
pingを打つなどしてネットワークが見えているかを確認し、
通じないならリカバリをするポーリング処理です。
autorun.sh内からsrvwatch.sh &として起動しています。
srvwatch.sh
--------
#!/bin/sh
server=192.168.0.1
while [ 継続条件 ]
do
ping $server -c 1
if [ $? != 0 ]; then
# ( pingが通じない時の処理 )
fi
sleep 1
done
最悪、他のシェルが使えない事もないのですが、mshで解決できれば
それに越したことはないので、よろしくお願いします。
357:login:Penguin
08/07/07 21:34:48 2WJ5nXyr
>>356
キリの良いところで別のスクリプトにして子プロセスとして動かせば?
358:login:Penguin
08/07/07 21:44:55 pcTeT086
>>357
なるほど。
例えばアプリケーション内のループをトリガにできれば問題を回避できそうですね。
その方向で検討してみます。
359:login:Penguin
08/07/13 16:02:53 XKteJijz
quotaのedquotaだとテキスト形式でエディタで編集しなきゃいけないですが、
コマンドのみで指定ユーザを指定容量に変更、ってどうすればできるでしょうか?
360:login:Penguin
08/07/13 18:28:58 Ixz1lkH8
実は、ここは「シェルスクリプト総合」スレ。
361:login:Penguin
08/07/13 23:41:37 2nzKAI8F
a,1
a,2
b,3
c,1
d,15
d,1
d,1
e,3
こんな感じのファイルを、1カラム目でユニークにして、2カラム目は1カラム目の値ごとに合計を出したい
という場合なんですが、シェルではむずいですか?
a,3
b,3
c,1
d,17
e,3
この結果を求めてます
362:login:Penguin
08/07/14 00:16:50 pAKMtVeu
いいえ 容易です
363:login:Penguin
08/07/14 08:20:36 Nv/tP5Or
>>361
cutとsort、uniqでキーのリストを作る。
grepとcutでキーごとの値を得る。
それをexpr
364:login:Penguin
08/07/14 16:52:54 6AUtGr7x
>>361
awk 使えば~
365:login:Penguin
08/07/14 18:28:30 Mh/R7fAz
>>361
awk -F, '{dat[$1]+=$2}END{for(i in dat) print i","dat[i]}' hoge
366:login:Penguin
08/07/17 15:31:48 8xNJ++Yc
指定した変数の中に、ある文字列があれば~
という条件式、どのように書けばいいですか。
367:login:Penguin
08/07/17 15:59:24 RxW1jeOx
#!/bin/sh
hoge=$1
hogehoge=$2
if [ `echo $hoge | grep $hogehoge` ]; then
echo "$hogehoge exist in $hoge"
fi
exit 0
368:login:Penguin
08/07/17 16:09:53 RxW1jeOx
と思ったけど >>228 のほうがいいな
369:login:Penguin
08/07/17 20:02:22 8xNJ++Yc
>>367
ども
ですが、ひとつ質問です
たとえばhogeにunko is
hogehogeにu
とした場合、ちゃんと動かないですがこれはどう扱えばいいですか。
370:login:Penguin
08/07/17 20:35:02 IIv1XTjU
よろしくおねがいします
bkfile=$dest/$2.$timestamp.tar.gz
tar cpzf $bkfile $1 >/dev/null 2>&1
if [ $? != 0 -o ! -e $bkfile ];
ここのでの
if [ $? != 0 -o ! -e $bkfile ];
意味を教えて下さい、エロイヒト
371:login:Penguin
08/07/17 20:49:36 wB0Vu+2C
>>370
URLリンク(cyberam.dip.jp)
372:login:Penguin
08/07/17 21:05:28 6zoBsCIm
それも、変数に 'unko is' を入れられない糞スクリプトだね。
373:login:Penguin
08/07/17 21:10:39 IIv1XTjU
$? != 0 -o
は終了ステータス
! -e $bkfile
はファイルで無い場合
すなわち
終了ステータスがO以外、且つ、bkfileがファイルの場合
ということでok?
374:login:Penguin
08/07/17 21:14:48 ZrSZoUoY
>>372
unkoは入れるものじゃなくて出すものだからな
#/bin/sh
hoge=$1
hogehoge=$2
if [ "`echo $hoge | grep $hogehoge`" = "$hoge" ]; then
echo "$hogehoge exist in $hoge"
fi
375:login:Penguin
08/07/17 21:21:49 wB0Vu+2C
>>373
終了ステータスが0以外、もしくは、$bkfileファイルが存在しない場合
376:login:Penguin
08/07/17 21:27:09 IIv1XTjU
>>375thx
if [ $? != 0 -o ! -e $bkfile ];
[ $? != 0 ]且つ [-o ! -e $bkfile ]
-oの意味と
[ $? != 0 -o ! -e $bkfile ]; スクリプトの区切り方がわかんらんのですが・・・
面倒かけてスマソ
よろしくお願いします
377:login:Penguin
08/07/18 00:26:56 djfoTRoL
>>374
助かりましたどうもです。
378:login:Penguin
08/07/18 00:47:41 JinxhkI+
>>376
man test で -o を探せ。
379:login:Penguin
08/07/23 12:37:01 AKylUJRP
「あるディレクトリにAA.bbというファイルがなかったら
AA.ccというファイルを削除する」
これをどう書いたらいいか教えてください
380:login:Penguin
08/07/23 12:42:19 XuVewefN
[ ! -f AA.bb ]
rm AA.cc
381:login:Penguin
08/07/23 12:43:53 x1Crms/C
宿題は自分でやりなさい。
382:379
08/07/23 21:51:48 AKylUJRP
>>380
ありがとうございます!できました。
別件でもう一つ教えてください。
「m2eという拡張子のものをコンバート(m2t化)、成功したらm2eを削除する」
というスクリプトを書きました。
#!/bin/sh
for file in *.m2e
do
/usr/local/bin/b25 $file ${file%m2e}m2t
EXITCODE=$?
if [ 0! = $EXITCODE ]; then
rm -f $file
fi
done
m2eファイルは複数あるんですが、4行目でありったけのm2eを処理し終わらないと
5行目以降の処理に進まないようで、
m2eを削除することなくばんばんm2tができていきます。
これを、1ファイルごとの処理にするにはどこを変えたら良いでしょうか・・・?