Diary-nagataka-シリコンバレーで働きたい!という夢への日々

外資ITで働くエンジニアが趣味や日々の事など書いてます(技術の話は別ブログ http://wanna-be-geek.seesaa.net/ )

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
  1. --/--/--(--) --:--:--|
  2. スポンサー広告
  3. このエントリーを含むはてなブックマーク

[メモ]同じbashなのに...Macでexpr useradd groupaddなどなどしたらコケたー

どうも、四月からは社会人という事で、ちょっと意識を変えて、手帳を能率手帳に変更したながたかです。

大学に入ってからこれまで五年間程手帳を使ってきて出来上がった自分の手帳選びでの必須条件は
メモ欄が充実している事
月刊表示と週間表示の両方がある事
バーチカルタイプである事
なので、以下の商品を選びました。


初めてA5サイズを買ったのですが、案外これが丁度いいサイズかなと使い始めて思っています。

今日さっそく読書メモなど1ページ近くゴソゴソ書いてました。

1年経って、仕事/プライベート共に、沢山の予定と、そしてメモの殴り書きが書かれた状態で役目を終える事を願います^^


さてさて、昨日なんですが、バイト先の製品がMacOS上で動かせるか検証するという仕事をしていました。

そのために、Linux版のインストーラスクリプトを改良していたのですが、意外な所でコケてたのでメモ。

Linux用のインストーラスクリプトを実行したら(bash)、何やらexprでmatchを用いて比較をしている箇所でsyntaxエラーが出ていたんですね。

なので、ちょっと見てみたところ、文法上特に問題はなさそう。

expr match [文字列1] [文字列2]
みたいな使い方をします。http://www.bookshelf.jp/texi/sh-utils/sh-utils-ja_5.html#SEC26

一応 CentOSで動かしてみてもやっぱり問題無し。

なのでmacのターミナル上でmanしてみたら意外な結果に

以下manの結果

NAME
expr - evaluate expression

SYNOPSIS
expr expression

DESCRIPTION
The expr utility evaluates expression and writes the result on standard
output.

All operators are separate arguments to the expr utility. Characters
special to the command interpreter must be escaped.

Operators are listed below in order of increasing precedence. Operators
with equal precedence are grouped within { } symbols.

expr1 | expr2
Returns the evaluation of expr1 if it is neither an empty string
nor zero; otherwise, returns the evaluation of expr2.

expr1 & expr2
Returns the evaluation of expr1 if neither expression evaluates
to an empty string or zero; otherwise, returns zero.

expr1 {=, >, >=, <, <=, !=} expr2
Returns the results of integer comparison if both arguments are
integers; otherwise, returns the results of string comparison
using the locale-specific collation sequence. The result of each
comparison is 1 if the specified relation is true, or 0 if the
relation is false.

expr1 {+, -} expr2
Returns the results of addition or subtraction of integer-valued
arguments.

expr1 {*, /, %} expr2
Returns the results of multiplication, integer division, or
remainder of integer-valued arguments.

expr1 : expr2
The ``:'' operator matches expr1 against expr2, which must be a
regular expression. The regular expression is anchored to the
beginning of the string with an implicit ``^''. expr expects
"basic" regular expressions, see re_format(7) for more informa-
tion on regular expressions.

If the match succeeds and the pattern contains at least one regu-
lar expression subexpression ``\(...\)'', the string correspond-
ing to ``\1'' is returned; otherwise the matching operator
returns the number of characters matched. If the match fails and
the pattern contains a regular expression subexpression the null
string is returned; otherwise 0.

Parentheses are used for grouping in the usual manner.

EXAMPLES
1. The following example adds one to the variable a.
a=`expr $a + 1`

2. The following example returns the filename portion of a pathname
stored in variable a. The // characters act to eliminate ambiguity
with the division operator.
expr //$a : '.*/\(.*\)'

3. The following example returns the number of characters in variable
a.
expr $a : '.*'

DIAGNOSTICS
The expr utility exits with one of the following values:
0 the expression is neither an empty string nor 0.
1 the expression is an empty string or 0.
2 the expression is invalid.

STANDARDS
The expr utility conforms to IEEE Std 1003.2 (``POSIX.2'').

BSD July 3, 1993


との事。
matchというキーワードは無いらしい。

ヤレヤレ、なので
len=`expr match $0 \\\/.*`

len=`expr $0 : \\\/.*`
と、コロン:を使った形に書き換えOK。

これで大丈夫と思いきや、まだエラーが出てる。

またまたexprでsyntax errorとか言ってる。

なので見てみると、今度はsubstrで文字列を切り出してる箇所でエラー。

expr substr string position length
ってな使い方をして、対象文字列stringのposition番目からlength分だけ文字列を切り出す働きをするのだけどエラー。

これも先ほど同様manして探してみると、何故か無い...

しかもこれはさっきのmatchみたく別の表現も見あたらず...検索したらこんな方法での代用を見っけた。
http://megawatt.blogdns.net/blog/194

上記を参考に
script_path=`expr substr ${script_path} 1 $len`

script_path=`echo ${script_path} | cut -b1-$len`
と変更


ただし、-bオプションはバイト数を引数にとるので、対象文字列が何なのかチェックが必要
日本語などのマルチバイト文字を扱う場合には注意が必要


う~ん、ディレクトリ構成とかでコケるかと思いきや、意外な所でコケたもんだ。

ほいで、最後にuseradd, groupaddでエラーが出た。
調べてみると、Macにはそれらのコマンドは無いとの事

http://www.osxgnu.org/software/pkgdetail.html?project_id=231&cat_id=205
上記のようにコマンドを追加するツールも配布されている模様。
やり方はココhttp://apple-tart.net/dokuwiki/doku.php?id=mac
ひとまず今回はこれは使わず、元からあるコマンドで代用する方法を探す


方法
http://blog.livedoor.jp/rotton79/archives/64928467.html
http://d.hatena.ne.jp/agw/20071028/1193629076

上記を参考に
・グループの追加
sudo dscl . -create /Groups/testGroup gid 108
※idの値に特に意味は無い
・ユーザの追加
sudo dscl . -create /Users/testUser gid 108
sudo dscl . -create /Users/testUSer name testUser testUser
sudo dscl . -create /Users/testUser passwd 'test'
sudo dscl . -create /Users/testUser uid 128

みたいな書き換えを行いエラー消滅♪

ちなみに、ユーザの削除は
sudo dscl . -delete /Users/<ユーザ名>
とすればいい。

あと、ちょっとしたトコロでは、スクリプト内でifconfigをして結果をパイプしている箇所でコケた。

何故かと思い調べてみると、Macの場合eth0はen0と表記するんですね。。

そのためeth0なんてもんは知らんってな具合のエラーが出てました。

なのでこれも修正。



ふぅ、結構疲れたぞ。。

けどまぁMacとUnixの双方を知れる良いトレーニングになり、昨日のバイトは充実してました。

まだまだ全然スキルの無い自分だけど、一歩一歩日々前進出来たらいいな。


さてさて、それではノシ


スポンサーサイト
  1. 2010/01/10(日) 01:24:20|
  2. mac
  3. | トラックバック:0
  4. | コメント:0
  5. このエントリーを含むはてなブックマーク
<<このブログの意義... | ホーム | 今年も宜しくお願い致します。>>

コメント

コメントの投稿

管理者にだけ表示を許可する

トラックバック

トラックバックURLはこちら
http://nagataka.blog50.fc2.com/tb.php/388-cdf7cb7a
この記事にトラックバックする(FC2ブログユーザー)
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。