[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 2chのread.cgiへ]
Update time : 05/25 03:18 / Filesize : 212 KB / Number-of Response : 865
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

シェルスクリプト総合 その19



1 名前:シェルスクリプトライター mailto:sage [2011/12/10(土) 20:06:40.38 ]
シェルスクリプトの総合スレです。
スクリプトのお勉強・自慢・腕試しなどにどうぞ。

□お約束
・特記なき場合はBourne Shell(/bin/sh)がデフォルトです。
 bash/zsh/ksh/ashなどに依存する場合は明示しましょう。
 Linuxユーザは/bin/shの正体がbashなので特に注意。
 FreeBSDユーザは/bin/shの正体がashなので注意。
 v7 shに一番近くて、現役のshは、OpenSolaris由来のheirloom sh。
  src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/cmd/sh/
  heirloom.sourceforge.net/sh.html
・csh/tcshのシェルスクリプトは推奨されません。
 (理由は「csh-whynot」でググれ)
・UNIXにはシェルスクリプトに便利な小さなコマンドがいろいろあります。
 manや参考リンクを見ましょう。
 aproposないしはman -kでそれらしい単語による簡単な検索もできます。
・シェルスクリプトのことをシェルってゆーな
・シェルで使えるワイルドカード等は正規表現ではありません。
 正規表現の話題はスレ違い(正規表現スレへ)

□初心者へのアドバイス:
・適した道具を判断するのも頭の重要な使い方。シェルスクリプトよりも
 RubyやPerlの方が適した仕事には素直にそちらを使いましょう。
・知らないコマンドが出てきたらmanを引きましょう。
・思い通りに動かないときは、まずは sh -x でトレースしましょう。

前スレ
シェルスクリプト総合 その18
hibari.2ch.net/test/read.cgi/unix/1308195527/

次スレは >>970 で。

852 名前:名無しさん@お腹いっぱい。 [2012/05/18(金) 05:23:42.76 ]
v7shについて色々調べてるのですがどうしても関数を使用しようとすると

test.sh: syntax error at line 2: `(' unexpected

とエラーが出てきて使用できません。空白、頭にfunctionを付ける等いろいろ試してみましたがやはり変わらず・・・
UNIX version 7の頃のshには関数がないということでしょうか?

853 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/05/18(金) 05:27:04.29 ]
sage忘れました。申し訳ないです。

854 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/05/18(金) 06:51:13.40 ]
>>852
シェル関数はないよ。

代用として、シェル関数にしたい内容をシェル変数に入れて、その変数を実行する。

func='ls -l'
$func

で ls -l が実行される。引数を渡したい時は工夫して。

855 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/05/18(金) 07:00:59.45 ]
>>852 あんまり役に立たないかも知れないですが、無いと思います。
参考までに
1. Bourne Shell Tutorial
www.grymoire.com/Unix/Sh.html
The original version of the Bourne shell didn't have functions. If you wanted to perform an operation more than once, you either had to duplicate the code, or create a new shell script.

2. Linux におけるシェルの進化
www.ibm.com/developerworks/jp/linux/library/l-linux-shells/?cmp=dw&cpb=dwlin&ct=dwrss&cr=dwrss&ccy=jp&csr=012012
ただし、関数を定義する機能は欠けていました。

3. 知っている限りでは、ここが一番情報が多い
traditional Bourne shell family / history and development
www.in-ulm.de/~mascheck/bourne/
The Variants
A summary of the most important changes
? Version 7 (1979) control structures, cmd substitution, () and {}, arbitrary variable names, trap, eval, special parameter substitutions, case
? System III (1981) #, [!...], colon parameter substitution, set --
? SVR1 (1983) shift n
? SVR2 (1984) functions, built-ins: unset echo type, redirection for builtins

4. 3の下の方のSource codeにある、Nikola Vladov のマニュアルで、
man v7sh
BUGS Coexists with but doesn't understand shell functions.

5. FreeBSD Portsはよく分かりませんが、
v7sh FreeBSD
www.freebsdsoftware.org/shells/v7sh.html
functions aren't supported and command line input is not 8 bit clean

856 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/05/18(金) 15:41:41.74 ]
>>854
>>855
ありがとうございます!やっぱりなかったんですね

case文で;;を使用してもcase文抜けられないのも仕様なのかなぁ
マニュアル読んだら使用できそうではあったんですけども・・・一応使用したテストスクリプト上げておきます。
#!/usr/local/bin/v7sh
case $1 in
a)
echo "A!!"
;;
b)
echo "B!!"
;;
c|d)
echo "C or D"
;;
[e-h])
echo "E kara H"
;;
*)
echo "NANIKORE?"
;;
esac
で結果が以下のようになりました。
$ test.sh a
A!!
NANIKORE?

857 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/05/18(金) 16:34:52.98 ]
仕様じゃね?
ソースあるんだから読んで解析してくれ
読みにくいってレベルじゃないけど

858 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/05/18(金) 20:07:10.23 ]
>>856 なんででしょうね?
そのままコピペしてv7shで試しましたが、こちらでは期待通りの動作でした。
$ ./v7case.sh a
A!!
$

859 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/05/18(金) 22:31:03.13 ]
>>858
謎ですね・・・v7shなんて過去のものですから大差があるとは考えにくいですし

通常のコマンド待ち状態で ;; を打つとエラーが出ますから
case内でしか特殊な意味を持たないと思われるんですけどね・・・

860 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/05/24(木) 17:44:12.51 ]
msysgit(windows版git)付属のbashでログイン時のディレクトリをホーム以外にしたいんだけど、どうしたらいい?
例えば、$HOME/work/hogeでいつも作業するのでbash起動時にそこにいて欲しい。
$HOMEを書きかえると他にも影響があり過ぎるので別の方法教えてください。

適切なスレが見つからなかったので、誘導して。



861 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/05/24(木) 18:49:28.23 ]
etc/profileの最後にcd ~/work/hoge?

862 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/05/24(木) 20:59:36.08 ]
そんな単純なことでよかったのか...
恥ずかしいー

863 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/05/24(木) 21:28:32.29 ]
$HOME/.bash_profileの方が良いんじゃ?

864 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/05/25(金) 02:08:36.57 ]
かなり遅れましたが>>834です
-xをつけて実行してみたところ、
# bash -x secrets.sh
+ echo -n
: Invalid argument: apks.txt
+ echo -n
: Invalid argument: output.txt
secrets.sh: line 5: syntax error near unexpected toke' `do
'ecrets.sh: line 5: `do
以下のようになりました。






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<212KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef