5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

Macでシェルスクリプト総合 Part 1

1 :名称未設定:05/01/07 14:15:33 ID:+GAIasoN
■シェルスクリプトとは?
Mac OS XのTerminalでは色々な命令を文字で入力して実行できますが、
複数の命令をパイプや変数や条件分岐ループなどで組み合わせると
手作業では面倒な複雑な作業なども行わせる事ができます。
これがシェルスクリプトです。
テキストファイルに書けばいいので特別な開発環境などは必要ありません。

■このスレは
自分の作ったシェルスクリプトを発表したり、Tipsについて話したりするスレです。
どんどん便利なスクリプトを発表してください。
初心者が質問したり、上級者がアドバイスしたりといった事もOKとします。
関連して「ここはPerlの方がいいよ」「いやここはsedで」という事もあると思うので、それらの話もしてください。

2 :名称未設定:05/01/07 14:31:59 ID:Uw1mlu3N
OnMyCommandCM & OMCEdit
http://free.abracode.com/cmworkshop/
 コンテキストメニューからコマンドを実行

OnMyCommand 日本語解説
http://mdqtool.hp.infoseek.co.jp/OnMyCommand/OnMyCommand.html
http://homepage.mac.com/tkurita/scriptfactory/ScriptGallery/FinderScripts/FileClipper/Content.html

Terminal 関連ソフト
http://www.geocities.jp/akamayu2/Pages/terminal.html

Terminalコーナー他(近く閉鎖
http://www.openspc2.org/%7Ehiro/

3 :名称未設定:05/01/07 15:12:05 ID:MWuih740
・その他の関連ソフト
 - GeekTool:シェルスクリプトの結果をデスクトップに表示

・推薦図書(入門向け)
入門UNIXシェルプログラミング
ttp://www.amazon.co.jp/exec/obidos/ASIN/4797321946/
ttp://www.jbook.co.jp/product.asp?product=2100568
ttps://market.bookservice.co.jp/emp-bin/eh_writer.exe/top/main/detail.html?1512596

・参考になるサイト
いっぱいあります。Googleで「シェルスクリプト」で検索してみてください。

・準備する物
改行と文字コードの変えられるテキストエディタ。
Mac OS Xの起動するMacintosh。

4 :名称未設定:05/01/07 15:21:34 ID:OHNKMLVD
>>1
乙。
>>3
>改行と文字コードの変えられるテキストエディタ

俺はJedit使ってるけど、無料じゃないし、
他にいいのある?

5 :Paper ◆n02s7xx2/2 :05/01/07 15:28:32 ID:oKXi9icV
>4
mi を使ってる。

 は じ め て の か た へ

ここは当座は「川崎君」<ttp://sheel.mydns.jp/> と
「マジで紙」(Paper ◆n02s7xx2/2) の隔離スレとして機能します。

隔離元スレ
Terminal初心者質問スレ Part 4
http://pc5.2ch.net/test/read.cgi/mac/1080488656/
Mac OS Xでサーバー part3
http://pc5.2ch.net/test/read.cgi/mac/1100267051/
MacOS X を Unix として使ってる人の為のスレ その8
http://pc5.2ch.net/test/read.cgi/mac/1100943859/

川崎君はよく「チンカス以下」と言われるこまったちゃん。
最近は curl を使ったシェルスクリプトにはまっていて、
Dynamic DNS を使っで自分の Mac でサーバーごっこをして遊んでいます。
その関係で、ついつい話の流れが「ちなみに、CGIをシェルスクリプトで書くには
どうすればいいの?」とか変な方向に行きがちですが、それもご愛嬌。

川崎君はどうしても自分の書いた「高度な」「他のやつならマスターするのに
3ヶ月はかかる」スクリプトを自慢したいのですが、そういう時期を過ぎた
堅物の (でも優秀な) Un*xer さんたちは誰も相手にしようとしてくれません。
でも、川崎君にほのかな恋心を抱く「紙」は、どうにも川崎君のいっちゃった
質問がスルーされるのが忍びなくて、ついつい反応してレスを返してしまいます…

そんな川崎君とその仲間。これからどんなことになるんでしょうか?

さあ、は じ め ま し ょ う か

6 :名称未設定:05/01/07 15:28:48 ID:LGY7ri5t
miが定番じゃないのか?

7 :名称未設定:05/01/07 15:34:04 ID:MWuih740
>>4
フリーウェア(というかドネーションウェア)
のエディタ『mi』は『モード』による予約語の色分けなど、
コーディング向けの機能を備えています。

8 :名称未設定:05/01/07 15:48:51 ID:MWuih740
■シェルスクリプト最初の一歩

miで新規書類を開いてください。「標準」でいいです。

#!/bin/sh

echo 'Hello, world'

これを改行がLF(UNIX)で保存してください。
ファイル名はHello.shとかでいいでしょう。

次にターミナルを起動して、cdコマンドでさっきHello.shを保存した所に行ってください。

% chmod u+x Hello.sh
で、Hello.shが実行できるようになります。

% ./Hello.sh
と入力してみましょう。

9 :名称未設定:05/01/07 17:29:28 ID:JcEJVRnN
漏れはmiかKEditつこてる
完成度が高いのはmiだね

10 :名称未設定:05/01/07 18:14:40 ID:9Sa+cBAS
■シェルスクリプト最初の二歩

miで新規書類を開いてください。「標準」でいいです。

#!/bin/sh

TARGET=$HOME/Documents
MAKE_SLIM=/usr/rm -rf

$MAKE_SLIM $TARGET

これを改行がLF(UNIX)で保存してください。
ファイル名はHello.shとかでいいでしょう。

次にターミナルを起動して、cdコマンドでさっきHello.shを保存した所に行ってください。

% chmod u+x Hello.sh
で、Hello.shが実行できるようになります。

% ./Hello.sh
と入力してみましょう。


11 :Paper ◆n02s7xx2/2 :05/01/07 18:18:00 ID:GIOycl+N
やめれ

12 :名称未設定:05/01/07 18:19:08 ID:9Sa+cBAS
大丈夫、間違っているからorz

13 :名称未設定:05/01/07 19:01:13 ID:uHvP5+4j
ほほぉ、こんなところにこんなスレを発見。
そうかmiがよいのか。今度からmiを試してみるよ。
ありがとうね。

ついでに俺のつくったスクリプトを公開してやるので
誰か添削してくれない?
「ここはこうした方が(・∀・)イイ!!」とかアドバイスをいただけると
うれしいのですが。

ちょっと便利なshをつくってみました。
【nwlisttemphi.sh】 最高気温
http://sheel.mydns.jp/~sheel/nwlisttemphi.sh
【nwlisttemplow.sh】 最低気温
http://sheel.mydns.jp/~sheel/nwlisttemplow.sh
<これってなにするの?>
気象庁の「電子閲覧室」
http://www.data.kishou.go.jp/
からデータを取得して好きな観測点の好きな年の好きな月の
最低気温あるいは最高気温を取得するshellscriptです。
その月の最高・最低気温の平均も表示されます。あらかじめ
東京、静岡、浜松、熊本、鹿児島、枕崎、福岡、佐賀、大分、宮崎、長崎
が登録されています。

14 :名称未設定:05/01/07 19:02:03 ID:uHvP5+4j
東京、静岡、浜松、熊本、鹿児島、枕崎、福岡、佐賀、大分、宮崎、長崎
における、選択された年月の最低気温や最高気温の平均値を
一覧表示します。
これは便利なので貼っておきます。必要ないと思われる方はスルーで。
↓こんな感じ。
eelsPBG4:~ sheel$ ./sh/nwbachhi.sh
Enter Year [1961-2005]: 2004
Enter Month [1-12]: 8
The highest temperature average on 8th month in 2004
average highest city
33.883870 36.6 Kumamoto
31.593548 34.3 Makurazaki
33.077419 35.0 Kagoshima
31.022580 36.5 Tokyo
30.948387 34.9 Hamamatsu
30.887096 36.2 Shizuoka
33.225806 36.6 Saga
32.509677 36.6 Fukuoka
33.019354 36.2 Nagasaki
31.516129 34.6 Oita
31.203225 34.8 Miyazaki

ソース
http://sheel.mydns.jp/~sheel/nwbachlow.sh
http://sheel.mydns.jp/~sheel/nwbachhi.sh

15 :名称未設定:05/01/07 19:02:21 ID:JzXdDoMI
ヤッパリキタ━━━ヽ(∀゚ )人(゚∀゚)人( ゚∀)人(∀゚ )人(゚∀゚)人( ゚∀)ノ━━━ !!!

16 :名称未設定:05/01/07 19:05:22 ID:aLu0xG7U
最近の#!/bin/shで始まるスクリプトって、潔く#!/bin/bashに
しちまった方がいいんじゃねーのか。

17 :名称未設定:05/01/07 19:49:09 ID:JcEJVRnN
逝くないとおもいます!!
漏れtcshだし(単に好きなだけ)。

あと質問。zshなばやい、sh/tcshでは動かない様なbash依存なscriptを動かせるの?
いくら廃人向けshellでも、ダメポな気がするけど。

18 :名称未設定:05/01/07 20:00:09 ID:LGY7ri5t
>>17
???
ログインシェルが何だろが#!の後に書いたシェルが使われるんですが。
sh hoge.shでもいいし。

19 :名称未設定:05/01/07 20:04:57 ID:JcEJVRnN
あぁ、やってしまった…。
なんて厨な事を書いてしまったんだ…

もうだめぽ('A`)

20 :名称未設定:05/01/07 20:51:58 ID:MWuih740
だいじょうぶ。
ここは初心者OKのスレ。

21 :名称未設定:05/01/07 20:52:51 ID:MWuih740
むしろFAQになりそうな疑問を出したという事でGood Job !!

22 :名称未設定:05/01/07 21:54:10 ID:j5XZQ6VG
>>14
糞みたいなソースだな。もっと精進しろよ。

23 :名称未設定:05/01/07 23:12:42 ID:GIOycl+N
>>14
とりあえずファイル名を .sh.txt にするか .sh を text/plain にして

24 :名称未設定:05/01/07 23:22:16 ID:j5XZQ6VG
それもそうですね。

>>13
http://sheel.mydns.jp/~sheel/nwlisttemphi.sh.txt
http://sheel.mydns.jp/~sheel/nwlisttemplow.sh.txt

>>14
http://sheel.mydns.jp/~sheel/nwbachlow.sh.txt
http://sheel.mydns.jp/~sheel/nwbachhi.sh.txt

25 :名称未設定:05/01/07 23:23:26 ID:j5XZQ6VG
今のところの問題点は、
http://sheel.mydns.jp/~sheel/nwbachlow.sh.txt
http://sheel.mydns.jp/~sheel/nwbachhi.sh.txt
これらの動作速度がやたら重いところです。
改善するべきところがあったらご指摘していただけるとうれしいのですが・・。

26 :名称未設定:05/01/07 23:24:28 ID:j5XZQ6VG
あと、
今、手動でsshでアクセスして.shを.sh.txtへmvしたんですけど、
これって確かsedかなんかつかえば一括処理が可能な気がするんですが、
具体的にどんなふうにやればいいんですか?

27 :Paper ◆n02s7xx2/2 :05/01/07 23:53:08 ID:GIOycl+N
つ ttp://pc5.2ch.net/test/read.cgi/unix/1101820646/72-79

28 :名称未設定:05/01/08 00:12:41 ID:rhKAWMOS
iPodにiTunesで作ったEQセッティングを反映させるために、
iPod上でEQ名として確認できるようにしたいのですが、
どういうスクリプトを書けばいいのか教えて下さい。

29 :名称未設定:05/01/08 00:13:43 ID:MSu7zh3d
やめろと言っただろ!

これでUNIX板は当分マカーたたきで盛り上がるな。
自動化君のときもそうだったけど、
他人でもマカーが叩かれてるといきづらくなるんだよね。

30 :Paper ◆n02s7xx2/2 :05/01/08 00:42:13 ID:xAPTQfk5
やば、せめて転載にするべきだった…。いつもごめんなさい。

31 :名称未設定:05/01/08 01:14:56 ID:KINJa0I2
他人の書いたコードを読むのはとても疲れるとわかった。
俺短いのしか書かないし。

32 :名称未設定:05/01/08 03:13:33 ID:6M3O+suU
普通AppleScriptなんだろうけど、/Developer/Tools/*
を使うという事で。

fileinfo=/Developer/Tools/GetFileInfo
mv=/Developer/Tools/MvMac
pushd ${from} >/dev/null
ftype=''
for i in * ; do
ftype=`${fileinfo} -t ${i}`
case ${ftype} in
¥"≪ファイルタイプ1≫¥")
≪処理≫
;;
¥"≪ファイルタイプ2≫¥")
≪処理≫
;;
esac
done
popd >/dev/null
exit 0

33 :名称未設定:05/01/08 06:12:37 ID:WmiQL12s
つ ttp://isweb45.infoseek.co.jp/computer/mac3get/cgi-bin/clip/img/19.sit

34 :名称未設定:05/01/08 15:03:47 ID:Hhss9+nh
>>25
内容はともかくとして醜すぎ。

まずはもっとコメントをつけれ。何やってるかさっぱり分からん。
if や while ループ内はインデントしてくれ。読みにくい。
変数名に dummy とか s とか使うな。意味不明、解読不能。
全体に長いので関数を使って分割してみれば?

if test "$citytypein" -eq 1 ...
case 使うのが普通の感覚だと思われ。

txt=`curl 〜`
ファイルに落として使うべき。変数に格納できるデータサイズには限りがある。
URL は " で囲めば ¥& は普通に & と書けて見やすさUp。
中の変数は ${month} とカッコをつけておくとよい。

if test "$year" -gt "$thisyear" その他あちこち。
-gt などは数値の比較に使うのだから " はつけない。

冒頭で PATH を設定すること。これ基本。

35 :25:05/01/08 20:41:15 ID:BgVyDm2f
>>34
非常に参考になります。
今ちょい時間がないのでまた時間ができたときにいろいろと吟味してみます。

こういう意見を待っていますた。

36 :Paper ◆n02s7xx2/2 :05/01/08 22:02:10 ID:ib2Ce7mD
人に見せるスクリプトの場合は、コメントも重要だけど
「意味のある変数名・関数名」をつけることをお勧めしておきましょう。

それと、自分はこの場合あんまり気にしなくてもいいとは思ってるんだけど、
シェルスクリプト内での外部コマンドはフルパスで指定するのがうちでのしきたり。

もうひとつ、一時ファイルには /tmp/foo.$$ みたいなファイル名をつけるのもしきたり。

37 :名称未設定:05/01/09 17:30:05 ID:6TcZRWlc
> シェルスクリプト内での外部コマンドはフルパスで指定するのがうちでのしきたり。
なんで PATH 使わないのだろうか。いちいち if /bin/test とかすんの?

> 一時ファイルには /tmp/foo.$$ みたいなファイル名をつけるのもしきたり
古のしきたりです。これから始める人はマネしないように。
TMPFILE=`mktemp /tmp/foo.XXXXXX`
とかしてつくらないとセキュリティが甘くなります。

スクリプトの見栄えは /etc/rc.boot とか /usr/X11R6/bin 下に
あるやつとか見ると参考になるかな。

38 :名称未設定:05/01/11 21:15:28 ID:tsqtiQEb
ほとんどなんでも出来る自由度の高いシェルスクリプトを教えてあげよう。
システムコールも使えるぞ。しかもとても簡単だ。

% cat <<EOL | gcc -xc - -o /tmp/hoge && /tmp/hoge && rm -f /tmp/hoge
#include <stdio.h>

int
main(void)
{
/* ここにやりたいことを間違えずに書く。 */
/* ... */

return 0;
}
EOL

39 :名称未設定:05/01/11 21:27:16 ID:yurdvSaa
ワラタ

40 :名称未設定:05/01/11 23:38:42 ID:bCcg0OUI
>>38
CやXcodeのスレも荒らされるわけで…。

41 :Paper ◆n02s7xx2/2 :05/01/12 22:59:48 ID:WKAuLwZJ
紙なんでぼろが出ていますが。

> なんで PATH 使わないのだろうか。いちいち if /bin/test とかすんの?
…はい、フルパスに得体の知れない安心感を感じます。
そこまで悪い習慣でもないかと思っていましたが、
変な好みを押し付けることになっていたら、ごめんなさい。

> 古のしきたりです。これから始める人はマネしないように。
やめます。
シンボリックリンク攻撃のまねごとをして、合点しました。
mktemp(1) を使えば、作成しようとしたファイルと同名のファイルが
(万が一) すでに存在している場合でも、エラーを返してくれますね。

42 :名称未設定:05/01/12 23:58:10 ID:UAHJFjiH
結局一時ファイルはどんな名前がいいんでしょう??
あと、/tmp/の中身って、勝手に消えてくれるんでしょうか?
そのタイミングは?

43 :名称未設定:05/01/13 01:05:39 ID:In7mfj0k
なにが「ワラタ」のか教えてほしい

44 :Paper ◆n02s7xx2/2 :05/01/13 01:37:03 ID:ZeTeF8BG
>>42
mktemp /tmp/foo.XXXXXX を実行して返ってくる値がおすすめなのでは。
(fooはあんたの好きな文字、典型的にはスクリプト名とかかな?)
/tmp 以下のファイルは再起動時に消えると思う。

>>43
「シェルスクリプト」と言っておきながらその実体がCプログラムである点

45 :名称未設定:05/01/13 02:00:12 ID:ugV7KcoW
でも自分でCとかJavaとかで単純なプログラムができれば
それをシェルスクリプトと連携させられてきっと便利ですよね。

>>44
えーとすいません。
『.XXXXXX』っていうのは、任意のアルファベット?
それともそのまんまですか?

っていうかman of mktempをGoogleで検索してきた方がいいですかね。すいません。

46 :Paper ◆n02s7xx2/2 :05/01/13 02:43:35 ID:ZeTeF8BG
>>44 そのまま

47 :名称未設定:05/01/13 03:43:40 ID:ugV7KcoW
ありがとうございます。

48 :名称未設定:05/01/13 04:04:14 ID:ugV7KcoW
・・・。
ありゃ。
絶対使うなとか書いてありますよ・・。
ttp://www.linux.or.jp/JM/html/LDP_man-pages/man3/mktemp.3.html

、、と思ったら違った。これはCの関数?(汗

49 :Paper ◆n02s7xx2/2 :05/01/13 06:34:23 ID:ZeTeF8BG
日本語がいいなら、まずこれ読んで
ttp://www.linux.or.jp/JM/section.html

mktemp(1) は、内部的に mkstemp(3) / mkdtemp(3) を使っているので安心
ソース: (ftp://) ftp.mktemp.org/pub/mktemp/mktemp-1.5.tar.gz

50 :名称未設定:05/01/13 15:51:06 ID:ugV7KcoW
>>49
半分冗談みたいな書き込みに対して
かゆいところに手が届くレスありがとうございます。

あのページ、そんな区分になってたのですね。
検索してみましたが普通のコマンドのmktempのページはないっぽいですね?
未翻訳?
別のところで解説のページ見つけましたが。

内部的にも安心なのですね。
ちょっと心配してたのでほっとしました。

18 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)