シェルスクリプト総合 その24©5ch.net
■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。 転載ダメ©2ch.net
2014/11/11(火) 00:54:03.43□お約束
・特記なき場合はBourne Shell(/bin/sh)がデフォルトです。
bash/zsh/ksh/ashなどに依存する場合は明示しましょう。
Linuxユーザは/bin/shの正体がbashまたはdashなので特に注意。
FreeBSDユーザは/bin/shの正体がashなので注意。
v7 shに一番近くて、現役のshは、OpenSolaris由来のheirloom sh。
http://src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/cmd/sh/
http://heirloom.sourceforge.net/sh.html
・csh/tcshのシェルスクリプトは推奨されません。
(理由は「csh-whynot」でググれ)
・UNIXにはシェルスクリプトに便利な小さなコマンドがいろいろあります。
manや参考リンクを見ましょう。
aproposないしはman -kでそれらしい単語による簡単な検索もできます。
・シェルで使えるワイルドカード等は正規表現ではありません。
正規表現の話題はスレ違い(正規表現スレへ)
・シェルスクリプトのことをシェルってゆーな
□初心者へのアドバイス:
・適した道具を判断するのも頭の重要な使い方。シェルスクリプトよりも
awkまたはperlの方が適した処理にはそちらを使いましょう。
・知らないコマンドが出てきたらmanを引きましょう。
・思い通りに動かないときは、まずは sh -x でトレースしましょう。
□回答者への注意事項:
・シェルスクリプトでの処理方法を質問しているのに、よくわからずに
「そういうのはperl使いましょう」と回答するのはやめましょう。
安易にperlに逃げずにシェルスクリプトで処理するのが頭のいいやり方。
前スレ
シェルスクリプト総合 その23
http://peace.2ch.net/test/read.cgi/unix/1404204950/
0144名無しさん@お腹いっぱい。
2014/12/12(金) 14:02:50.73やさしきみなさん、コメントありがとうございます。
これからいじくってみて、あとで結果報告いたします。
0145名無しさん@お腹いっぱい。
2014/12/12(金) 14:35:13.48デバグ用の
echo $START
echo $END
の直後に、
START=`echo $START`
START=`echo $END`
を追加して実行したところ、な、な、なんと!
思い通りの結果が得られました。この一週間悩んだのが
たった2行の追加でクリアされました。なんかポカーン状態
ですが。。。
画面上では空白が入ってないように見えただけかもしれま
せん。>>137 さん助かりました。ありがとうございます。
>>139 さんの書かれたprintf文、参考になりました。まずこ
れを試してみるべきでしたね。
0146名無しさん@お腹いっぱい。 転載ダメ©2ch.net
2014/12/12(金) 14:52:02.24^Mのやつ
0147名無しさん@お腹いっぱい。
2014/12/12(金) 15:06:40.30これのことだったのか、がてんいきました。
0148名無しさん@お腹いっぱい。
2014/12/12(金) 15:38:25.84START=`echo $START`
やっても^Mは取れないから、違うと思うぞ
0149名無しさん@お腹いっぱい。
2014/12/12(金) 18:17:01.24あいだに要素を追加したりとか
0150名無しさん@お腹いっぱい。
2014/12/12(金) 19:08:12.460151名無しさん@お腹いっぱい。
2014/12/12(金) 19:58:42.72やればできると思うが、結構面倒だしな
>>150
テキスト要素とかタグ要素とか
0152名無しさん@お腹いっぱい。
2014/12/12(金) 20:44:30.25xslt使えよ
0153名無しさん@お腹いっぱい。
2014/12/13(土) 00:48:34.76「のようなこと」ってあるから別の何かかと思った
使ったことは無いんだけど、XMLgawkが便利そう
0154名無しさん@お腹いっぱい。
2014/12/13(土) 03:47:01.580155名無しさん@お腹いっぱい。
2014/12/15(月) 19:52:22.36知らなかった。。。ash系なのか、ダッシュ島系なのか
0156名無しさん@お腹いっぱい。
2014/12/15(月) 20:11:02.180157グールドの著作を読むなら原書で
2014/12/16(火) 15:34:56.67#!/bin/csh -f
### Compact wise program that extracts user's first name only from result of "finger" command on UNIX without any Admin rights ###
set who = `finger -m $user`
echo -n ' Hi '"$who[7]" echo '\!' (= Hi YOURNAME!)
# First name comes at 7th place divided by spaces
当時の基準で採点してみてください。当時はこういうユーザフレンドリなプログラム見かけなかったんだけど。環境が違えばあったのかな?
0158名無しさん@お腹いっぱい。
2014/12/16(火) 17:02:19.691993年ってもうSVR4とかある時代だからそんなに古くないし、スクリプト内容も見所がない。
何を採点して欲しいやら。
強いて言うと、
cshスクリプト - 大減点
echoコマンドを2回に分ける必要ない - 減点
echoコマンドのところ改行のコピペミス?
fingerコマンドの出力って環境によってたぶん違うよ。
ちなみにこちらの環境では finger の 4番目の位置にファーストネームが入る。
#!/bin/sh
set `finger -m $USER`
echo ' Hi '"$4"'!'
0159グールドの著作を読むなら原書で
2014/12/16(火) 17:23:03.61echoコマンドはこういう遣り方じゃないと勝手に改行が入って苦労しました。
!も特殊文字扱いだったということでしょう。
それはさておきいちいちwhoとか名前付けてsetしなくてよいということですね。
こういうプログラムって当時からやってました?
sfcって遅れたキャンパスだったので、他大学の工学部などでは常識でも
あのキャンパスでは非常識ということも多々あるかと思います。
とにかくHi [first name]っていうプログラムを動かしてたのは学内で自分だけでした。
プログラムの全体はLaTeXをエクステンション除いたファイル名だけ打ち込めば
任意のプリンタから自動印刷できるという内容なんですがね。
0160名無しさん@お腹いっぱい。
2014/12/16(火) 17:28:04.570161グールドの著作を読むなら原書で
2014/12/16(火) 17:38:54.20基本的な構造はAmazon.comなどで金になってる商売だから。
0162名無しさん@お腹いっぱい。
2014/12/16(火) 17:51:39.82どこにでも普通に転がってるスクリプトだし、なんの変哲もないヘボスクリプトの何を評価しろとw
0163グールドの著作を読むなら原書で
2014/12/16(火) 17:54:06.780164名無しさん@お腹いっぱい。
2014/12/16(火) 17:54:28.410165グールドの著作を読むなら原書で
2014/12/16(火) 17:58:23.520166名無しさん@お腹いっぱい。
2014/12/16(火) 18:23:54.80/etc/passwdは一般ユーザーでももともと読めるし、(たとえshadowでもパスワード部分以外は)
NIS使ってるならypcat passwdは一般ユーザーでもできるし。
何の新規性もない。
0167グールドの著作を読むなら原書で
2014/12/16(火) 18:38:28.60そうではなくて、大したことの無いアイデアが金になることがある、ということを強調している。
Amazon.com等々が誰かに金を払っているのは事実の筈だし。無論アドミン権限の中のプログラム
であってもデータから抜き出す作業は同じ。で、Amazonとかできた当初はHi某とか言ってこなかった
筈なので、そこら辺の経緯を知りたいわけ。日本語では英語名で抜き出すのは日本語名で抜き出す
よりは厄介な筈。他に方法いくらでもあるから。
0168名無しさん@お腹いっぱい。
2014/12/16(火) 18:43:25.430169名無しさん@お腹いっぱい。
2014/12/16(火) 20:12:06.60ちなみにBBSにおいてユーザーの識別子として一方向ハッシュを表示する手法を、提唱したのは俺だ。
0170名無しさん@お腹いっぱい。
2014/12/16(火) 21:46:14.47そこまで知りたいなら調べて報告してくれ
おしえてクンじゃなければね
0171名無しさん@お腹いっぱい。
2014/12/17(水) 00:10:11.34> Amazon.com等々が誰かに金を払っているのは事実の筈だし。
まず、このソースを出してくれ
0172名無しさん@お腹いっぱい。
2014/12/19(金) 14:14:12.27ってのがあったんだ。
知らなかった。。。ash系なのか、ダッシュ島系なのか
0173名無しさん@お腹いっぱい。
2014/12/23(火) 07:08:11.72しっかりしろ
0174名無しさん@お腹いっぱい。
2014/12/25(木) 17:52:08.23学生さんは冬休みに、買ってもらった
Mac, iPhone, android でシェルスクリプトを書いて遊ぼう!
0175名無しさん@お腹いっぱい。
2014/12/25(木) 18:54:27.87学生なら自分で買うわ。
生徒や児童なら買ってもらうかも知れんが。
0176あ
2014/12/25(木) 19:32:27.25/:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::://ヽ:::::::::::::::|
l:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::// ヽ::::::::::::::l
l:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::/:::「'ヽ:::::::::::// ヽ:::::::::::|
|::::::::::::::::::::::::::::::::::::::::::::::::::::::::::ノl:::ノ l:::::::/ ヽ::::::::|
ノ:::::::::::::::::::::::::::::::::::::::::::::::::::::/ ゙゙ ノ:::/ ,,;;;;;;,, ,,,,ヽ:::::l
):::::::::::::::::::::::::::::::::::::::::::::::/ ノ/ __,'''i: ('''__):::l
)::::::::::::::::::::::::::::::::::::::::::::::::::/  ̄ ̄ン:. :「 ̄`ヾ
1:::::::::::::::::::::::「 `┤l:::::::::::::::::l  ̄ , ヽ ̄ l
`l:::::::::::::::::::::ヽ :l li:::::::::::::/ ヽ /´ `l |
ヽ::::::::::::::::::::::\_」 lヽ::::/ .l !:-●,__ ノ /
ノ:::::::::::::::::::::::::::ノ | l `゙゙ i ,,;;;;;;;;;;;;;;;;;;;;, /ヽ
,/ ヽ::::::::::::::::::::::( l l::::::::.. /.:''/´ ̄_ソ / `ヽ
ヽ:::::::::::::::ヽ | l:::::::::::... /::// ̄ ̄_ソ / \ ヴッ!!
ヽ:::::::\| l::::::::::::::::... / :::.ゝ` ̄ ̄/ / ヽ
ヽ:::l l:::::::::::::::::::..  ̄ ̄;;'' / ヽ
l l;;;;;;:::::::::::::::.....;;;;............;;;;;;''ノ l
l l '''''''''''''''''''''''''''''''''''''' ̄l | |
http://www.youtube.com/watch?v=z2qK2lhk9O0
0177名無しさん@お腹いっぱい。
2014/12/26(金) 09:25:20.89cronでスクリプト最速で回すとすると
* * * * * /home/user/hoge.sh
だけど、これ以上の頻度というか速度で実行できないのかな。
無限ループ覚悟で、hoge.shの最後に自分自身をコールするとか。
0178名無しさん@お腹いっぱい。
2014/12/26(金) 09:36:37.850179名無しさん@お腹いっぱい。
2014/12/26(金) 09:36:40.46何かの待ち受けイベントチェックか?
普通にsleep 1とかしながらループすればいいじゃん。cron必要なし。
自分自身をコールするするのは無駄だからwhile :; do hoge; sleep 1; done で無限ループな。
0180名無しさん@お腹いっぱい。
2014/12/26(金) 09:55:10.700181名無しさん@お腹いっぱい。
2014/12/26(金) 10:01:04.07そうです、自宅鯖で、smtpからweb、ssh、イベント監視まで
全部やらせてるマシン。あんまとっぴなことすると、落ちそう
なので。sleep入れれば、変な挙動はなくなりそうですね。
感謝!
0182名無しさん@お腹いっぱい。
2014/12/26(金) 12:23:03.31さっそくcronをやめて、do while ( `nantoka` ) done方式に変更。
前にcase文をつけてstart、stop、resartで起動、停止
できるようにした。sleep_secは10秒。これで様子みます。
しかし、良スレですね、ここは。いつも助けていただき感謝です。
0183名無しさん@お腹いっぱい。
2014/12/26(金) 12:27:53.31今浦島な私には、pgrep、pkillというコマンドが使える
のが素晴らしいと思いました。(最近知った)
なんか昔は、kill -9 `pidof nantoka`とかやってたのが
なつかしいというか。
0184名無しさん@お腹いっぱい。
2014/12/26(金) 13:13:19.560185名無しさん@お腹いっぱい。
2014/12/27(土) 13:16:10.86conky使ったりatに登録したりしてまわさなくても、
単純にそれで良かったんだなあ。
0186名無しさん@お腹いっぱい。
2014/12/31(水) 06:28:21.74学生さんは冬休みに、買ってもらった
Mac, iPhone, android でシェルスクリプトを書いて遊ぼう!
0187名無しさん@お腹いっぱい。
2014/12/31(水) 13:02:42.920188名無しさん@お腹いっぱい。
2014/12/31(水) 13:58:30.050189名無しさん@お腹いっぱい。
2014/12/31(水) 19:47:38.53ただ調べた結果だけなので自己責任で
* インターネットブラウザーのjavascript上で走るLinuxで
http://bellard.org/jslinux/
* もしくは、インターネットブラウザーでwebアプリ
http://ideone.com/
http://www.tutorialspoint.com/codingground.htm
* もしくは、sshで他マシンにアクセス
試した事はないけど、学習用のFree UNIX Shell Accountsとかもある
http://freeshell.org/
* Jailbreak
0190名無しさん@お腹いっぱい。
2015/01/01(木) 17:27:22.86でw3mを使って検索文字列でググる要にしているのを拡張したい
具体的には
コピーしてクリップボードの中に入ってる文字で検索しようと思う
それ自体は簡単なのだけど、問題は --clipboard や -c のオプションを付けた時に実行されるのか、(ggl -c)
それとももっとルーズに (ggl) と引数無しの状態で実行するか悩んでいる
オプションとかのガイドラインてある?
例えば -l はリスト(at -l など)で使うとか、多くのコマンドは
引数がない時は -h オプションと同じように簡単な説明がでるとかのメジャーなガイドライン
0191名無しさん@お腹いっぱい。
2015/01/01(木) 18:19:12.950192名無しさん@お腹いっぱい。
2015/01/01(木) 18:26:54.790193名無しさん@お腹いっぱい。
2015/01/01(木) 18:29:20.31ガイドラインというのはわからないが、こんな感じで使われてるね〜みたいのなら、
http://catb.org/~esr/writings/taoup/html/ch10s05.html
> The -a to -z of Command-Line Options
>
> Over time, frequently-used options in well-known Unix programs have established a loose sort of semantic standard
> for what various flags might be expected to mean. The following is a list of options and meanings that should prove
> usefully unsurprising to an experienced Unix user:
http://www.gnu.org/prep/standards/html_node/Option-Table.html
> 4.9 Table of Long Options
>
> Here is a table of long options used by GNU programs. It is surely incomplete, but we aim to list all the options that
> a new program might want to be compatible with. If you use names not already in the table, please send
> bug-standards@gnu.org a list of them, with their meanings, so we can update the table.
0194名無しさん@お腹いっぱい。
2015/01/01(木) 20:15:18.38サンキュー
URL先の情報にぴったりのオプション見つからないから
-h を少し書いて後々忘れた時に備えて、
デフォルトでクリップボードで検索、
引数あるときはそれで検索にする
0195名無しさん@お腹いっぱい。
2015/01/01(木) 22:28:20.83自分の名前がgglかgglcかで動作が変わるのも面白そう。
0196名無しさん@お腹いっぱい。
2015/01/01(木) 22:31:09.640197名無しさん@お腹いっぱい。
2015/01/03(土) 21:18:53.70*BSD, Linuxならlibcで持ってるものなんだな。
とあるソフトがGNUのgetopt.cを同梱しているので消してやりたいと思って
いたんだけど、configureでgetoptの存在チェックしてlibcの方を優先して
使わせるようにするのがいいのかな。
0198名無しさん@お腹いっぱい。
2015/01/08(木) 11:56:42.540199名無しさん@お腹いっぱい。
2015/01/08(木) 12:01:18.92なんで?
0200名無しさん@お腹いっぱい。
2015/01/08(木) 12:15:36.604. Conveying Verbatim Copies.
5. Conveying Modified Source Versions.
0201名無しさん@お腹いっぱい。
2015/01/08(木) 13:17:19.27詳しく
0202名無しさん@お腹いっぱい。
2015/01/08(木) 18:53:35.8122, 32, 33, 45,
12, 47, 78, 44, 32,
...
数字がカンマで区切って700個書いてあるファイルがあります。
一行に数字が何個あるか規則性はありません。
このファイルを読み込んで数字を100個ずつ出力して7枚のファイルを
作りたいと思っています。シェルスクリプトでうまくできますでしょうか。
出力されたファイルには数字が一列で入っているほうがいいです。
お願いします。
0203名無しさん@お腹いっぱい。
2015/01/08(木) 19:41:16.46awk -v RS='' -v FPAT='( *[0-9]+, *\n?){1,100}' \
'{
for(i=1;i<=NF;i++){
gsub(" *\n"," ",$i);
gsub(", *$","",$i);
print $i > i ".txt";
}
}' a.txt
上手く行けば 1.txt ... 7.txt というファイルができるはず
0204名無しさん@お腹いっぱい。
2015/01/08(木) 20:20:07.70awk -v RS=, '{print $0+0 > int(NR/100)+1 ".txt" }'
0205名無しさん@お腹いっぱい。
2015/01/08(木) 20:36:37.660206203
2015/01/08(木) 20:51:41.180207203
2015/01/08(木) 20:56:03.240208名無しさん@お腹いっぱい。
2015/01/08(木) 21:09:50.76見易さの為-r付けてます
#!/bin/sh
sed -re '
:loop;
$! {
N;
b loop;
}
s/,[ \n]+/, /g;
s/([0-9]+, ){100}/&\n/g;
' | {
i=1
while read line
do
echo "$line" > "$(( i++ )).txt"
done
}
0209名無しさん@お腹いっぱい。
2015/01/08(木) 21:43:46.83tr -d '\r\n' < file
0210名無しさん@お腹いっぱい。
2015/01/08(木) 21:52:48.42i=1
while [ $i -le 7 ]; do
(j=1; while [ $j -le 100 ]; do echo "$1"; shift; done) > $i.txt
0211209
2015/01/08(木) 21:57:31.95tr -d '\r\n' < file | tr ',' '\n' | split -l 100
0212名無しさん@お腹いっぱい。
2015/01/08(木) 21:58:20.67set -- `sed 's/,/ /g' input.txt`
i=1
while [ $i -le 7 ]; do
(j=1; while [ $j -le 100 ]; do echo "$1"; shift; j=$((j + 1)); done) > $i.txt
shift 100
i=$((i + 1))
done
0214名無しさん@お腹いっぱい。
2015/01/08(木) 23:07:34.580215名無しさん@お腹いっぱい。
2015/01/09(金) 00:45:24.74file=`cat "$1"`
for i in `seq 1 7`; do
for j in `seq 1 100`; do
echo -n ${file%%,*}, >>$i.txt
file=${file#*,}
done
done
0216名無しさん@お腹いっぱい。
2015/01/09(金) 01:53:20.06$ grep -Po '[0-9]+' data.txt | parallel --pipe -L 100 -n 1 -k 'cat - > {#}.txt'
0217名無しさん@お腹いっぱい。
2015/01/09(金) 01:59:25.49$ grep -o '[0-9]\+' data.txt | split -l 100
0219名無しさん@お腹いっぱい。
2015/01/14(水) 13:42:56.50{}が引っかかってしまったのだろうか? どうすればよいのだろうか?
while true
do read SEARCH
awk 'BEGIN{RF="---"}/${SEARCH}/' $save_to
done
0220名無しさん@お腹いっぱい。
2015/01/14(水) 13:55:03.850221名無しさん@お腹いっぱい。
2015/01/14(水) 14:41:45.54多少書き換えてみました
しかし、まだ動きません
clp.sh
do read SEARCH
export SEARCH
awk -f ~/sbin/h_Searher.awk $save_to
done
~/sbin/h_Searher.awk
BEGIN{RF="---"}/$SEARCH/
0222名無しさん@お腹いっぱい。
2015/01/14(水) 17:08:45.99たった1行のためにつまずくとは悔しい
do
perl ~/Perl_instance/clp.pl
done
~/Perl_instance/clp.pl
open FH, '<', '$save_toと同じファイル';
my @LOG = <FH>;
close FH;
my $sentence = join ' ', @LOG;
my @field = split /---/, $sentence;
# my $search = "Ano";
chomp(my $search = <STDIN>);
for my $lines (@field) {
if ( $lines =~ m/${search}/ ) {
print "---\n";
print "$lines\n";
}
}
0223名無しさん@お腹いっぱい。
2015/01/15(木) 10:05:06.27awk 'BEGIN{RF="---"}/'${SEARCH}'/' $save_to
0224名無しさん@お腹いっぱい。
2015/01/15(木) 12:37:55.02thanks!
0225名無しさん@お腹いっぱい。
2015/01/15(木) 13:19:56.100226名無しさん@お腹いっぱい。
2015/01/15(木) 18:30:18.23awk -v SEARCH="$SEARCH" 'BEGIN{RF="---"}/SEARCH/' $save_to
0227名無しさん@お腹いっぱい。
2015/01/20(火) 01:40:59.45なんと月刊で20号以上出ているということにも驚いた。
シェルスクリプトマガジン vol.21
http://www.amazon.co.jp/dp/4904807154/
https://www.usp-lab.com/pub.magazine.html
0228名無しさん@お腹いっぱい。
2015/01/20(火) 05:22:18.170229名無しさん@お腹いっぱい。
2015/01/21(水) 01:45:14.760230名無しさん@お腹いっぱい。
2015/01/22(木) 16:29:19.37数日悩んだ結果。。。原因はLANGだった
0231名無しさん@お腹いっぱい。
2015/01/22(木) 16:32:53.580232名無しさん@お腹いっぱい。
2015/01/22(木) 16:48:29.41まれによくある。
スクリプトの先頭付近でLANGを設定しちゃうことも多いんだけど、Unix的でクールな
ポータビリティのある手法を紹介してくれる偉い人が出てくるのを正座して待ちたい。
0233名無しさん@お腹いっぱい。
2015/01/22(木) 17:14:56.120234名無しさん@お腹いっぱい。
2015/01/23(金) 06:42:51.72共通したものは crontab 先頭で、タスク毎のは env NAME=VALUE COMMAND
と答えるか、もうまるっきり答えないと予想した
0235名無しさん@お腹いっぱい。
2015/01/23(金) 10:00:16.400236名無しさん@お腹いっぱい。
2015/01/23(金) 16:52:05.70自演っぽくて、コメントしづらい輪
0237名無しさん@お腹いっぱい。
2015/01/23(金) 17:30:03.530238名無しさん@お腹いっぱい。
2015/01/24(土) 10:11:24.87的な書き方ってどこまで有効なのかな?
bashだけ?
0239名無しさん@お腹いっぱい。
2015/01/24(土) 10:23:49.81bourne shell でも使える
0240名無しさん@お腹いっぱい。
2015/01/24(土) 15:26:45.880241名無しさん@お腹いっぱい。
2015/01/24(土) 15:41:53.700242240
2015/01/25(日) 04:39:03.74しっくりくる表記法がないんだけど
0243名無しさん@お腹いっぱい。
2015/01/25(日) 05:18:01.830244名無しさん@お腹いっぱい。
2015/01/25(日) 11:18:23.60使わないので規則などない
■ このスレッドは過去ログ倉庫に格納されています