シェルスクリプト総合 ..
[2ch|▼Menu]
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 {
print
}
}

まぁ暇だし,自分の勉強にもなるしな

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
テンプレくらい読め。


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

5499日前に更新/243 KB
担当:undef