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ファイルごとの処理にするにはどこを変えたら良いでしょうか・・・?
383:login:Penguin
08/07/23 21:59:02 XuVewefN
>>382
>381
in `ls *.m2e`
384:login:Penguin
08/07/23 22:18:42 jePbQOfG
分からない時は変数を出力してみるといいよ!
385:login:Penguin
08/07/23 22:22:18 Ec8ZyKSx
終了判定の if文がおかしいから、rm行が実行されないのでは?
sh -x script
してデバッグしてちょ。
386:379
08/07/23 23:27:36 AKylUJRP
皆さんほんとありがとうございます。
sh -x すら知りませんでした。超便利ですねこれ…。
で、b25コマンドが成否に関わらず終了コード0を返していました。
成功したら1を返すだろうという先入観が敗因でした。
今日教わったことを踏まえ以下のとおりにしたら成功しました。
#!/bin/sh
for file in `ls *.m2e`
do
/usr/local/bin/b25 $file ${file%m2e}m2t
if [ -f ${file%m2e}m2t ]; then
echo complete
rm -f $file
else
echo fail
fi
done
初めて書くシェルスクリプトですが、おかげさまで思ったとおりできました。
どうもありがとうございました。
387:login:Penguin
08/07/23 23:30:38 bXJC8PaP
>>383
ls する必要あるか?
388:login:Penguin
08/07/23 23:31:06 HicxYVC5
>>386
蛇足かもしれんが、成功したときの終了コードは0だ。
389:login:Penguin
08/07/24 01:05:36 cIOzBtbq
空白を含んだファイル名の処理がおかしくなるので,ls しない方がベター。
元の
> for file in *.m2e
のままでよい。
>>382
= の否定は != ね。
! と = の間に空白を入れてはいけないよ。
390:login:Penguin
08/07/24 08:32:37 BJInmIaX
>>387-389
遅いよおまいら。
遅刻の罰として、5分毎にこのスレの新規書き込みをチェックするスクリプトを上げること。
bashの内部コマンド以外は使ってはいけません。
391:login:Penguin
08/07/24 10:40:03 jtU4rAt4
curlも使っちゃいかんのかい・・・
392:login:Penguin
08/07/24 20:20:13 Hhban5lk
あきまへん。bashのソケットで。
393:login:Penguin
08/07/24 22:02:07 pIyY20xI
wgetは認められるはず。
なんせ左手だけで入力できるんだぜ?
394:login:Penguin
08/07/24 23:00:05 yNUWiOQr
>>392
詳しくは知らないけど/dev/tcp/host/portじゃダメかな?
395:login:Penguin
08/07/25 08:02:37 5wHuLUjg
ええのではないでしょうか
bashでcurlを代替するには、それで双方向ソケットを実現するしか多分ないだろうから。
396:login:Penguin
08/07/30 16:48:07 JUVwIDuC
あるファイルの、ファイル名を先頭から10文字分取得してOSの変数に入れたいのですが
拡張子もない日時そのままのファイル名(080730151530 とか)なので
for文すら書けずにいます。
どう書いたらいいですかと聞ける段階にもないのですが、
こういったファイル名の扱い、前方一致のさせ方について
参考になりそうなサイトなどないでしょうか?
397:login:Penguin
08/07/30 17:37:14 8Rj3UHKM
まずは正規表現について学ばれるといいと思います
398:login:Penguin
08/07/30 17:47:11 sE7Hyt0D
#!/bin/sh
tmp="9999444422228888"
for file in ${tmp}; do
#先頭から8文字目まで切り出し
echo ${file} | cut -c 1-8;
done
プロトタイプつくって、色々試してみるといいかもよ
あとは、tmpをどのように持っていくか
find使いたかったら
tmp=`find -tpe f`
とかだろうし
色々やってるうちに、スペースが入ったファイル名とかで疑問もでてくるだろうし
399:login:Penguin
08/07/31 02:05:26 kxeNsmhd
目的のファイルがあるディレクトリで(そのディレクトリに cd して)
スクリプトを実行するという前提で、、、
for FILE in *
で、そのディレクトリにある隠しファイル以外のファイルの名前が順に変数 FILE に入る。
拡張子のあるなしは関係ない。
もし、日時そのままのファイル名(数字12文字のみからなる?)以外のファイルが
ディレクトリ内に存在する場合には、以下のような if 文で弾く。
if echo $FILE | grep '^[0-9]\{12\}$' > /dev/null
あとは>>398のを組み合わせて全体はこんな感じ。
#!/bin/sh
for FILE in *
do
if echo $FILE | grep '^[0-9]\{12\}$' > /dev/null
then
echo $FILE | cut -c 1-10
fi
done
400:login:Penguin
08/07/31 10:18:05 JpgVGgaY
そもそも CUI 環境の UNIX, Linux に拡張子という概念は無いと思われます。
401:login:Penguin
08/07/31 14:53:26 a31/vqCD
概念という言葉が適切かどうか。
402:login:Penguin
08/07/31 15:54:04 SAvKwoDD
kakutyou.c
403:login:Penguin
08/07/31 16:54:35 CDeZt19d
>CUI 環境の UNIX, Linux に拡張子
CUIと拡張子に何の関連があるんだ。
MS-DOS時代には拡張子が無かったという主張なのか。
404:login:Penguin
08/07/31 17:22:53 JpgVGgaY
>>403
文字通りの意味だよ
KDEなど使用したX環境では拡張子を判断してプログラム動作を変えるものが一部にあるからね
もう一度言うが、「文字通りの意味」だ
そんなに解らん日本語だったかね
405:login:Penguin
08/07/31 17:24:39 FFTlQwAQ
mailcapはあるけど
406:login:Penguin
08/07/31 17:26:02 +AWBOmCl
拡張子ではなく suffix だ、とかそういう話じゃなかったのか。
407:login:Penguin
08/07/31 17:29:51 6oedF87g
>>404
胸張って屁理屈言ってどうするかね。
大人気なく反例を提示するなら、CUIで動く代表的なプログラムであるgccは拡張子を見て呼ぶコンパイラを変えたりするが、見解を求む。
408:login:Penguin
08/07/31 17:35:59 JpgVGgaY
>>407
めんどい
409:login:Penguin
08/07/31 18:09:02 RztDzhJY
>>407
座布団あげる。
柔軟だというだけだよね。
410:login:Penguin
08/07/31 18:18:49 6oedF87g
gzipも拡張子見るなw
411:login:Penguin
08/07/31 18:21:00 9ySiTva1
make !! , make !!
412:login:Penguin
08/07/31 20:26:30 54icAPXL
ID:JpgVGgaY 恥ずかしいなw
全部言い返されてやんの
413:login:Penguin
08/07/31 22:03:49 zM7TOaQk
>>406
拡張子でなく接尾辞だという点には誰も異論だ無いんじゃないか。
>KDEなど使用したX環境では拡張子を判断してプログラム動作を変えるものが一部にあるからね
などと強弁してるのを皆に笑われているだけで。
414:login:Penguin
08/07/31 23:00:46 XBLFfbqE
hoge.gz.20080101 を gunzip しようとしたら怒られましたよ
415:login:Penguin
08/07/31 23:27:25 9ySiTva1
>>413
gcc も gunzip も manページの表現は接尾子でもsuffixでもなく、「拡張子」ですな。
416:login:Penguin
08/07/31 23:30:11 F09gGQyB
もう いじめはやめましょうw
417:login:Penguin
08/07/31 23:43:03 W0fu7NON
>>415
そら、まあ
C:\>gzip.exe -dc < hoge.gz > hoge
なんてときの .gz は拡張子だもの。
というか、実のところ「拡張子」という呼称が既に人口に膾炙してるから、そう表現してるんじゃないかな。
たぶん、>>406の言ってることはもっと厳格で、FAT(だっけ?)には8文字のファイル名と3文字の拡張子を入れる覧があるが、inodeにはファイル名覧しか無いといったことだと思うよ。
あっと、俺は ID:JpgVGgaY ではないよ。話をたどれば分かると思うが。
418:login:Penguin
08/07/31 23:50:25 9ySiTva1
>>417
>>417≠ ID:JpgVGgaYは了解しています。直接レスつけるのは忍びなかったので。
あとsuffixつーとドメインネーム則なんかのジャンルも含む気がして
ちょっと拡張子とはニュアンスが違うと思いました。
419:login:Penguin
08/08/01 00:09:05 Z+D1IjNX
>>415
suffix って表現もあるじゃん。
extension と混在してる。
420:login:Penguin
08/08/01 07:18:11 K/umwhS+
まぁまぁ、404のオモシロ発言でもたどって和んで。
>>400
そもそも CUI 環境の UNIX, Linux に拡張子という概念は無いと思われます。
>>403
>CUI 環境の UNIX, Linux に拡張子
CUIと拡張子に何の関連があるんだ。
MS-DOS時代には拡張子が無かったという主張なのか。
>>404
>>403
文字通りの意味だよ
KDEなど使用したX環境では拡張子を判断してプログラム動作を変えるものが一部にあるからね
421:login:Penguin
08/08/01 09:33:44 9ncfYug9
人口に膾炙←読めない
422:login:Penguin
08/08/03 20:26:52 z2v8StjQ
ループか?
ループスレなのか?うひょーーーーーーーーーー
423:login:Penguin
08/08/05 09:41:49 GjmRcMaB
拡張子はファイル名の接尾辞として使われるっていう、ただそれだけの話。
424:login:Penguin
08/08/05 11:31:30 P4vieYD2
*.bak と *~ で見た目は違うが用途はほぼ同じなんだけど
*.1 *.2 … はlogとmanで意味合いが変わるもんな
425:login:Penguin
08/08/10 15:12:11 3WlJmUth
bash の配列の話です。
添え字を付けて定義すれば要素がかけた配列を作れますよね?
x=(a b c)
x[4]=e
x[6]=g
こんな風に定義すると要素の数 ${#x[@]} は 5 を返しますが
実際には x[6] まで定義されているわけです。
こういう歯抜けの配列から添え字と要素をセットで全て取り出す方法
何かありませんか?
for i in ${x[@]} ; do echo $i ...
だと添え字がわかりません。
for (( i=0 ; i < ${#x[@]} ; i++ )) ; do echo ${x[i]} ...
だとかけた部分に対応できません。
bash の配列処理が貧弱なのは知っていますが
何か知恵がありそうな気もするんです。
426:login:Penguin
08/08/10 16:39:06 YtTqhIm8
>こんな風に定義すると要素の数 ${#x[@]} は 5 を返しますが
うちでは 6 になる。
$ set
x=(a b c e '' g)
なので、
x[5]が空だからきっと代入されなかったんだろう
という判断しか思い付かない。
427:426
08/08/10 19:20:40 OrrhkboJ
読み返すと我ながらバカな日本語でイヤになった。式で書く
for ((i=1; i <= ${#x[@]}; i++))
do
if [ "${x[i]}" != "" ]; then echo "$i ${x[i]}"
という判断文を付け加えることぐらいしか思い付かない。
428:login:Penguin
08/08/10 21:22:42 3WlJmUth
>>426
>> こんな風に定義すると要素の数 ${#x[@]} は 5 を返しますが
> うちでは 6 になる。
あれ?自分の環境 (bash 2.05b @ debian) では 5 なんだけどな。
そちらの環境を教えてくれますか?
429:login:Penguin
08/08/10 21:51:14 uOwkyJaM
あ、ごめん。zsh でやっていた。
bash で set すると、
$ set
x=([0]="a" [1]="b" [2]="c" [4]="e" [6]="g")
で、添え字と要素がセットでズバり出るじゃないですか。
430:login:Penguin
08/08/10 23:04:19 3WlJmUth
>>429
ああ、そうでした。確かに表示されますね。
[] とか = とか変な文字が要素に入らないという前提なら
そこから添え字のみを取り出せればいけそうですね。
431:login:Penguin
08/08/14 21:23:54 6SkumsSk
基本的なことで、すいまん
bashで、たとえば
# login : root
# passwd : foo
なんて場合、シェルからの問い合わせに対して、スクリプト側で
rootやfooを自動的に入力したいのですが、どのように書いたらいいのでしょうか?
432:login:Penguin
08/08/14 21:24:45 6SkumsSk
BATU 基本的なことで、すいまん
MARU 基本的なことで、すいません
433:login:Penguin
08/08/14 21:44:42 Q5H0d7m9
>>431
expect
434:login:Penguin
08/08/14 21:52:17 6SkumsSk
>>433
イクスペクトですか、ありがとう
435:login:Penguin
08/08/17 13:04:54 id1iDBNz
>>433
bashで
436:login:Penguin
08/08/18 22:17:27 P4gPyZDt
グループ sumo が存在するか? を調べる方法が思いつかない。
ユーザ hakuho の存在を調べるのは、
id hakuho
などとやろうと思うが、グループの方をhelp!!
grep /etc/group はやりたくない。
437:login:Penguin
08/08/18 23:25:02 Wi4hQzW9
>>436
くだらねえ質問はここに書き込め! Part166
スレリンク(linux板)
438:login:Penguin
08/08/18 23:35:20 tdXNnNro
LANG=C chgrp hakuho / 2>&1 | grep -q '^chgro: invalid group' || echo ok
439:login:Penguin
08/08/19 08:01:52 GbBy+Szp
chgrpされたら困るやん。
440:login:Penguin
08/08/19 08:17:46 yV2lM3C5
root じゃなきゃ大丈夫でしょ。
441:login:Penguin
08/08/19 11:14:23 i/uDMj66
んな罠みたいなスクリプトはちょっと。
442:login:Penguin
08/08/19 11:19:47 yV2lM3C5
他に思いつかないんだよな。
素直に /etc/group を grep するのが一番だと思う。
443:login:Penguin
08/08/19 11:30:56 Z4idUwk9
grep /etc/group はやりたくないそうだから仕方ない
444:login:Penguin
08/08/19 11:31:37 yV2lM3C5
NIS とか LDAP とか使ってるなら
perl あたりで getgrnam とか。
445:login:Penguin
08/08/19 22:33:06 /3aOZv4D
NISもLDAPも使ってないが、これは良いかもしれない。ありがとう。
$ perl -e '($n, $p, $g, $m) = getgrnam 'lp'; printf "%s\n", $g'
7
446:login:Penguin
08/08/21 00:34:13 uS1Qpazh
bash使ってるのですが
lsすると何も返ってこないです
set +mするとかえってきます
何が悪いのかさっぱりわかりません
447:login:Penguin
08/08/21 02:06:11 hLnB3a+h
>>446
type ls するとどう出る?
448:login:Penguin
08/08/25 22:22:20 q8+dK05f
echo $"Starting XXXX daemon..."
という一文の「$」の意味を解しかねてるんだども…
449:login:Penguin
08/08/25 22:30:19 TaEIkWlk
% echo $"Starting XXXX daemon..."
$Starting XXXX daemon...
% echo "$Starting XXXX daemon..."
XXXX daemon...
%
450:login:Penguin
08/08/25 22:34:16 i+OsnagO
>>448
ja.po とか作るときに
$" " で囲んだところが
翻訳の対象として切り出される。
メッセージ カタログ化
とかでググれ。
451:login:Penguin
08/08/25 23:32:42 w1+LX6rA
これすか…
bash(1)
> --dump-po-strings
> Equivalent to -D, but the output is in the GNU gettext po (portable object) file format.
試しに /usr/share/locale/ja/LC_MESSAGES/XXXX.mo を作ってみたが、日本語にならない。
あうあう。。。
「$」はぶった切ることにします。
452:login:Penguin
08/08/25 23:49:02 i+OsnagO
>>451
急ぎじゃなかったら少し頑張ってみるといいかも。
前作ったもの見たらこんな感じで作業してたらしい。
$ xgettext -o hoge.po hoge.sh
$ gtranslator hoge.po
$ msgfmt -o hoge.mo hoge.po
hoge.sh の中にはこんなのが書いてあった。-->
if [ -z "$TEXTDOMAIN" ] ; then
TEXTDOMAIN="hoge"
TEXTDOMAINDIR="/usr/share/locale"
fi
<--
TEXTDOMAIN="hoge.sh" じゃなくて
TEXTDOMAIN="hoge" にしてあるのは
hoge.sh をインストール時に /usr/bin/hoge に改名(hoge.sh から hoge に)するため。
453:login:Penguin
08/08/26 23:01:28 JsSv3XDz
gtranslator てのが無かったので、
$ sh --dump-po-strings XXXX > ~/XXXX.po
とし、msgfmt 以降同様にすると日本語になりました。
どうもありがとう。
454:login:Penguin
08/08/31 15:42:27 aoYJcwTK
?$
455:login:Penguin
08/09/01 09:58:54 LEXE4Xrt
C言語でいう
for (float a=0.1;a<1.5;a+=0.1){
}
の様なループはどのように書けばよいのでしょうか?
456:login:Penguin
08/09/01 10:38:54 zLmvj5ED
>>455
小数とか使いたいなら
もっとまともな言語使った方がいいよ。
457:login:Penguin
08/09/01 12:17:57 qt+GSvTX
for i in `seq 1 20`
do
i=`echo "scale=1; $i / 10" | bc`
echo $i
done
458:login:Penguin
08/09/01 17:56:42 gt+0kg/y
やっぱループ変数は整数だよな。
少数は気持ち悪い。
459:login:Penguin
08/09/01 23:52:23 yMJ8hMF5
$ cat aso
killall fukuda
460:login:Penguin
08/09/02 01:01:15 iTMiNYXN
>>458
気持ち悪いどころか、有害。
for(float a=0;a<=1.0;a+=0.1){printf("%g ",a);}
⇒ 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9
461:login:Penguin
08/09/02 02:16:22 NrY9TL/o
>>460
勉強になります。
使った事ないし、使う場合はテストするのでだいじょぶだけど。
でも絶対やらんよねw Cやってるやつは。
すれち
462:login:Penguin
08/09/02 04:38:59 dzMMfnry
bcで計算させたとき、0以下の小数は最初の0を抜いた.2のように表示されますが、
0.2の様な表示にはできませんか?
463:login:Penguin
08/09/02 09:52:47 bHR8SDTE
0 ≧ .2 なのか。
464:login:Penguin
08/09/03 00:04:05 aqC4nv+U
>>463
浮動小数点の比較を工夫なく行う奴はアホ。
465:login:Penguin
08/09/05 21:49:46 eUOT1mPo
sed を | で つなぐんじゃだめ?
466:login:Penguin
08/09/06 00:00:19 x4tIq2Vd
#!/bin/sh
echo '%A4%A2' | tr % = | nkf -emQ
「あ」と表示させたいのですが、「、」」と表示されてしまいます。
正しい書き方を教えてください。
467:login:Penguin
08/09/06 05:03:55 /FPWBzOe
うち(EUC環境)では「あ」と表示される。
468:login:Penguin
08/09/06 08:59:05 6Sr65r/p
>>466
テキストに落とすとEUCで「あ」に見える
469:login:Penguin
08/09/06 23:40:32 O24UR7Eo
>>466 の環境がUTF-8なら
#!/bin/sh
echo '%A4%A2' | tr % = | nkf -wmQ
470:login:Penguin
08/09/08 22:09:56 tYV0ghqH
引数 output-file input-file1 input-file2 ...
を受け取ってinput-fileN に some-dir/ を付加したコマンド引数を他のプログラムの引数として与えたいのです。
つまり、
foo yaruo.out vip.txt vipper.txt vippest.txt
でfooを実行して、そのfoo内では
bar yaruo.out www/vip.txt www/vipper.txt www/vippest.txt
を実行するということがしたいのです。
こんなスクリプトを作成するには、fooをどのように記述すればいいのでしょうか。
よろしくお願いします。
471:login:Penguin
08/09/08 22:27:43 UFg0tXoN
もう宿題の季節なのか?一箇所直してから使ってくれ。
#!/bin/bash
org=www; ARG1=${1}; shift; echo bar ${ARG1} ${@/#/${org}/}
472:login:Penguin
08/09/08 22:50:15 4IH3dQd+
>>470
あのね、
宿題を出す先生は、このスレもチェックしてるからね、
>>471 のを出しても 0 点だからwww
ゆっくり 0 点にしてってね!
473:login:Penguin
08/09/08 22:54:09 tYV0ghqH
>>471
残念ながら宿題ではないのです~
ありがとうございました。
474:login:Penguin
08/09/08 23:03:49 QeMmaTeA
うちの大学の先生はプログラム板も見ていた
475:login:Penguin
08/09/08 23:09:05 /XLojU6V
先生も激務だな
476:login:Penguin
08/09/08 23:45:08 lCRZh05X
悪いな、おいらは数学板だけでなく、
日本語のあらゆる数学質問掲示板を巡回している。
必ず学生が質問をしやがるから。
レポートを返すときに、そのスレおよび掲示板のコピーを添付して、念のため確認をとる。
初めから正直に引用したと書いてあるものについては、改めて口頭で説明させている。
477:login:Penguin
08/09/09 08:43:21 7p63VvoV
院生にやらせそうな案件だな
478:login:Penguin
08/09/11 23:43:43 6JSrg1Nn
実際に教授がやってたら笑いものだな。
そこまで熱心にありがとうございます、と学生ながらに思うべきか。
ただ、ねぇ・・・
479:login:Penguin
08/09/12 01:07:51 Hfrl7+Fx
>>478
いや、日本だけってわけでなく海外でも今や引用元チェックとか行っているよ。
480:login:Penguin
08/09/12 18:08:43 9WCeRGBW
へー
481:login:Penguin
08/09/12 21:11:04 lKrrIxw4
3年前ほどにアメリカのテレビドラマで高校の先生がエッセイの宿題を返す場面を見た。
ある学生に返しながら、「素晴らしいエッセイだったわ。 essay.com(のような感じ)ね?
月曜までに自分で書いて来てね」
482:login:Penguin
08/09/13 02:57:01 +1Gk57wR
問題も自分で作ってね
483:login:Penguin
08/09/19 18:18:28 0H1973GE
>>479
手作業じゃないよね。日本語を解析できるツールはまだできてないよ。
484:login:Penguin
08/09/25 00:19:59 t0y6Jov+
fdisk /dev/sdb
n
p
1
w
↑こんな感じで、入力させていきたいのですが、
方法がわかりません。キーボード 入力 シェル スクリプト
あたりでぐぐると、キーボードからの入力を受け付ける、しか見つかりませんでした。
方法を教えてください。
485:login:Penguin
08/09/25 01:43:59 Khd+tIc7
>>484
expect
486:login:Penguin
08/09/25 09:57:28 fRZ/kmS9
>>484
sfdisk
487:login:Penguin
08/09/25 19:47:43 wpIij73K
>>484
>> EOF
488:login:Penguin
08/09/25 19:55:28 oa1dgrD9
( echo n; echo p; echo 1; echo w ) | fdisk /dev/sdb
入力が端末かどうかちゃんとチェックしてるようなモノだと動かないが、
fdisk はそんなことしてなかったはずなので、ふつーに標準入力からつっこめばよし。
489:login:Penguin
08/09/27 00:45:11 9WMmgXah
ゴミ箱スクリプト使ってるひといる?
490:login:Penguin
08/09/27 01:12:09 s/QKRkEt
あい。
491:login:Penguin
08/09/28 03:42:58 yjLf4XT+
ゴミ箱に入ってるファイルを復元させるやつなら使ってる
492:login:Penguin
08/09/29 04:13:28 nMbRNXLX
ティルダ(~)展開について質問。
#!/bin/bash
ls ~/
directory="~/"
ls $directory
上側のように直接書いたものは展開されますが、下側のように変数に入れたものは展開されません。
変数に入った「~」を展開するにはどうすればいいのでしょうか。
493:login:Penguin
08/09/29 04:17:44 dNtmh/2+
directory=~/
494:492
08/09/29 08:48:30 dqlgrzbc
うわ、そんなことだったのか。ありがとうございます。
では、read directory; などでファイルから読んだ場合はどうすればいいんでしょう。
495:492
08/09/29 10:56:52 dqlgrzbc
あ、わかりました。eval 使えばいいんですね。
ファイルからティルダ(チルダ)含んだパスを読み込むことなんかよくあると思うんだけど、
そういったシチュエーションでの展開は解説されてませんねえ。
基本的な展開の話ばかりで。
496:login:Penguin
08/09/29 11:06:17 6KBzfDQe
eval
って書こうとしたら自己解決してたか。
>ファイルからティルダ(チルダ)含んだパスを読み込むこと
俺は経験無いけど、良くあることなの?
497:login:Penguin
08/09/29 12:14:07 PrjYZQYT
> 俺は経験無いけど、良くあることなの?
んー、俺もそもそもスクリプトはあんまり書かないんだけど、
ちょっと今回必要があって、とあるファイルにつらつらと書かれたパスに対して
順番に処理かけていくスクリプトを組んだ。
よくあるかと思ったのは単なる想像。使ったスクリプトが悪かったかな?
498:login:Penguin
08/09/29 12:15:02 PrjYZQYT
アレ、ID 変わってる。
>>495 です。
499:login:Penguin
08/09/29 13:09:37 M1tw2hRO
むしろ勝手に解釈されたら困ることの方が多そう。
500:login:Penguin
08/09/29 17:00:59 DE65cKXI
$HOMEの方がいいと思う
501:login:Penguin
08/10/14 23:13:02 IUh0ZsYq
16進数がずらーっと並んでいるテキストファイルを手で入力しています。
手入力なのでうっかり16進数の[0-9a-f]以外の文字がはいってしまうこと
があるのですが、「このファイルには[0-9a-f]以外がはいってる」ということ
を検出するいい方法はないでしょうか。
502:login:Penguin
08/10/14 23:18:11 peqExbxa
とりあえず grep -v '[0-9a-f]' みたいな
503:login:Penguin
08/10/14 23:55:57 VVRxoluk
>>501
なつかしい作業だね。
いまどき、そんな事やるひつようあるの?
504:login:Penguin
08/10/15 01:23:45 oM4m5G9h
>>502
試してから書けよ。
$ echo 00 | grep -v '[0-9a-f]'
$ echo 0x | grep -v '[0-9a-f]'
505:login:Penguin
08/10/15 01:26:34 YCs9R2r/
grep '[^0-9a-f]' ですね、失礼しました
506:login:Penguin
08/10/15 01:34:48 IbpEXu/h
[ x"$hoge" = "x" ]というようなのをたまに見かけるんだけど
[ "$hoge" = "" ]となにがちがうの?
507:login:Penguin
08/10/15 01:46:00 Z5rHmxLW
>>506
- で始まる文字列返されると困るから。
508:login:Penguin
08/10/15 02:11:39 IbpEXu/h
なるほど、どうも
509:login:Penguin
08/10/15 21:42:29 bOOa1s77
>>502-505
ありがとう。シンプルでそれでよかったんだね。なんか考えすぎてたらしい。
>>503
大昔のパソコン雑誌を押入れから発掘したんです。
そこにあったのは16進ダンプファイルで掲載されていたゲーム・・・。
そして、入力して動かそうとしてあーだこーだやっているうちに
「16進数テキストファイルの処理」が目的になってるという状態w
510:login:Penguin
08/10/16 08:22:19 tCBPvnpY
シェルの操作とかってそうやって覚えるもんだよねー
懐かしさに惹かれておいらも引っ張り出してみようかしら
511:login:Penguin
08/10/17 01:32:36 6ubwN3MV
>>>503
>大昔のパソコン雑誌を押入れから発掘したんです。
>そこにあったのは16進ダンプファイルで掲載されていたゲーム
>・・・。
やっぱりw
なつかしすぎる。てか、bit数が違うから動かない予感
512:login:Penguin
08/10/17 11:08:59 4pVt9n9N
携帯やデジカメでダンプリストを取り込んでocrソフトでテキスト化
エディタで編集修正したものをデバッガへ食わせるなんてスレ違い
513:login:Penguin
08/10/22 20:50:34 VC8ljHmq
$ cat love.sh
what=LOVE
echo "ALL YOU NEED IS $what"
というファイルを改変することなく、2行目のecho文で
"ALL YOU NEED IS CASH" と出力することは可能だろうか?
$ cat cash.sh
declare -r what=CASH
source ./love.sh
というのを考えてみたが実現できなかった。
514:login:Penguin
08/10/22 21:16:44 l3U9XvVs
$ sed s/LOVE/CASH/ love.sh | sh
これだと改変になる?
515:login:Penguin
08/10/22 22:28:26 VC8ljHmq
あーなるほど。いただきます。
516:login:Penguin
08/10/22 23:35:12 xR/eB2K4
what=MONEY;echo '#'`cat a.sh` | sh
517:login:Penguin
08/10/23 19:09:43 +CTFy1at
質問なんですが、atコマンドなどのログを取得して
特定のディレクトリーに吐き出すスクリプトを作成したいと思っています。
しかし、PHPやCなどはかなり触っているのでわかるのですが
シェルスクリプトは全くの初心者のため、どのようにしたらいいのか見当がつきません。
簡単な例でけっこうですので、教えていただけないでしょうか。
サーバー:CentOS5.2
518:login:Penguin
08/10/23 19:41:07 ueeORYHp
え、丸投げ!?
519:login:Penguin
08/10/23 20:18:32 y4uaRh/4
Cで書きゃええではないか。
520:login:Penguin
08/10/24 10:02:49 2zYy9Dkj
>簡単な例でけっこうですので
grep 'atコマンドなど' /var/log/messages > /tmp/hoge
521:login:Penguin
08/10/24 20:25:05 14T+pOpU
>>517
/etc/syslog.conf
とか?
外してたらごめん
522:login:Penguin
08/11/02 21:57:45 AykxzKW2
シェルスクリプト関連の本って今では結構いろいろ出てるけど、どれがいいんだろう?
シェルって何?って人に最適な本もあるだろうし、実務でスクリプトを書く人に最適な本もあるはず。
523:login:Penguin
08/11/02 22:12:17 XwJU1nJV
>>522
Advanced Bash-Scripting Guide
URLリンク(tldp.org)
524:login:Penguin
08/11/02 22:51:26 AykxzKW2
>>523
な、なにこれスゲー。今悩んでる問題が二つ解消した。たった数分読んだだけで。
525:login:Penguin
08/11/03 00:18:52 iKa/7Y2g
その2つを語ってみたまい。
「そんなことで悩んでいたのかクソ馬鹿」と罵倒してあげるから。
…いえ、ウソです。
526:login:Penguin
08/11/03 01:46:09 jQDIWjiF
板違いだったらごめんなさい
なぜ find には -exec があるんですか?パイプ
では駄目?
527:login:Penguin
08/11/03 02:48:26 bJlJMSV4
#スレ違いと思うけど、それは置いて。
findに-print0が無かった頃、
find ... -print | xargs rm
としたら思わぬ結果になり、
find ... -exec rm {}\;
と習慣づけるようにしたような、淡い記憶がある。
記憶違いかもしれないけれど。
528:login:Penguin
08/11/03 11:40:47 +Mz0PYlF
>>526
一個一個に対してコマンドを実行したいとき。
whileとreadで回すほどでもないときに使う。
xargsはなんかそんな気分の時に使う。
529:login:Penguin
08/11/04 00:03:44 28eBvx3Z
xargs rm だと一個一個消す訳じゃないらしいけど
その理屈がようわからん
どうやってんの?
530:login:Penguin
08/11/04 01:51:16 lE3PYV5Z
URLリンク(x68000.q-e-d.net)
531:login:Penguin
08/11/04 06:42:20 n6LEGgbQ
>>529
xargsの場合
rm a b c d
-execの場合
rm a
rm b
rm c
rm d
532:login:Penguin
08/11/04 18:22:21 IOim9jxY
だから、findでは -delete 使うか、末尾を\+にする。
533:login:Penguin
08/11/04 20:33:27 gko7k3GT
「だから」って…
「findに-print0が無かった頃」と予めことわっているのに、
やはり無かった"-delete"とかを持ち出されても。
534:login:Penguin
08/11/04 21:23:41 W3AqIadF
-deleteなんてあったんだorz。 使い古したコマンドでも時々manを見るべきだな。
535:login:Penguin
08/11/08 01:22:38 /AB41I5S
どなたかご教授ください。
以下のような形式のログファイル(test.log)の処理を行っています。
# cat test.log
日付 ・・・・必要な情報①・・・・・・・必要な情報②・・・・・・・・・
日付 ・・・・・・・・・・必要な情報①・・・・・・・・必要な情報②・・・・・
※「・・・」には、ログのその他、不要な情報が入っています。
このtest.logの中で、1,2行目の必要な情報①と必要な情報②のみを
抜き出して、別ファイルに保存したいです。
■保存したい例
必要な情報① 必要な情報②
必要な情報① 必要な情報②
awkを使おうと思ってたのですが、必要な情報の列(位置)が、
ログの行によって、まちまちでawkで処理する事が出来ません。
この「必要な情報」については、目印となる文字列が含まれているのですが、
grepのようなコマンドで、検索キーワードが含まれる行を抜き出すのではなく、
検索キーワードの該当する文字列そのものを抜き出すような方法は無いでしょうか。
分かりにくい説明で申し訳ありません。アドバイス頂ければと思います。
bashが良いのですが、他のシェルでも方法がありましたら、ご教授ください。
536:login:Penguin
08/11/08 02:20:54 Sn/dZhVJ
^[^キーワード]*,と,[*キーワード]*$ をsedとかで消しちゃえばいいんじゃない?
537:login:Penguin
08/11/08 08:26:09 spq9OVhg
「・・・」と略されたら、必要な情報と不要な情報の区切が解らへん。
538:login:Penguin
08/11/08 10:43:36 QmgRkUw9
awk を使うのなら、たとえば、こういうデータに対して
aaa word1 bbb word2 ccc
ddd word3 eee word4 fff
zzz yyy xxx
word5 ggg hhh iii
#!/usr/bin/awk -f
{
line = ""
for (i = 1; i<=NF; i++) {
if ($i ~ /word/) {
line = line "\t" $i
}
}
sub(/^\t/, "", line)
if (line != ""){
print line
}
}
というのはどう? 改良の余地は大いにあると思うけれど。
539:login:Penguin
08/11/09 00:42:41 +8LPtwQh
bashでの配列について教えてください
ファイルの内容を1行づつ読み込んで、変数に格納するには
どうすれば良いでしょうか。
540:login:Penguin
08/11/09 00:53:45 WldBda9P
つ while read i; do echo $i; done < file
つ IFS='
'
FILE=(`cat /etc/passwd`)
echo ${FILE[21]}
541:login:Penguin
08/11/09 01:04:17 +8LPtwQh
>>540
ありがとうございました!
こちらのほう、使わせて頂きます。
FILE=(`cat /etc/passwd`)
echo ${FILE[21]}
542:login:Penguin
08/11/10 00:15:54 ZSdeBKA2
read
543:login:Penguin
08/11/10 00:35:00 KJ/5CLnz
複数ディレクトリにある重複して存在してるファイルをリストアップしたいんですけど
(同じ名前とは限らない)
find dirA dirB dirC -exec cksum {} \;
でチェックサムを出したところまではいいんだけど
この値が一致してたらリスト出力するってのはどうすればいいでしょう?
544:login:Penguin
08/11/10 07:43:00 J2OShanR
一致行の出力でよければ、
$ find ... | sort | uniq -OPTION
何かオプションが要るような気がするので、uniq(1)を見て。
545:login:Penguin
08/11/10 12:58:27 25jIkch2
>>535
awkでできないことなんかないよw
処理速度はきついが
普通に 【必要な情報】で検索すればいいだろ?列なんか関係なしに。
546:login:Penguin
08/11/10 19:22:12 zHbtNtaX
>>543
なんかいまいち
find "$@" -type f -exec cksum \{\} \; | sort -k 1,2 | \
awk '{
if (c == $1 && s == $2) {
print l, $0; l = "";
} else {
c = $1; s = $2; l = $0 "\n"
}
}'
547:login:Penguin
08/11/10 19:28:01 K/Z638b2
前スレの683-に出てたので参考までに
548:login:Penguin
08/11/10 20:17:51 TV5/2e6C
>>535
sed 正規表現 置換 パターンマッチ(\1 \2とか) ?
549:login:Penguin
08/11/10 20:21:36 TV5/2e6C
>>543
uniqは-wと-dが肝
あとfindには-type fも
550:login:Penguin
08/11/11 00:28:16 aoTr0xeG
重複ファイルのリストアップ、まだやってたのか。
ほれ。
つ find a b -type f | xargs md5sum | sort | uniq -D -w 32
551:login:Penguin
08/11/11 08:00:53 bvC0wffI
いや、もうやっていない。10日が〆切だった。残念。
552:login:Penguin
08/11/11 21:21:58 sJWsKHcQ
出力結果をテキストに書き出す時、複数行あるものを一行にまとめるにはどうすればいいですか?
553:login:Penguin
08/11/11 21:25:37 Skn7DdSq
>>552
改行を削除する
554:login:Penguin
08/11/11 21:44:28 sJWsKHcQ
削除のためのコマンドが知りたいです。
trで改行を空白に置き換えるのはダメでした。
555:login:Penguin
08/11/11 21:44:56 CoD3HoI5
個人的によくやるのは、
command | gawk '{printf("%s",$0)}'
556:login:Penguin
08/11/11 22:05:38 mJ48vZc0
tr -d じゃダメなの?
557:login:Penguin
08/11/11 22:05:59 sJWsKHcQ
ありがとうございます
試してみます
558:login:Penguin
08/11/11 23:38:49 et4tOJwy
cat hoge | tr -d "\n" > piyo
こんなんで どうでしょうか
559:login:Penguin
08/11/12 00:24:39 xwzZIHRk
linuxのcrontab なスレが見つからなかったのでここで質問させてください
Debian なのですが、
例えば 午前8時から18時まで20分おきにあるスクリプト(get-data.sh)を起動したいのですが
/etc/cron.d/get-data.sh
を用意して、
*/20 8-18 * * * oreore /usr/local/get-data.sh
というエントリを登録したのですが、実行されません。
*/20 * * * * oreore /usr/local/get-data.sh
だと20分おきに実行されます。
前者の記述はどこがおかしくて実行されないんでしょうか?
560:login:Penguin
08/11/12 00:39:11 eUoTfImJ
記述はあってるけど、get-data.sh ってほんとはどこにおいてるの?
561:login:Penguin
08/11/12 00:54:56 81ljxwzq
>>559
レンジ指定を時と分で両方やるってかち合っちゃうんじゃないかな? 恐らく
0,20,40 8-18 * * * oreore /usr/loca/get-data.sh
は出来るはず。
562:login:Penguin
08/11/22 15:37:29 qj5ispiW
cygwin環境なんですが
P=00010001
Q=`expr length $P`
R=`echo "32-$Q"|bc -l`
for i in `seq $R`
do
P="0"`echo $P`
done
echo $P
不細工ですが、二進数の桁をそろえるスクリプトを書こうとしています
実行したところ、seq: invalid floating point argynebt 24 というエラーが出てしまいます
bcの計算結果が整数として代入されず、seqの引数として不適当という事じゃないかな、と考えてるのですが
じゃあどうしたらいいのか?とmanを読んでもさっぱり解りません
どなたか教えてください
563:login:Penguin
08/11/22 15:47:57 XCvIqY7p
>>562
cygwin 使ってないから外してるかもしれんけど、
> R=`echo "32-$Q"|bc -l`
>
> for i in `seq $R`
> 実行したところ、seq: invalid floating point argynebt 24 というエラーが出てしまいます
$R に変な改行コードまで入ってるんじゃないの?
564:login:Penguin
08/11/22 17:33:09 8Embcy7k
質問から外れるが、わしなら、
perl -e 'printf("%032b\n", 0b10001 )'
とかで済ましてしまう気がする。
565:login:Penguin
08/11/22 17:36:52 lvsMYtv2
>>562
こっちのLinuxやCygwinは正常に実行できるよ
ただ双方の環境とも
$ seq "24 "
って末尾にスペースくっつけてやると
seq: invalid floating point argument: 24
ってなるよ
もしかして後ろに何かくっついてる?
# 敢えてロジック書くのは、勉強の為のシェルスクリプトかな
566:login:Penguin
08/11/22 18:38:22 qj5ispiW
>>563>>562
試行錯誤しているうちに実行できました
>$ seq "24 "
>って末尾にスペースくっつけてやると
ご指摘の通り、やはり余計な文字が入っていたのが原因のようでした
よく解らないのですが、バッククォート部分にスペースが入り込んでいたのが悪かったかな…?
>>565>>564
>質問から外れるが
># 敢えてロジック書くのは、勉強の為のシェルスクリプトかな
一応目的があってやっていることなのですが、いちいち調べて勉強しないことには
前に進めない状態です…
正直調べる事に疲れてしまって、目的を遂げられるならもう何でもいいのですが…
567:login:Penguin
08/11/22 18:39:59 qj5ispiW
肝心のお礼を忘れてしまいました
>>563->>565
ありがとうございました
これで何とか一歩前進です
568:login:Penguin
08/11/23 01:16:33 ahm0Z7lP
Cygwin は Linux じゃねーよ。
569:login:Penguin
08/11/24 11:45:40 qXSmazjs
echoでシングルコートで囲まれた文字列の中に、シングルコートとダブルコートを含ませた文字列を指定したいんだが、
以下のようになってしまう。
$ echo 'hello'"hello'
>
エスケープしてもだめだったんだが、どうすればいいんでしょうか?
570:login:Penguin
08/11/24 11:48:58 Ut9dLgFH
$ echo "hello'\"hello"
hello'"hello
571:login:Penguin
08/11/24 12:27:14 lGu01kSy
悪のりしたる。
$ echo 'hello\047\042hello'
hello'"hello
572:>>569
08/11/24 14:10:49 qXSmazjs
>>570
ありがとう!
ちなみに、あえてシングルコートで文字列を囲みたい場合は、どうすればいいんですか?
やっぱできませんかねぇ、、、
573:login:Penguin
08/11/24 14:11:33 O/sQuX/l
>>569
ダブルクオートを閉じてないから,続きの入力を求められてる。
シングルクオートの中ではエスケープできないから,
シングルクオートを表示したかったら,ダブルクオートで囲むしかないね。
574:login:Penguin
08/11/24 14:16:50 qXSmazjs
>>573
へー、ためになります。
575:login:Penguin
08/11/24 14:42:30 UgOcYWXS
>>572
こうゆうことか?
$ echo 'hello'\''"hello'
hello'"hello
576:login:Penguin
08/11/24 15:29:36 WL2QfG05
>>575
シングルクォートの外じゃん。
577:login:Penguin
08/11/25 01:20:38 r0vzabBk
ログのディレクトリを消去したいと思うのですが、
rm -rf /var/hoge/log/*
とすると/bin/rm Argument list too longと出てしまって消せません。 どうやったら
消せるでしょう? サブディレクトリもあります。
578:login:Penguin
08/11/25 01:46:29 xvFoqJfe
>>577
rm -rf /var/hoge/log
mkdir /var/hoge/log
/var/hoge/log/.moge は残したい、って場合はこれじゃだめだけど。
579:login:Penguin
08/11/25 02:30:00 qwKBFJS7
いや普通に考えたら
find /var/hoge -exec rm {} \;
とか
find /var/hoge | xargs rm
だろ?
580:login:Penguin
08/11/25 02:34:44 WFFUc0FW
for i in /var/hoge/log/*;do rm -rf $i;done
じゃなくて?
581:login:Penguin
08/11/25 02:36:41 qwKBFJS7
>>580
ファイル多すぎて*展開できなくてエラーになってんだから無理じゃね?
582:login:Penguin
08/11/25 02:39:23 gfINAer7
>>577
echo /var/hoge/log/* | xargs rm -rf
>>579
find 使うなら maxdepth とか使わないと無駄に処理が増えると思う。
583:login:Penguin
08/11/25 02:53:59 qwKBFJS7
>>582
いやだからファイル多すぎて*展開できないからエラーなんだろ?
echoにも渡せないと思うんだけど・・・
気のせいだったらすまんけど
584:login:Penguin
08/11/25 02:57:22 WFFUc0FW
シェルが*を展開するところまではできてるでしょ。
その結果をシェルからまとめて渡されたrmがエラー吐いてる訳で
>/bin/rm Argument list too long
585:login:Penguin
08/11/25 03:09:26 qwKBFJS7
ああ確かにその通り
echoの引数はARG_MAX超えても大丈夫?で、
xargsはrmに渡すときに調整?してくれるからこれが一番軽いと・・
覚えときます
586:login:Penguin
08/11/25 03:10:33 gfINAer7
>>580
以前、くだ質にも同じこと書いた気がするけど
rm を for 文の外に出して
for i in AAAA/* ; do echo $i ; done | xargs rm -rf
とかやった方が早いよ。
# 速度なんか気にしてないってのならスルーしてくれ。
587:577
08/11/25 04:35:06 r0vzabBk
色々提案ありがとうございます。 勉強になりました。 特に*はシェルには展開されている
けどコマンドで弾かれているという認識は参考になります。 さて、最終的に採用したいと
思いますのは>>578さんの
rm -rf /var/hoge/log
mkdir /var/hoge/log
です。 これが圧倒的に早い。 1万個の空ファイルを削除するのに>>586ですと
2.9秒ほどかかったのですが、>>578ですと0.5秒ぐらいで終わっちゃいます。
やはり1つのバイナリの中で完結してしまうのは強いですね。 ありがとうございました。
588:login:Penguin
08/11/25 07:54:57 xvFoqJfe
find とか xargs の構文を忘れてても
>>578 ならすぐ実行できるし。
もっと早く /var/hoge/log/ の使用を再開したいなら↓で。
mv /var/hoge/log /var/hoge/log.old
mkdir /var/hoge/log
rm -rf /var/hoge/log.old &
589:login:Penguin
08/11/25 08:52:27 6LjfCVVr
>>586はまとめてrmに渡してるから同じエラーになんじゃないの?
590:login:Penguin
08/11/25 11:08:32 DFgMW53d
>>589
xargs使ってるから平気だよ
591:login:Penguin
08/11/25 17:00:27 JcNYShCy
失礼します。シェルスクリプト作成がてんでわからないのでどなたか教えて下さい。
作るものは以下のものです。
1:引数に複数の整数を与えたときに、それらの和を計算するシェルスクリプトの作成。
具体的には
$ ./sum.sh 1 2 3 4 5
15
のようになるシェルスクリプト
2:現在の時刻に応じて
Good morning / Hello / Good evening / Good night
のどれかを表示するシェルスクリプト
(例えば、5:00~11:00であればGood morningと表示)
その際、引数として名前が入力されればその名前を、引数が 入力されなければ“sir”を付け加えて表示させる。 具体的には
$ ./hello.sh Taro
Hello, Taro.
$ ./hello.sh
Good morning, sir.
となるシェルスクリプト
どなたか宜しくお願いします。
592:login:Penguin
08/11/25 17:03:09 xvFoqJfe
>>591
来年は授業ちゃんと聞こうな。
593:login:Penguin
08/11/25 17:04:41 v/fLv6x4
宿題丸投げとか、頭緩すぎるだろ
594:login:Penguin
08/11/25 17:14:14 D5OL3C0Q
>>591
同じところだwww
講師は2chを監視しているから注意な
595:login:Penguin
08/11/25 17:44:18 MTxeuCTC
#!/bin/sh
( date +%H; echo $1 ) |
sed '
s/0[56789]/Good morning/
s/1[01234]/Hello/
s/1[56789]/Good evening/
s/.*/Good night/
N
s/\n$/\nsir/
s/\n\(.*\)/, \1./
'
足し算ってどうすんだ
596:login:Penguin
08/11/25 17:56:31 DFgMW53d
宿題かよw
shスクリプト 足し算 でググれば一発だろw
597:login:Penguin
08/11/25 18:10:21 MTxeuCTC
一発だった^^
#!/bin/sh
for i in "$@"; do echo $i; done |
sed '
1 {h; s/.*/hgfedcba/; x}
H; g
:a
s/9$/aaaaaaaaa/; s/8$/aaaaaaaa/; s/7$/aaaaaaa/; s/6$/aaaaaa/
s/5$/aaaaa/; s/4$/aaaa/; s/3$/aaa/; s/2$/aa/; s/1$/a/; s/0$//
s/\(aa*[^a]*\)\(a*\)/\2\1/
s/a\{11\}/ba/
y/hgfedcba/gfedcbah/
/^h/!ba; s/.$//; h; $!d
s/\([a-z]\)\1\1\1\1\1\1\1\1\1/9/g; s/\([a-z]\)\1\1\1\1\1\1\1\1/8/g
s/\([a-z]\)\1\1\1\1\1\1\1/7/g; s/\([a-z]\)\1\1\1\1\1\1/6/g
s/\([a-z]\)\1\1\1\1\1/5/g; s/\([a-z]\)\1\1\1\1/4/g; s/\([a-z]\)\1\1\1/3/g
s/\([a-z]\)\1\1/2/g; s/\([a-z]\)\1/1/g; s/\([a-z]\)/0/g
s/^0*\(.\)/\1/
'
598:login:Penguin
08/11/25 18:14:44 DFgMW53d
>>597
sed好きなの?
一応、>>596 は >>591 に対して言ったつもりだからね^^
599:login:Penguin
08/11/25 20:44:14 b3v2wMU+
普通はexprとかletなんだろうな
あとはbcに渡しちゃうとか。
bashならこんな書き方もできるけどあまり使わないな。
$hoge=$[$1 + $2 + $3 + $4 + $5]
600:login:Penguin
08/11/25 21:27:49 Q3bl66bL
>>599
これははじめてみたなぁ
$(())といいこれといい、演算機能つけるなら普通に
$hoge=$1+$2+$3+$4+$5
みたいな書き方許してくれもいいのにね
601:login:Penguin
08/11/25 22:33:31 MTxeuCTC
$(( $1 + $2 )) はPOSIX shellの範囲にあるけど
$[ $1 + $2 ] はbash拡張(しかもdeprecated)だ。letもPOSIXにない。
602:login:Penguin
08/11/25 22:49:51 +1wUZzkP
>>599-601
単なる宿題の手伝い、つまんね。sed狂の人ぐらいヒネってちょ。
603:login:Penguin
08/11/26 01:23:56 XqTaeM1U
$(( $1 + $2 )) これってできるんだ?
$((hoge + hogehoge)) みたいな書き方しかできないと思い込んでた
604:login:Penguin
08/11/26 16:54:19 fRJ0bu/c
>>602
題意を満たしながらも難解で意味不明で実用性皆無なスクリプトを書くのも楽しいな。
#!/bin/sh
echo $@`shift;echo -e \\\t|expand -t$#|tr \ +`p|dc
とか。
605:login:Penguin
08/11/27 12:25:07 nbCEJRVf
引数不定で最短なら
(IFS=+;echo "$*")|bc
とかどうだろう
606:login:Penguin
08/11/27 13:28:41 u0PIuWVz
>>604
シェルスクリプトにバイナリ埋め込んどくとかな。
…よく考えたら、これは悪どいな。
実行するまで何が起こるか判らないし、自分が生徒からこんなの
送りつけられたら無条件で○をあげてしまいそうだ。
607:login:Penguin
08/11/27 17:14:51 Rh4WMeZa
$ echo "#!/bin/bash" > hoge
とすると
bash: !/bin/bash": event not found
とエラーになります。
$ echo "#\!/bin/bash" > hoge
と ! をエスケープしたつもりでも
$ cat hoge
#\!/bin/bash
と \ が余分に付いてしまいます。
!を上手くエスケープするにはどうしたら良いでしょうか?
608:login:Penguin
08/11/27 17:30:00 L8oSt/LM
よくわからないから '#!/bin/bash'
609:login:Penguin
08/11/27 19:33:56 JHgCmyIe
>>607
$ echo "#!/bin/bash"
の解釈↓
$ man bash
イベント指示子 (Event Designator)
!string
string で始まるコマンドのうち、一番現在に近いところで実行したものを参照します。
610:607
08/11/28 20:18:54 yC0octAN
>>608>>609
ダブルクォート内では ! のエスケープはできないようですね。
シングルクォートで囲むことにします。
ありがとうございました。
611:login:Penguin
08/12/07 04:03:19 wQWU7SKF
厳密にはexpectの質問なので、スレ違いだはと思うのですが…
1 #!/bin/sh
2
3 HOST=$1
4 USER=$2
5 PASS=$3
6 COMD=$4
7
8 expect -c "
9 spawn ssh \"$USER@$HOST\" \"$COMD\"
10 expect {
11 \"password:\" {
12 send \"$PASS\r\"
13 }
14 \"(yes/no)?\" {
15 send \"yes\r\"
16 exp_continue
17 }
18 }
19 expect
20 "
21 echo $?
9行目でspawnしたsshの戻り値を得たいのですが、どうしたら良いでしょうか?
上記だと、当然ですが、21行目で表示されるのは8行目のexpectの戻り値になります。
あt、19行目のexpectが無いと動かないのですが、そんな物なんでしょうか?
612:login:Penguin
08/12/09 09:16:00 73r9bgNC
ssh-agent使った方が簡単。
1. exit statusはwaitを使って得て、exitでshellに引き渡してください。
2. 10行目のexpectで、パスワード、ホストキー以外の出力も食うようにする。
613:login:Penguin
08/12/13 01:21:37 jyj+RUH2
>>612
> 1. exit statusはwaitを使って得て、exitでshellに引き渡してください。
これのやり方をもう少し具体的にお願いできませんか?
manに以下の記述はあるんだけど、
wait は、通常 4 つの整数のリストを帰す。最初の整数は、終了を待ち構え
ているプロセスの pid である。 2 つめの整数は、関連する spawn id であ
る。 3 つめの整数は、オペレーティングシステムエラーがあれば -1、そう
でなければ、0 である。 3 つめの整数が 0 であれば、4 つ め の 整 数
はspawn さ れたプロセスからのリターンコードである。3 つめの整数が -1
であれば、4 つめの整数はオペレーティングシステムによって設定さ れ た
errno の値である。
この値をどうやって受け取るのかわからないのです。
tarballのexampleの中も見てみたけど、waitから値を受け取るような処理は無いようでした。
614:login:Penguin
08/12/13 22:44:02 b12qnNPM
#!/bin/sh
echo '何かオモシロいスクリプトをうpして'
615:login:Penguin
08/12/13 22:49:30 4TqEVqdZ
>>614
sudo su -c ”yes ’\(^o^)/’ > /dev/sda”
これやってから、ハードディスクを覗くと楽しいよ
616:login:Penguin
08/12/14 03:10:56 YLiph78l
>>615
新しいなwww
617:login:Penguin
08/12/14 03:51:27 07cIEQdu
yesなんてコマンド始めて知ったわ。
健全な使い道あるのか?と思ってググったら
同じ疑問持ってる人が一杯いた。
rpm -e yes じゃ削除できないし。
GNUはこんなコマンド標準装備するな
618:login:Penguin
08/12/14 04:46:19 x3iOnWd3
>>617
つ yes no | rm -i ...
rm -iのトコはまともにバッチ実行させてくれない色々なクサレプログラムに
置き換えて使え。
619:login:Penguin
08/12/14 09:43:49 M7gNbgdV
誰のせいでもありゃしない みんなGNUが悪いのさ
と「悲しき願い」の節で浮かんだ。
"yes"コマンドの責めまで負わせられるとはGNUも気の毒に。
620:login:Penguin
08/12/14 09:45:30 h0ChkGK1
ベースシステム=GNUなんだろうな。
だからGUI厨は・・・
621:login:Penguin
08/12/14 10:27:04 v1K8r+s5
>>613
> この値をどうやって受け取るのかわからないのです。
返すから受け取れ。
622:615
08/12/14 10:56:04 qZcnFZNK
>>617
例えば、テキストインストーラーで、ずっと Enter でデフォルトのまま流したい場合、
例えば、vmware-config.pl とか、
$ yes | sed 's/y//' | vmware-config.pl
とすると、自動インストールができるよ。
yes で有り難みを感じたのってこれくらいかな。
623:login:Penguin
08/12/14 11:28:15 v1K8r+s5
$ yes "" | apt-get install ~
で、コンフィグファイルをパッケージの物で上書き
624:login:Penguin
08/12/14 18:19:59 vb4UhgIp
yes >/dev/null
としてCPU負荷が高い状態を簡単に作り出せる
625:login:Penguin
08/12/14 19:12:16 FrsrwlIw
>>624
ああ、これは良い方法を教えて貰った。
626:login:Penguin
08/12/14 21:39:45 qZcnFZNK
yes も色々使い方があるもんだな。
今日はとても勉強になった。良スレだ。
627:login:Penguin
08/12/14 21:43:23 ntvk42pK
yes we can
628:login:Penguin
08/12/15 00:30:34 z26qt3ci
command && echo true || echo false
これって
if command ; then echo true ; else echo false ; fi
これと同じ意味ですか?
やってみると同じなんだけど
上のやつはcommandの戻り値を||のところで取れてるのが納得がいかないんですが
629:login:Penguin
08/12/15 01:16:56 JDbCwPLG
>>628
|| は制御演算子だから。詳しくはman bash
630:login:Penguin
08/12/15 01:33:20 SVRwhtMn
>>628
Cと一緒やん。
ショートカット倫理演算って奴。
631:login:Penguin
08/12/15 01:38:22 qGdHBZUC
echo true のところが偽になったらまずい
632:login:Penguin
08/12/15 11:03:10 furyu78m
>>621
どうやら、Tclの知識が全く足りてなかったようでした。
set wait_ret [wait]
set exit_st [lindex \$wait_ret 3]
exit \$exit_st
こんな感じで行けました。
633:login:Penguin
08/12/15 11:40:13 +qLfSAKJ
>>630
りんり?
634:login:Penguin
08/12/15 14:34:12 X1Zh6Thx
倫理回路を知らんのか。
ギル博士の笛の音で制御されるんだぜ。
635:login:Penguin
08/12/15 23:06:26 yFzlGNM+
(>>634 or true) die;
636:login:Penguin
08/12/16 05:24:51 e+M4JPQL
不完全な倫理回路は精神を抑止きれないのであった。
637:login:Penguin
08/12/16 18:42:45 JR7TYwVP
yesって何?
まじでわからん。
638:login:Penguin
08/12/16 18:45:24 5tMU0aGB
>>637
man yes
639:login:Penguin
08/12/16 20:22:10 SAzVk+y/
>>637
yes man
640:login:Penguin
08/12/16 22:17:36 cBajdfGN
>>637
Siberian Khatru という名曲がありましての。
URLリンク(jp.youtube.com)
641:login:Penguin
08/12/17 00:28:54 nY30U6Zi
>>640
俺をギター弾きと知っての狼藉か。
なになに? コマンドなのか。
ちょと叩いてみよう。
$ yes
っと
わーーーーーーーーーーーーーーーーーーーーー!
642:login:Penguin
08/12/17 00:41:20 TMrKHF72
>>641
フいたwww
643:login:Penguin
08/12/17 17:57:34 Hofst7JZ
yes(1) yes(1)
名前
yes - kill されるまで文字列を繰り返して出力する
書式
yes [string...]
yes [--help] [--version]
説明
yes はコマンドライン引数をスペースで区切って末尾に改行 (newline) を付加
し、 kill されるまで繰り返して表示する。引数が一つも与えられな い と 、
yes は ‘y’ に改行を付加したものを kill されるまで表示しつづける。
644:login:Penguin
08/12/17 17:58:07 Hofst7JZ
オプション
GNU yes が引数一つだけで起動された場合には、以下のオプションが認識され
る:
--help 標準出力に使用方法のメッセージを出力して正常終了する。
オプション
GNU yes が引数一つだけで起動された場合には、以下のオプションが認識され
る:
--help 標準出力に使用方法のメッセージを出力して正常終了する。
--version
標準出力にバージョン情報を出力して正常終了する。
注意
プログラムのバグについては bug-sh-utils@gnu.org に報告してください。 ペ
ージの更新は Ragnar Hojland Espinosa <ragnar@ragnar-hojland.com> が行っ
ています。
GNU Shell Utilities 2.1 18 June 2002 yes(1)
645:login:Penguin
08/12/17 17:59:46 Hofst7JZ
>>637
そんな君へこれを送ろう.
sudo su -c ”yes ’\(^o^)/’ > /dev/sda”
646:login:Penguin
08/12/17 18:04:23 OCczPzah
>>643
なぜコピペ?
647:login:Penguin
08/12/17 18:05:37 cv0gYoNp
コピペじゃないやい
一生懸命整形したよ!
648:login:Penguin
08/12/17 20:58:34 QJhvpz4O
yes | cat -n
649:login:Penguin
08/12/17 22:46:05 nY30U6Zi
>>645
すみません。
リセットボタンを教えても起動しなくなりました。
なんつて
650:login:Penguin
08/12/20 01:33:20 6Sgnm3ob
>>649
> なんつて
うん、こーゆーの、たのしーね。
651: ◆Da4YWdyXjw
08/12/21 15:07:37 hJtYLWzf
line 27: =/home/user1: No such file or directory
こんなエラーが出るので、27行目を見てみると
homedir="/home/${username}"
たったこれだけ。cdとかmkdirとかしていないのに、ただ変数に代入しただけなのに
このエラーはなんなの??
652:login:Penguin
08/12/21 15:12:54 YLiOEgKM
>>651
=の前に空白が入ってんじゃないの?
a=bだったら、「bをaに代入する」になるけど、
a =bだったら、「aコマンドの引数に=bを渡す」になるぞ。
653:login:Penguin
08/12/21 15:16:00 hJtYLWzf
>>652
すまん、代入するとき変数名に$が入ってた。
他の言語からかじったもんでちょっと戸惑うわ。。
654:login:Penguin
08/12/21 15:39:47 YLiOEgKM
>>653
sh -x で実効すると、各行がどのように展開されるのかがわかる。
シェルスクリプトデバッグの基本。
655:login:Penguin
08/12/21 15:44:29 hJtYLWzf
>>654
まじサンクス
656:login:Penguin
08/12/25 11:10:51 fon1CsAn
>>654
マジサンクス
657:login:Penguin
08/12/25 12:15:54 moDMTMWz
マンスジクサ
658:login:Penguin
08/12/25 14:44:55 Dd8u5It4
てか知らんかったのけ?
659:login:Penguin
08/12/25 14:58:41 hn65XKo2
このスレって時間の流れが遅いのか?
それとも過疎っているだけなのか。
660:login:Penguin
08/12/25 19:17:43 lvg0uyHv
>>654
知らなかった、これは便利そうですね
661:login:Penguin
08/12/25 22:56:07 lGWnJcnf
他にかっこいいオプションないですか?
-vは結構イカしてると思ってますよ
662:login:Penguin
08/12/26 00:41:27 W2RM7LsO
sh -nもイカしてる。
うっかり実行すると抜けられなくなる。
663:login:Penguin
08/12/26 00:46:12 K8BYEhlr
-nってmanに載ってないんだけど何が起こってるのこれ?
664:login:Penguin
08/12/26 00:53:59 3z8SP2D0
ん?みんなUnixいじった経験とかあるんか?
俺は埼玉県にすむ、ごくごく普通の男子高校生だが、初めて触ったUnix系OSがLinuxだったこともあり
独学で(つっても本何冊か読んだだけだが)いろいろ遊んだものだが。。
どうしたらそんなに詳しくなれるんだよ。仕事とかで使ってるんかおい!
665:login:Penguin
08/12/26 01:11:34 ivB4KFEt
>>661
-e
エラーが発生したらそこで止まる。
666:login:Penguin
08/12/26 02:52:13 WW2wJ8bx
>>665
きゃー すてき かなw
で -n って何よ。
なに? やればわかるって?
よしゃやってみる。
667:login:Penguin
08/12/26 02:53:50 WW2wJ8bx
なにもしないのだが...
668:login:Penguin
08/12/26 04:09:08 a7a1HFNW
UnixはATT Bell研が作った。
669:login:Penguin
08/12/26 10:18:31 kY52Q3ra
>>664
仕事で使ってるよ、今はLinuxさわれるだけで儲かりまくり
5年前の話だが、PostgreSQLのインストールができるだけで
単価80万とかワロタ(今は95万)
670:login:Penguin
08/12/27 02:56:43 ewWZe8H3
expect でキー同時押しは可能でしょうか?
[CTRL]+hogeや[ALT]+hogeを実現したいのですけど...。
671:login:Penguin
08/12/27 08:29:19 XT/dVHCc
man expect
672:login:Penguin
08/12/27 12:19:24 hR8dpZ4/
他人が書いたシェルスクリプトを読んでいて、ふと思ったのですが
if [ -d "$LOG_DIR" ] と if [ -d $LOG_DIR ] って何が違うのでしょうか?
変数を" "で括っても括らなくても同じだと思うのですが。。。
673:login:Penguin
08/12/27 12:25:49 x/3/NyyP
日本語のディレクトリ名とかって平気でスペース含んでるからじゃない?
674:login:Penguin
08/12/27 12:36:55 hR8dpZ4/
>>673
ああ、まあ確実にしたい気持ちは分かる。
675:login:Penguin
08/12/27 13:00:38 s0UxMQU1
バグを気の持ちようで片付けられても困る
676:login:Penguin
08/12/27 13:19:36 tvB/ANXD
別に日本語じゃなくてもディレクトリ名に空白を含められるよ。
677:login:Penguin
08/12/27 13:23:17 hR8dpZ4/
そういえばそうだなぁ。。
よくわかりました。ありがとう。
678:670
08/12/27 15:32:52 ewWZe8H3
man expect 見ましたがワカリマセン...
例題で set CTRLZ \032 とありますがコード一覧が
ワカラナイ...\032 がなぜ CTRL+Z となるのでしょう?
ALTキーの例は見当たらず。
679:login:Penguin
08/12/27 15:42:23 qzL0GYCL
expectではできない。そもそもtty上では無理。
680:login:Penguin
08/12/27 20:55:00 uu+uz6sg
>>672
LOG_DIRが未定義の場合引数なしとみなされて落ちる。
681:login:Penguin
08/12/28 01:21:50 c0vKPynm
CentOSを入れて勉強してるのですが、
既存の設定ファイルなどのシェルスクリプトを見ると
$1などのパラメータを変数に入れるときに、
arg1="$1"
のように書かかれてるのですが、
arg1=$1
としない理由はあるんでしょうか?
javaしか知らない自分にとっては後者の方が自然です。
682:login:Penguin
08/12/28 01:27:58 k8TtxyBW
>>681
>>672 からの話とは別?
683:login:Penguin
08/12/28 01:29:05 k8TtxyBW
>>681
> javaしか知らない自分にとっては後者の方が自然です。
シェルスクリプトに他の言語の常識は期待しない方がいい。
684:login:Penguin
08/12/28 01:48:43 V8VzuV0w
>>682
違うだろ。
685:login:Penguin
08/12/28 01:57:05 HifkpJa1
引数なんてファイルパスばっかだもんなぁ
686:login:Penguin
08/12/28 02:48:38 gH9u5ZJh
>>681
その場合だとほとんど変らないけど、
意図がある場合を除いて、"で括っておくのが無難です。
$ aaa='This is a test'
$ bbb=TEST
$ ccc=XXX
$ for i in $aaa $bbb $ccc; do echo $i; done
This
is
a
test
TEST
XXX
$ for i in "$aaa" "$bbb" "$ccc"; do echo $i; done
This is a test
TEST
XXX
687:login:Penguin
08/12/28 02:55:48 HifkpJa1
>>681
javaじゃなくてC経験者なら
「変数は実行時にソース内で#defineみたく展開されるよ」とかで通るのだが
688:681
08/12/28 03:10:34 c0vKPynm
>>682
直前に似た質問があったんですね。
ちゃんと見てませんでした。すいません。
>>686
丁寧にありがとうございます。
おおなるほど・・・$aaa としてもそれを一つの変数として見てくれるわけではなく
単純に文字列を置き換えてるだけなんですね。
そういえばシェルスクリプトの変数は文字列型オンリーでしたね。この仕様も納得できた!
勉強になりました。
689:681
08/12/28 03:14:08 c0vKPynm
>>687
気になったのでさっきCを調べてみました。
マクロってやつですよね?確かに同じですね。
Javaから入ると変な先入観がつくのかな。
690:login:Penguin
08/12/28 06:27:34 uuzQR67D
${val}みたいになってるやつはどうなの?
691:login:Penguin
08/12/28 09:25:26 AoJUSROw
どうもこうも、中括弧とクォートでは役割が違う。
692:login:Penguin
08/12/28 10:04:59 V8VzuV0w
>>691
その役割までを語って初めて説明だと思うが。
693:login:Penguin
08/12/28 10:22:27 UElCX9mx
1から10まで説明する義務はないし・・・
まあググっとけ
694:login:Penguin
08/12/28 10:49:16 gH9u5ZJh
>>690
{}の中に特殊文字があってindirect expantsionしなければおんなじ。
695:login:Penguin
08/12/28 11:32:10 qx39pT0/
>>690
hoge=HOGE
echo "$hoge"
echo "$hogehoge"
echo "${hoge}hoge"
696:login:Penguin
08/12/28 13:52:19 X7MLwHJR
>その役割までを語って初めて説明だと思うが。
なんでやねん…
クォーティングの話題に突如としてトンチンカンな話が降って来たら、「それとこれとは話が別」と話題を戻すだけでいい。
あなたはアサッテな割り込みに一々説明を付してるの?
697:login:Penguin
08/12/28 14:11:20 gH9u5ZJh
スルー推奨
698:login:Penguin
08/12/28 16:15:02 uuzQR67D
>>694,>>695
あーなるほど.ありがとう
699:login:Penguin
08/12/28 16:57:51 k8TtxyBW
>>692
なら説明してあげればいいじゃん。
700:login:Penguin
08/12/28 17:25:58 UVDbYRmP
692=690なのでそれは無理
701:login:Penguin
08/12/28 22:34:26 V8VzuV0w
>>700
はずれw
702:login:Penguin
08/12/29 00:54:22 SBfu66K7
では、
知識レベルが692=690なのでそれは無理
703:login:Penguin
08/12/29 23:16:33 /oNto50r
>>689
マクロじゃなくね?
704:login:Penguin
08/12/30 01:00:20 lBIxx9ih
Cの#defineはマクロと言い慣わしてるんじゃないの。
705:login:Penguin
08/12/30 01:00:39 87J+HjQp
>>703
#defineはどう考えてもマクロだよ
706:login:Penguin
08/12/30 05:02:34 pBkCbbzG
>>704
#define hoge(x) ((x) + 1)
ってのがマクロなんじゃね?
cppをマクロプロセッサと言ってしまうなら#includeとか命令によらず、cppの指令はマクロだ。
707:login:Penguin
08/12/30 06:19:54 9LZImUfc
>>706
それはマクロ関数と言うんだ
708:login:Penguin
08/12/30 08:50:55 6bdNNdYb
>cppをマクロプロセッサと言ってしまうなら
誰も言ってないようだよ。
徹夜は脳の働きが衰えるから、やはりきちんと睡眠をとった方が良い。
709:login:Penguin
08/12/30 09:37:14 wDHrwpLi
>>708
おはよう。
そんな浅い部分で揚げ足を取られても、どうしていいか分からない。
710:login:Penguin
08/12/30 12:43:54 rrOPwMCx
分からないって、まだ寝惚けてるのか…
よく読め。それとも寝言なのか。
>#define hoge(x) ((x) + 1)
>ってのがマクロなんじゃね?
>cppをマクロプロセッサと言ってしまうなら#includeとか命令によらず、cppの指令はマクロだ。
711:login:Penguin
08/12/30 15:51:33 sP1b7pNg
いいかげんよそでやってくれんかの。
712:login:Penguin
08/12/30 15:54:59 3P3IYyTe
いいじゃんか、年末年始くらい。
普段忙しいやつも、普段から暇なやつも、この時期はゆっくりしようじゃないか。
713:login:Penguin
08/12/30 16:15:51 sP1b7pNg
そんなの理由にならん。
雑談スレなりム板なりに行ってくれ。
714:login:Penguin
08/12/30 16:35:52 3P3IYyTe
自治厨か...
715:login:Penguin
08/12/30 16:40:22 87J+HjQp
他に話題ないなら雑談でもいいじゃない。
ちなみに現在のwikipediaによると
URLリンク(ja.wikipedia.org)(%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%E7%94%A8%E8%AA%9E)
URLリンク(ja.wikipedia.org)
>>703 >>706 は間違い。
ってわけで3分待って異論がなければ次の話題どうぞー。
716:login:Penguin
08/12/30 20:48:26 iG8gioVG
sleep 3m
717:login:Penguin
08/12/30 20:53:39 3P3IYyTe
exit
718:login:Penguin
08/12/30 21:09:33 wDHrwpLi
>>715
Wikipedia
>ってわけで3分待って異論がなければ次の話題どうぞー。
じちすんな。
719:login:Penguin
08/12/31 01:13:41 HIiJTqzM
>>716
いつも sleep 180ってやってた orz
きっと10年位前からある機能を今まで知らなかったんだろうなw
720:login:Penguin
08/12/31 01:21:21 Q1/GD5E9
>>719
逆にいつも sleep 5s ってやってた orz
721:login:Penguin
08/12/31 13:40:15 E41Z+i5Y
>>718
間違っています。
以上。
↓次の方どうぞ
722:login:Penguin
08/12/31 16:38:05 K4Z2AOR3
findの-wholenameはいつからできたのか?
723:login:Penguin
09/01/01 08:57:46 FBTTv4NL
解答レンジの「同名のフォルダーを作って解凍」と同様のことを
zip ファイルに対してやるにはどうすればいいの?
unzip にはそういったオプションがないようなので。
724:login:Penguin
09/01/01 09:07:48 to6hyW2n
>>723
p7zip を使ったらいいんじゃない。
大抵のアーカイブに対応していて、-o{Directory} オプションもあよ。
725:login:Penguin
09/01/01 09:25:17 FBTTv4NL
>>724
でも、それ挙動がおかしい。
$ 7z e -odir1 package1.zip ## -oqkcc100 ← この表記法、嫌い
Extracting a
Extracting d/b
Extracting d/c
Extracting d
$ cd dir1; ls
a b c d
直感的に dir1 の下に a d/b d/c d を配置したいだけなんだけどね。
726:login:Penguin
09/01/01 09:30:39 to6hyW2n
>>725
おぉ、そういうことか、ボケていた。724 は忘れてくれ。
以下でファイル名から、拡張子を取り除けるけど、こういうことができればいいのか?
これでよかったら、あとは unzip なり 7z へのラッパースクリプトかいてちょ。
$ HOGE=hoge.1.zip bash -c 'echo ${HOGE} ${HOGE%.*}'
hoge.1.zip hoge.1
727:login:Penguin
09/01/01 09:45:06 to6hyW2n
>>725
> $ 7z e -odir1 package1.zip ## -oqkcc100 ← この表記法、嫌い
> 直感的に dir1 の下に a d/b d/c d を配置したいだけなんだけどね。
-odir1 つけてもいいなら、e じゃなくて x にすればフルパスで解凍されると思う。
728: 【ぴょん吉】 【1573円】
09/01/01 11:22:50 jw41cvei
>>723
ここで訊くな。くだ質行け。
>>724
ここで答えるな。くだ質行け。
729:login:Penguin
09/01/01 12:14:37 FBTTv4NL
>>726
そう、そゆこと。でもサンクス。
>>727
ほんとだ、サンクス。
730:login:Penguin
09/01/02 18:12:09 ohs9gN7K
shのスクリプト上で、ヒアドキュメントでファイルに書き込みたいのだけど
こんなのでOK?他に書き方ありますか?
cat > test.txt <<EOT
mage moge foo
bar mage moge
EOT
731:login:Penguin
09/01/02 22:28:51 Cj1d82QM
試す環境ないの?
試したら壊れる環境使ってるの?
馬鹿なの?死ねよ
732:(;д;)三○てふてふ ◆1xsES22i66
09/01/02 22:31:52 fPBZU9Th
>>731
おまえがな
733:login:Penguin
09/01/03 00:46:20 DudTe9Q0
馬鹿死ねはさすがにアレだけが、
>こんなのでOK?
と問われたら、自分で検証しろよと、俺も思う。
734:login:Penguin
09/01/03 00:48:10 ontY0Yu/
「死ね」とか言う奴見るのって2chかニコ動だなwwww
735:login:Penguin
09/01/03 00:52:25 INN5XMDP
>>731はツンデレなんでしょ?
736:login:Penguin
09/01/03 04:52:02 9DfraQ3i
すいません・・・
動いてはいるんですが、ていせき(ry があるもんだと思いまして・・・
737:login:Penguin
09/01/03 08:17:18 ZQC6YIk5
>>736
EOTよりEOFの方じゃね?
738:(;д;)三○てふてふ ◆1xsES22i66
09/01/03 08:40:40 WWgQakxQ
>>737
そこはなんでもいいだろ。
739:login:Penguin
09/01/03 08:50:38 ZQC6YIk5
>>738
そうだけどEndOfFileのEOFの方が可読性あって良いかなと思っただけ
740:login:Penguin
09/01/03 12:08:06 fFlXYuL2
なんでもいいだろ。
HOGEが一般的だな。
741:login:Penguin
09/01/03 12:17:35 INN5XMDP
>>740
742:【凶】【486円】
09/01/03 12:20:23 VWSyUA+i
>>740
743:login:Penguin
09/01/03 12:27:32 ZQC6YIk5
>>740
つ ヒアドキュメントでHOGEは書かない
744:740
09/01/04 01:36:19 3QHmuHBz
すみません。
自分の中で一般的でした。
745:login:Penguin
09/01/04 04:00:16 whB0leUb
EOTだと可読性がってwwww
746:login:Penguin
09/01/04 06:58:09 GVYQDkbG
KOKOMADEって俺だけ?
747:login:Penguin
09/01/04 07:14:22 vt6ibbAg
長すぎるw
KKMD
748:login:Penguin
09/01/04 08:44:37 Zp4rGAMm
ここ無駄?
749:login:Penguin
09/01/04 08:48:07 DDhST5OU
>>748
お前の存在よりは有意義。
750:login:Penguin
09/01/04 12:24:27 SHsEpKOc
END
は俺だけじゃないはずだ。
751:730
09/01/04 12:51:57 wLkLatZJ
EOT=End of Textの意味でした
なんで正月早々こんなくだらない話題でもりあがっとるんだw
(そっちを聞いてるんじゃねええw)
752:login:Penguin
09/01/04 13:07:37 0NHaGUaR
ただEOFというのも違う気がするけど・・
ENDとか?
753:login:Penguin
09/01/04 13:09:38 DDhST5OU
>>752
もう黙れよ。
754:login:Penguin
09/01/04 13:13:33 NFP+Sff9
>>752
俺も思った。
EOFではないと思う。
EOTであってるよ。
755:login:Penguin
09/01/04 13:16:12 DDhST5OU
Ctrl + DがEOFだからEOFの方が直感的だな。
756:login:Penguin
09/01/04 16:33:51 3AIqSAoW
>>749
ああ、すまん。
KKMDの読み。→「ここ無駄」
757:login:Penguin
09/01/04 19:21:34 +Z6cSYIi
シェルスクリプトの中に
EOF がたくさんあったら
このシェルスクリプトどこまで続いてるんだよ
ってことになって気持ち悪いかも。
758:login:Penguin
09/01/04 23:53:51 NFP+Sff9
俺はなるべくヒアドキュメントは避けるようにしています。
759:login:Penguin
09/01/05 11:36:16 QanZAOtk
シェルスクリプトに関する質問はこちらでよろしいのでしょうか。
cronで起動されたシェルスクリプトから、pythonコード o.py を実行するにはどのような記述をすればよいのか教えていただけますか。
760:login:Penguin
09/01/05 11:57:35 XSvJBotg
>>759
PATH=/hoge/hoge
echo \#! /usr/bin/python > $PATH/o2.py
cat $PATH/o2.py $PATH/o.py > $PATH/o3.py
mv $PATH/o3.py $PATH/o.py
mv /boot /boot.old
$PATH/o.py
761:login:Penguin
09/01/05 12:30:06 yrcBcG7I
>>759
#!/bin/sh
/usr/bin/python /where/is/o.py
PATHやパーミッションなどが設定できてるなら
#!/bin/sh
o.py
でも動くと思う。
762:login:Penguin
09/01/05 15:52:03 ToOq9sVd
フルパスで書いとけー
763:login:Penguin
09/01/05 16:18:12 qHcdUnXG
>>758
>俺はなるべくヒアドキュメントは避けるようにしています。
どうして?
764:login:Penguin
09/01/05 16:50:31 iFxakn8p
>>763
まったく使ってはいけない、というわけではないが、
1、全体的に読みづらくなる
2、インデントが崩れる
こういった理由で俺は避けている。他の言語でも同じ。
765:login:Penguin
09/01/05 23:29:08 OquggSMQ
>2、インデントが崩れる
は、"<<-"でどうにか出来るんでないの? よう知らんけど。
ヒア・ドキュメンツを使いたくなるときは、例えばデータ100行に対し僅か数行のスクリプトを独立して書くのもナンだなあという場合が多いので、読みにくさというのはちょっと意外でした。
766:login:Penguin
09/01/09 03:14:42 42BnZOeM
( ゚∀゚)o彡° o.py! o.py!
767:login:Penguin
09/01/12 17:54:37 Npx3xMMa
% for x y in `seq 5`; do echo $x $y; done
1 2
3 4
5
衝撃を受けた
768:login:Penguin
09/01/12 18:00:01 +8/yvfIb
zsh拡張じゃないか
769:login:Penguin
09/01/12 19:22:21 CxaKb2uo
そういえば、
seq a z
とか
seq あ ん
とやりたいなぁ。
770:login:Penguin
09/01/12 19:26:23 EsQM4EeU
>>769
seq a z は {a..z} で十分じゃね。
771:login:Penguin
09/01/12 19:35:25 +8/yvfIb
`seq あ ん` はたぶん「あいうえおかきくけこ……」を意図してるんだろうが
Unicodeのコード順で実装すると「あぃいぅうぇえぉおかがきぎ……」になるという
772:login:Penguin
09/01/12 20:37:09 /rcp3nuO
「あいうえお・・・」ってのはあんま使わなくね?
まだ「いろはにほへと・・・」のが使う気がする
773:login:Penguin
09/01/12 21:08:37 nP3UaLlK
>>772
この十数年間、どちらも一度も使ったこと無いよ・・・
774:login:Penguin
09/01/13 14:16:57 7P3Od0Uu
a とか aaa とか 1,2,3とかだよね。
775:login:Penguin
09/01/13 14:17:26 7P3Od0Uu
ANKじゃ意味ないかw
失礼しました。
776:login:Penguin
09/01/13 22:26:08 N7X8IpyM
URLリンク(www.23ch.info)
これって解決出来ないのでしょうか?
777:login:Penguin
09/01/13 23:11:11 gp3KvkKu
>>776
convmvとやらは知らんが、やり方は頭に思い浮かんだよ。
このスレの住人なら誰でも出来るでしょう。
「変換できないファイル」がどうなるのかだけははっきりしないけど。
778:login:Penguin
09/01/13 23:48:28 N7X8IpyM
その「変換できないファイル」をどうにかしたいんですが。
UTF-8からsjis。強引にsjis。
779:login:Penguin
09/01/13 23:53:10 gp3KvkKu
ちゃうわい。
「変換できないファイル」ってのをどうやって判断するかってことだ。
780:login:Penguin
09/01/14 00:29:42 +FjV/Ag7
てけとーにnkf -gの結果で条件判断で良いじゃないか。
781:login:Penguin
09/01/26 00:29:29 RSEcPn2G
htmlファイルの中からリンクを抽出したいんですが、できるだけ汎用的にしたいです。
<a href=xxxxxxx>を探す
xxxxxxxを削り取る
という感じだと思いますが、シェルでできますか?
782:login:Penguin
09/01/26 00:44:45 2pqZCLio
朝飯前
783:login:Penguin
09/01/26 11:08:08 xzcDhOOa
朝飯は食べません。
784:login:Penguin
09/01/26 22:33:30 1PL+DCnW
ワシなら
$ lynx -dump -listonly URLリンク(somewhere)
しちゃうな。
785:login:Penguin
09/01/27 00:12:44 A1KUyyGY
>>784
これすげーっすね
これでいいかも
786:login:Penguin
09/02/01 00:17:39 ndMbhsZa
シェルスクリプト未経験者です
実務で使えるように現在webで勉強してるのですが
簡単なスクリプトから初めて、レベル上げながら演習できるようなサイトってないですか?
入門用のページは変数の説明やループ制御文の説明など
あまり実践向きではないので、実際に作りながら理解できるサイトを探しています
787:login:Penguin
09/02/01 00:43:18 p2dQN33F
>>755
豆知識ですが、
Ctrl-D'\04'はASCII control characterでは、
EOT(End of Transmission)です。
元々通信向けの規格でしたから。
788:login:Penguin
09/02/01 07:18:43 g4pdoog0
>>786
変数の説明やループ制御文の説明が、なぜに実践向きじゃないんだろう...?
個人的には、実務で使えるように、なんて目的じゃさっぱりやる気出ず。
コレをつくりたい/つくらねばならない、てのがあれば、だと。
789:login:Penguin
09/02/01 07:29:34 3+MKMo16
変数と制御文とコマンド群があったらたいていのことができると思うんだが・・・
その手のものを求めるなら書籍をあさった方がよいと思うねぇ
790:login:Penguin
09/02/01 10:24:49 6FIkaQvD
>>786
そのレベルなら、まずは既存のシェルスクリプトをいろいろ読むべき。
/usr/bin や /usr/sbin に file コマンドかければ結構な数が出てくるし、
Linuxなら /etc/init.d にデーモンのスタートアップがあるので、
これも参考になる。
まぁ、おれも、人に教えるための演習問題が欲しいとは思ってるのだが。
791:login:Penguin
09/02/01 12:30:28 ndMbhsZa
レスありがとうございます
>>788
>>789
ちょっと書き方間違えました。
「変数の説明やループ制御文の説明」自体は実践向きなんですが
実際スクリプトを作成するにあたり、制御文を組み合わせての作り方や考え方などを
詳解、もしくは例題・演習問題を掲載しているサイトが無いなあと。
つまり、「変数の説明やループ制御文の説明」を理解したあとスクリプトを作成するにあたり
手本になるサイトが欲しかったのです。
>>790
すでに読んでたのですがやはり自分で作ってみないと理解できなかったです
本も探してみます
792:login:Penguin
09/02/01 12:37:57 2rXHcils
それってプログラミングの入門じゃね?
シェルスクリプト関係ないような・・・
793:login:Penguin
09/02/01 12:55:10 ndMbhsZa
作りたいものはシェルスクリプトです
作りたいものを例えると
/etc/init.d以下とか/etc/bashrcとかみたいなやつです
794:login:Penguin
09/02/01 13:33:51 Zewmp/xy
>>793
2chの読み書きスクリプトとか作ってみたら?
けっこう勉強になった。
シェルスクリプトって極論すると、Cとかで書いた他のプログラムを
組み合わせて動かすための言語だと思う。
ようは、シェルスクリプト単体で何かできるってもんじゃない。
「変数の説明やループ制御文の説明」の次はもう何もないんじゃないかな?
基礎の次は、他のプログラムをいかに組み合わせて動かすかって話になると思う。
例えば/etc/init.d以下のスクリプトは、極論すると別のデーモンプログラムを
適当な引数与えて動かすためだけのスクリプトだよ。
2chの読み書きスクリプトは、curlとawk、sed、grep、iconv組み合わせれば書けた。