- PR -

シェルスクリプト内での変数設定について

1
投稿者投稿内容
むー
常連さん
会議室デビュー日: 2002/11/29
投稿数: 42
投稿日時: 2003-06-02 18:24
お世話になっております。むーでございます。

度々シェルスクリプトについて質問させていただきます。
以下のawk文が完全に解読できませんでした。。。
---------------------------------------------
awk -F'#' '{print $1}' /tmp/aaa.txt |\
while read line
do
parm=${line%%:*}

case $parm in
("mailto")
MAILTO=${line##mailto:}
;;
("maxfilesize")
MAXFSIZE=${line##maxfilesize:}
;;
("debug")
DEBUG=${line##debug:}
;;
("*")
;;
esac
done
---------------------------------------------

なお、/tmp/aaa.txtファイルには
------------------------
mailto:muh@xyz.com #mail address
maxfilesize:15000000
debug:1
------------------------
と書いてあります。

おそらく、awkによって
「/tmp/aaa.txtファイルを1行ずつ読み取り、そのうち
 1カラム目("#"を区切り文字として)をline変数にセット」
しているものと思うのですが、その後で各行をparm変数にセット
している場所があります。
ここで具体的にどういうことをしているのか、が分からないため
MAILTO変数などにセットされる値がわかりません。

こちらについてご指導いただけますでしょうか。
よろしくお願いします!
raccoon
ベテラン
会議室デビュー日: 2002/12/18
投稿数: 58
投稿日時: 2003-06-02 19:45
ども。raccoonです。

${AAA%%BBB}や${CCC##DDD}はKシェル独特の書き方です。
BシェルやCシェルではできません(OSによってはできちゃうかも知れませんが)。
「パラメタの置換」などと呼ばれる機能で,パラメタの一部を削除してくれます。
詳しくは

man ksh

を見れば説明があります。

# のはず。OSによってはmanにちゃんと書いてないこともあるらしいけど・・・

むー
常連さん
会議室デビュー日: 2002/11/29
投稿数: 42
投稿日時: 2003-06-03 10:10
raccoonさん、
いつも早々たるご回答、加えてわかりやすいご回答をくださいまして
本当にありがとうございます!

だからSolaris上で且つBシェルの場合にこの部分がエラーになるんですね〜。
もはや感動の域に達しています(大げさじゃなくデス)!

最後に。
私の投稿を見ていただいている皆さん、
幾度もSolarisの話をしてしまい申し訳ありません。
この場をお借りしてお詫びいたします。
1

スキルアップ/キャリアアップ(JOB@IT)