シェルスクリプト総合 その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/
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使わないので規則などない
0245名無しさん@お腹いっぱい。
2015/01/25(日) 11:45:02.72同意
0246名無しさん@お腹いっぱい。
2015/01/25(日) 12:36:31.550247名無しさん@お腹いっぱい。
2015/01/25(日) 13:47:36.00じゃあ代わりにどうすればよいのだ?
まさかコピペ?
0248名無しさん@お腹いっぱい。
2015/01/25(日) 17:38:43.450249名無しさん@お腹いっぱい。
2015/01/25(日) 19:40:14.84> じゃあ代わりにどうすればよいのだ?
> ポインタとか言い出すと見た
いかにも、めんどくさそう
0250名無しさん@お腹いっぱい。
2015/01/25(日) 19:46:57.100251名無しさん@お腹いっぱい。
2015/01/25(日) 21:21:36.60xargsコマンドが好き。無理だと思ってた処理がワンライナーになる
いっそ、powershellみたいにjsonパイプラインみたいなのがあればいいのにって思う
0252名無しさん@お腹いっぱい。
2015/01/25(日) 22:41:49.00他どんな場面で使うっけ
0253名無しさん@お腹いっぱい。
2015/01/25(日) 23:37:38.840254名無しさん@お腹いっぱい。
2015/01/26(月) 12:06:00.33*.*の3行が、headへの標準入力じゃなくて、引数として与えられるのか。
おもしろいなあ。
0255名無しさん@お腹いっぱい。
2015/01/26(月) 20:35:10.75ループになる
xargs loop で検索したら結構見つかるので
珍しくは無いんだろうが、まあ、一応
<<EOF xargs -I i sh -c 'seq 3 | xargs -I j echo i j'
foo bar
baz qux quux
corge
grault
EOF
0256名無しさん@お腹いっぱい。
2015/01/27(火) 02:26:05.37例えば find ... | xargs -P 12 -n 16 gzip とすると12プロセスがファイルの圧縮を行う
0257名無しさん@お腹いっぱい。
2015/01/27(火) 03:09:32.080258名無しさん@お腹いっぱい。
2015/01/27(火) 06:47:01.920259名無しさん@お腹いっぱい。
2015/01/27(火) 07:02:05.920260名無しさん@お腹いっぱい。
2015/01/27(火) 07:38:50.390261名無しさん@お腹いっぱい。
2015/01/27(火) 08:17:49.810262名無しさん@お腹いっぱい。
2015/01/27(火) 08:20:05.07API だと思い付かない
ディスクを直接バイナリ編集すれば可能かも
0263名無しさん@お腹いっぱい。
2015/01/27(火) 08:25:13.28実装によってはないのよ
0264名無しさん@お腹いっぱい。
2015/01/27(火) 08:28:26.160265名無しさん@お腹いっぱい。
2015/01/27(火) 12:18:24.66移植すりゃいいじゃん
0266名無しさん@お腹いっぱい。
2015/01/27(火) 12:56:34.51-exec {} +
で用が足りる
0267名無しさん@お腹いっぱい。
2015/01/27(火) 13:01:19.27カーネル内でもファイル名は0終端で扱ってるから無理だね
実際のサイズと異なる事でカーネルクラッシュなどまずいことが発生する可能性は
あるけど、それは普通にカーネル内バグ
0268名無しさん@お腹いっぱい。
2015/01/27(火) 13:29:38.19そういう話じゃないよ
0269名無しさん@お腹いっぱい。
2015/01/27(火) 13:41:29.10半分冗談だよ、いちいち気にしてたら禿げるぞ
0270名無しさん@お腹いっぱい。
2015/01/27(火) 13:43:51.02冗談だとしても面白くないよ
0271名無しさん@お腹いっぱい。
2015/01/27(火) 15:15:56.23-exec \{\} +
とエスケープなりクォートで囲むなりするのを忘れる
0272名無しさん@お腹いっぱい。
2015/01/27(火) 16:27:07.47■ このスレッドは過去ログ倉庫に格納されています