シェルスクリプト総合 その2
■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。
2005/04/17(日) 00:17:17まずは注意点、リンク、地鎮祭など(>>1-10くらい)をご覧ください。
□前スレや過去スレ:
シェルスクリプト総合 その1
http://pc8.2ch.net/test/read.cgi/unix/1101820646/
☆シェルスクリプトを勉強するにあたって☆
http://pc5.2ch.net/test/read.cgi/unix/989659936/
便利なシェルスクリプト見せろ
http://pc5.2ch.net/test/read.cgi/unix/996949546/
【貝】第1回シェル講座【殻】
http://fun.kz/test/read.cgi/unix/1016372780/
□関連スレ:
sed
http://pc8.2ch.net/test/read.cgi/unix/1085730992/
おまえら! shell は何を使っているんですか?
http://pc5.2ch.net/test/read.cgi/unix/1012330865/
Eshell の使い方とか設定とか【Emacs Shell、Lisp】
http://pc8.2ch.net/test/read.cgi/unix/1102921590/
□他板の関連スレ:
Macでシェルスクリプト総合 Part 1
http://pc7.2ch.net/test/read.cgi/mac/1105074933/
【Shell】どのシェル使ってる?【Script】
http://pc8.2ch.net/test/read.cgi/linux/1067330754/
0244名無しさん@お腹いっぱい。
2005/05/28(土) 16:26:46どことのマルチか書かないと。
0245名無しさん@お腹いっぱい。
2005/05/28(土) 16:31:19こちらに誘導されましたので、こちらで質問させていただきました。
>>242殿、>>243殿 ありがとうございました。
0246名無しさん@お腹いっぱい。
2005/05/28(土) 16:37:06移動したなら元スレにそう書いといてくれよ。
0247名無しさん@お腹いっぱい。
2005/05/28(土) 17:58:29礼儀の足りないやつだとでも心の中で思っとけ。
0248名無しさん@お腹いっぱい。
2005/06/02(木) 19:50:43(ttp://codezine.jp/a/article.aspx?aid=67 より)
上のスクリプトのechoの部分は、「echo "^[[1;1H"として画面左上隅にカーソルを
移動させる」とあります。
しかし、bash(2.05b)で動かしてみましたが、^[[1;1Hが表示されるだけです。
何が問題なのでしょうか?
0249名無しさん@お腹いっぱい。
2005/06/02(木) 20:07:40^[ をどうやって打ち込んだか
0250名無しさん@お腹いっぱい。
2005/06/02(木) 20:19:100251名無しさん@お腹いっぱい。
2005/06/02(木) 22:08:390252名無しさん@お腹いっぱい。
2005/06/02(木) 22:09:010253251
2005/06/02(木) 22:13:48いと思うが。
0254名無しさん@お腹いっぱい。
2005/06/02(木) 22:18:46そういう話じゃなくて>>249ってだけだと思うが
0255名無しさん@お腹いっぱい。
2005/06/02(木) 22:30:21すまん。
0256名無しさん@お腹いっぱい。
2005/06/03(金) 14:01:330257名無しさん@お腹いっぱい。
2005/06/03(金) 17:29:18ファイルのサイズを取得するのはどうすればいいのでしょう?
ls -lのサイズのカラムは決まっていないようですし、
-sオプションの振舞いも微妙に異なるので困ってます。
0258名無しさん@お腹いっぱい。
2005/06/03(金) 17:35:19stat(2)
0259257
2005/06/03(金) 17:42:10シェルスクリプトの中でcc起動してってことでしょうか?
Cのコードを書くとなると、そこでまたポータビリティに気を
使ったりしなきゃならないので、なるべく避けたいです。
wc呼ぶぐらいなら、Cのコードで行くとは思いますが...
0260名無しさん@お腹いっぱい。
2005/06/03(金) 17:45:510261名無しさん@お腹いっぱい。
2005/06/03(金) 18:42:010263名無しさん@お腹いっぱい。
2005/06/03(金) 19:21:440264名無しさん@お腹いっぱい。
2005/06/03(金) 22:06:44なんでwc嫌なの? wcだってfstatしてるだけじゃない。
0265名無しさん@お腹いっぱい。
2005/06/04(土) 00:40:25どのUNIXでも、wc -cはfstatするの?
0266265
2005/06/04(土) 00:51:41Red Hat Linux 9 は fstat64
FreeBSD 4.xはfstat
0267名無しさん@お腹いっぱい。
2005/06/04(土) 14:40:08じゃあスレ違いなんでどっか行ってください。
0268名無しさん@お腹いっぱい。
2005/06/04(土) 17:50:010269名無しさん@お腹いっぱい。
2005/06/04(土) 19:23:01必死だなw
0270名無しさん@お腹いっぱい。
2005/06/04(土) 23:41:27VAL=func1()
としただけでは
line 3: syntax error near unexpected token `('
となってしまいます。
0271名無しさん@お腹いっぱい。
2005/06/04(土) 23:45:31VAL=$?
0272名無しさん@お腹いっぱい。
2005/06/04(土) 23:49:47ありがとうございます。さすがシェルスクリプトですね。ダサすぎますw
PerlやRubyが流行るのも分るような・・・
0273名無しさん@お腹いっぱい。
2005/06/04(土) 23:57:14インタラクティブ用途がメインの言語にケチ付けるのもアレだな
0274名無しさん@お腹いっぱい。
2005/06/04(土) 23:57:370275名無しさん@お腹いっぱい。
2005/06/05(日) 00:10:23関数内でreturnした値が得られたみたいです。
$ function hello(){ return 3;};hello;echo $?
3
ただし、returnできる値はunsigned charに限られるようで、
0〜255までの値しか返せませんでした。ここは注意しないとダメっぽいです・・・
あともう一つお願いします。
$ if [ echo ];then echo "true";fi
true
$ if [ echo "abc" ];then echo "true";fi
bash: [: echo: unary operator expected
これはどうしてなんでしょうか?
0276名無しさん@お腹いっぱい。
2005/06/05(日) 00:18:39>unary operator expected
って書いてある通り
0277名無しさん@お腹いっぱい。
2005/06/05(日) 00:39:38abc
Sun Jun 5 00:39:09 JST 2005
true
testをやめて()にしたら、なぜだかいきました。
でも()ってたしかサブシェルの起動だったような・・・よくわからん
0278名無しさん@お腹いっぱい。
2005/06/05(日) 00:45:13ってどうなるかわかる?
0279名無しさん@お腹いっぱい。
2005/06/05(日) 00:55:16なんか基本的な部分が分かってない気がする。
とりあえず、man testしてみなさい。
0280名無しさん@お腹いっぱい。
2005/06/05(日) 01:08:54それが bash なら test の説明もあるし。
>>272
Perl や Ruby よりもシェルスクリプトが勝る点は、
どんなアホにもすぐに書き散らかすくらいのことは出来るようになるってこと
だからしょうがないよ。がんばれ。
0281名無しさん@お腹いっぱい。
2005/06/05(日) 01:08:590282名無しさん@お腹いっぱい。
2005/06/05(日) 01:09:45test(1)の中の記述で、
(expression) True if expression is true.
というものがあるんですが、これはなんでしょう?
>>278
ifというのは「以下に続くコマンドを実行した、その終了ステータスを
判定する」ということなのですね。
$ if cat /etc/password > /dev/null 2>&1;then echo "true";else echo "false";fi
false
$ if [ -z `cat /etc/password` ];then echo "true";else echo "false";fi
cat: /etc/password: No such file or directory
true
先のif(echo "abc"〜では、起動したサブシェルの終了ステータスを
判定していたということですか。なるほど。
0283名無しさん@お腹いっぱい。
2005/06/05(日) 01:11:25>どんなアホにもすぐに書き散らかすくらいのことは出来るようになるってこと
〜よりも〜が の用法が逆です。
0284名無しさん@お腹いっぱい。
2005/06/05(日) 01:21:54$ test echo
$ test ! echo
これらがなんのメッセージも出さないのはちょっと謎です。
まあどうでもいいか。
0285名無しさん@お腹いっぱい。
2005/06/05(日) 01:45:59うちの man test には以下の記述があります。
s1 True if s1 is not the null string.
なんのメッセージも出さないのは、そもそも echo が実行されないからですね。
0286名無しさん@お腹いっぱい。
2005/06/05(日) 03:13:50括弧を付けてもいいってこと。まあ普通は付けない
>>284
test echoはtest hogeと同じ
0287名無しさん@お腹いっぱい。
2005/06/05(日) 03:48:56しない例を挙げてください
0288名無しさん@お腹いっぱい。
2005/06/05(日) 04:13:410289名無しさん@お腹いっぱい。
2005/06/05(日) 13:09:110290名無しさん@お腹いっぱい。
2005/06/06(月) 22:14:470291名無しさん@お腹いっぱい。
2005/06/06(月) 22:17:070292名無しさん@お腹いっぱい。
2005/06/06(月) 22:40:070293名無しさん@お腹いっぱい。
2005/06/09(木) 23:15:07この ${1+"$@"} ってどういう意味?
0294名無しさん@お腹いっぱい。
2005/06/09(木) 23:41:09詳しい意味はUNIXプログラミング環境に書いてあった
希ガス
0295名無しさん@お腹いっぱい。
2005/06/10(金) 07:25:39${1+"$@"}と書く必要はなかったよ。
(引数ゼロ個の場合、"$@"は空文字列にならず、完全に消えてくれる)
今時、"$@"でいいんじゃないか?
逆に、${1+"$@"}と本当に書かなきゃならないshが存在するOSを
教えてくれ。
0296名無しさん@お腹いっぱい。
2005/06/10(金) 08:24:030297名無しさん@お腹いっぱい。
2005/06/10(金) 09:42:110298名無しさん@お腹いっぱい。
2005/06/10(金) 22:27:08>d
> パターンスペースを削除する。次のサイクルを開始する。
>D
> パターンスペースの最初の改行までを削除する。次のサイクルを開始するが、パターンスペースにまだデータが残っていたら、入力からの読み込みをスキップする。
0299名無しさん@お腹いっぱい。
2005/06/10(金) 22:33:39sedはsedスレへ
http://pc8.2ch.net/test/read.cgi/unix/1085730992/l50
0300名無しさん@お腹いっぱい。
2005/06/14(火) 23:20:41forで回してひとつひとつ消すと
時間はかかるけどvmstatで表示されるidが95 をキープする。
forのなかで5個ずつ消すと
時間はかからないけどidが90を切っちゃう。
時間かけず、idを高く保って、大量のファイルを削除する方法ありますきあ?
0301名無しさん@お腹いっぱい。
2005/06/14(火) 23:24:240302名無しさん@お腹いっぱい。
2005/06/14(火) 23:31:43idって何よ。priorityあるいはniceか?どっちにしてもエスパーな質問だな……
0303名無しさん@お腹いっぱい。
2005/06/14(火) 23:47:02vmstatコマンドを打つとcpuのしたにus,sy,idと表示されますよね?
idleだとおもいます。
0304名無しさん@お腹いっぱい。
2005/06/15(水) 00:16:380305名無しさん@お腹いっぱい。
2005/06/15(水) 00:24:480306名無しさん@お腹いっぱい。
2005/06/15(水) 05:12:02ファイルを削除ディレクトリに移動してディレクトリごと削除
0307名無しさん@お腹いっぱい。
2005/06/15(水) 09:32:12移動の時に同じ質問が
時間かけず、idを高く保って、大量のファイルを移動する方法ありますきあ?
0308名無しさん@お腹いっぱい。
2005/06/15(水) 10:09:42idle を増やしたいなら、ファイル消すたびに sleep 10 とかしたら?
>forのなかで5個ずつ消すと
rm file1; rm file2; ... と rm file1 file2 ... で
だいぶ違うわけだがどっちよ?
0309名無しさん@お腹いっぱい。
2005/06/15(水) 20:21:210310名無しさん@お腹いっぱい。
2005/06/16(木) 00:09:18rm file1 file2
でしょ
rm file1; rm file2;
は時間かかるぽい
0311名無しさん@お腹いっぱい。
2005/06/16(木) 06:27:49じぶんで thread で unlink するコマンドを書けば
0312名無しさん@お腹いっぱい。
2005/06/16(木) 07:42:19まぁ正解はシェルスクリプトで書くのをあきらめろってとこか。
0313名無しさん@お腹いっぱい。
2005/06/16(木) 08:04:160314名無しさん@お腹いっぱい。
2005/06/16(木) 20:58:46コマンドラインから
ls -ld /hoge/???/????? | awk "{print $9}"
と実行しますと<結果1>のように動作するのですが、
このコマンドをsh(bash)で実行すると<結果2>のように
エラーが吐かれてしまいます。
どのようにすればshで動作させることが出来るのか教えていただけないでしょうか?
<結果1>
/hoge/aaa/bbbbb
/hoge/aaa/ccccc
/hoge/ddd/eeeee
・
・
・
<結果2>
sh -xf hoge.sh
#ls -ld /hoge/???/?????
/hoge/???/?????は見つかりません。
0315名無しさん@お腹いっぱい。
2005/06/16(木) 21:15:14ルートにhogeはあるのか?
0316314
2005/06/16(木) 21:31:28ルートにhogeがあります。
補足説明しますと、
今回求めたいディレクトリは
ルート直下のhogeの中に/日付/時間と作られています。
パスの長さは一定なのでワイルドカードの[?]を用いて取得したのですが、
shに組み込むとうまくいかなかったのです。
0317名無しさん@お腹いっぱい。
2005/06/16(木) 21:49:280318名無しさん@お腹いっぱい。
2005/06/16(木) 22:26:410319名無しさん@お腹いっぱい。
2005/06/16(木) 22:30:34sh -xf しちゃ駄目だよ。
f はワイルドカード禁止オプション。
sh -x hoge.sh
でやってみろ。
あと、回答してる香具師、みんなハズシ。
0320名無しさん@お腹いっぱい。
2005/06/16(木) 22:46:140321314
2005/06/16(木) 22:56:16回答有難うございます。
只今実行できる環境ではないので報告は明日になると思います。
>-f はワイルドカード禁止オプション。
知りませんでした。。。
0322名無しさん@お腹いっぱい。
2005/06/16(木) 23:02:51ディレクトリ消すとき 必ず rm -fr するタイプ?
0323名無しさん@お腹いっぱい。
2005/06/16(木) 23:08:080324名無しさん@お腹いっぱい。
2005/06/16(木) 23:20:13美しくない。
0325名無しさん@お腹いっぱい。
2005/06/16(木) 23:31:120326名無しさん@お腹いっぱい。
2005/06/16(木) 23:34:360327314
2005/06/18(土) 03:08:00「-f」を外した所無事に出来ました。
有難うございました。
何故「-f」を付けたかというと、手元にあった書籍に書いてあったと認識してたんですけど
再度読み直してみるとそんな事は一言も書かれてませんでした。
凹みました。
>>322さん
するタイプであります・・・
0328名無しさん@お腹いっぱい。
2005/06/18(土) 20:07:42後学のために美しいやりかたを教えてくれたまえないか
0329名無しさん@お腹いっぱい。
2005/06/18(土) 20:51:30rmdir ですむときはそうしろってことじゃないの。
美しい美しくないというより、
rm -fr は危ない。
0330名無しさん@お腹いっぱい。
2005/06/18(土) 23:57:020331名無しさん@お腹いっぱい。
2005/06/19(日) 18:15:14ワイルドカードや再帰削除の場合はいちいち聞かれるとウザいので
-fつける。でもこういう危険な場合に限って-fつけるんでは、実は
あまり意味が無い気がする
二回ぐらい
rm -f *.jpg
のつもりで
rm -f *>jpg
とtypoして、カレントディレクトリの中身全削除したことある。
シフトキーの入力が甘かったりするとこうなる。
0332名無しさん@お腹いっぱい。
2005/06/19(日) 18:22:380333名無しさん@お腹いっぱい。
2005/06/19(日) 21:21:530334名無しさん@お腹いっぱい。
2005/06/20(月) 00:43:47touch ./-i
やってみたが、目からウロコ
0335名無しさん@お腹いっぱい。
2005/06/20(月) 08:16:330336名無しさん@お腹いっぱい。
2005/06/20(月) 18:23:18もしよろしければ、何か手がかりをください。
0337名無しさん@お腹いっぱい。
2005/06/20(月) 19:12:390338名無しさん@お腹いっぱい。
2005/06/20(月) 19:13:00まず、「日付の入ったフォルダ名」の名称自体を得るには、
dateコマンドに適当なスイッチをつければよい。厳密には
環境依存だからmanせよ。
つぎに、あるコマンド(例えばdate)の結果(標準出力)を
変数に入れたり、もしくは他のコマンドで利用するには、
backquoteを使う。
value=`...`
とか、
mkdir `....`
ね。これで、目的の名前のフォルダできるだろ。
あとは、適当に移動(mv)せよ。
0339名無しさん@お腹いっぱい。
2005/06/20(月) 19:32:17ありがとうございます。
0340名無しさん@お腹いっぱい。
2005/06/20(月) 19:32:38> m9(^Д^)プギャーーーッ
笑わないでください。
0341名無しさん@お腹いっぱい。
2005/06/20(月) 20:17:47チェックするにはどのようなすればよいでしょうか?
rshとかtestでがんばってたんですが、挫折しました・・・
0342名無しさん@お腹いっぱい。
2005/06/20(月) 20:32:04ssh HOST test -d DIR
0343名無しさん@お腹いっぱい。
2005/06/20(月) 20:32:36ssh 使え。
ssh foo test /foo
echo $?
■ このスレッドは過去ログ倉庫に格納されています