- PR -

cシェル上で(さきほどcとしか入れませんでした。)

投稿者投稿内容
コブラ
ぬし
会議室デビュー日: 2003/07/18
投稿数: 1038
お住まい・勤務地: 神奈川
投稿日時: 2005-11-29 04:39
file(*.dmp)
やすけ
ベテラン
会議室デビュー日: 2003/08/20
投稿数: 87
投稿日時: 2005-11-29 08:54
コブラさん、ありがとうございます。
一緒に聞けばよかったのですが、cシェルにて実行した下記のset文はどういう意味
なのでしょうか?これを実行するとflistには何が入るのでしょうか?
bシェルに直すとどのようになるでしょうか?
set flist = ($flist $file)

皆様、ご教授よろしくお願いします。
Gio
ぬし
会議室デビュー日: 2003/11/28
投稿数: 350
お住まい・勤務地: 都内から横浜の間に少量発生中
投稿日時: 2005-11-29 09:50
やすけさんはこの会議室で質問する前に、適切な書籍を読むなりネットで検索するなりされた方がよろしいと思います。

はっきり申し上げて、Bourne-shell での記法をまったく知らないのにいちいち質問されているようにしか見えません。
やすけ
ベテラン
会議室デビュー日: 2003/08/20
投稿数: 87
投稿日時: 2005-11-29 10:49
Gioさん、ご指摘ありがとうございます。
色々ネットで調べては見たのですが、これだ!っていうのが見つからなくて。
申し訳ありません。ねっとりと、調べている時間もままならない状況だったので
ヘルプしました。Bourne-shell での記法をまったく知らないわけではないのですが
逆に参考になるような文献、URL等ありましたら
教えていただけますでしょうか?
Gio
ぬし
会議室デビュー日: 2003/11/28
投稿数: 350
お住まい・勤務地: 都内から横浜の間に少量発生中
投稿日時: 2005-11-29 21:03
確かに「Bourne シェル 入門」あたりで検索しても、有益と思われるサイトが出てきません。
私自身は man sh でほとんど済ませてきたのですが(汗)

あちこちのサイトで有益な書籍の候補としてブルース・ブリン「入門UNIXシェルプログラミング」(ソフトバンクパブリッシング刊)が挙がっていますが、私自身はこの本を読んだことがないため、推奨は控えます。
近々読んでみようと思いますが、やすけさんが内容を見て理解でき、有益と感じられたなら手元に置くのもよろしいと思います。

英語でよろしければ、以下のサイトがかなり良くまとめられていると感じました。
よろしければご覧ください。

UNIX/Linux Bourne/Bash Shell Scripting Tutorial
http://steve-parker.org/sh/test.shtml

私自身もしばらく Bourne-shell スクリプトを書いていなかったので(^.^、試しに書いてみます。
一応 Windows XP Professional 上の cygwin bash で動作は確認しましたが、pure Bourne-shell 環境がなく確認できません。この点をお断りしておきます。
(元の C-shell スクリプトに不要と思われる行もありましたが、ここでは逐語的に書き、コメントを入れてあります)

dir=/export/home/nkdse
cd $dir # これは不要。dir に相対パスを指定すると、ほとんどの場合エラーになる
list=`ls -1 $dir`
flist=""
i=0
for file in $list
do
if [ -f "$dir/$file" ]
then
flist="$flist $file"
i=`expr $i + 1`
echo "処理番号 $i: $file"
fi
done
echo "***************************************************"
echo -n "処理番号を選択してください:"
read ShoriNo

字面は非常に似ていますが、

  • if の構文(if〜then〜else〜fi。then を if と同じ行に書く場合は if〜; then とセミコロンを入れる必要があることに注意)
  • for の構文(for〜do〜done。これも if と同じく、一行で書くなら for〜; do〜; done とセミコロンで区切る)
  • 変数を含む演算(expr コマンドの使用)

あたりが C-shell と異なります。

あと、echo がシェルのビルトインコマンドではなく OS コマンド(/usr/bin/echo 等)の場合、-n オプションはシェルに依存せず同じ働きをするので心配しなくても大丈夫です。
(echo をシェルビルトインコマンドで持つシェルがあったかどうかは、記憶が定かではありません)

[ メッセージ編集済み 編集者: Gio 編集日時 2005-11-29 21:10 ]
Gio
ぬし
会議室デビュー日: 2003/11/28
投稿数: 350
お住まい・勤務地: 都内から横浜の間に少量発生中
投稿日時: 2005-11-29 21:28
一つ重要なことを思い出したので補足します。
pure Bourne-shell には配列変数がありません。

直前の投稿ではファイル名をスペースで区切った形式で flist 変数に入れていますが、この中から ShoriNo 番目のものを直接取り出す方法がないということです。

ということで改定版。
少し高度なことをしています。(シェルビルトインコマンド eval を利用)

dir=/export/home/nkdse
list=`ls -1 $dir`
i=0
for file in $list
do
if [ -f "$dir/$file" ]
then
i=`expr $i + 1`
eval filenameByIndex$i=$file
echo "処理番号 $i: $file"
fi
done
echo "***************************************************"
echo -n "処理番号を選択してください:"
read ShoriNo
eval selectedFile=\$fileNameByIndex$ShoriNo
echo $selectedFile
やすけ
ベテラン
会議室デビュー日: 2003/08/20
投稿数: 87
投稿日時: 2005-11-30 09:10
Gioさん、早速のお返事ありがとうございます。早速本屋に行って探してみます。
それと、bシェル早速試してみました。とてもわかりやすい説明でとても参考に
なりました。bシェルで出来ましたので、ご報告いたします。
コブラさんからもアドバイスを頂き、なんとかこうにかできました。
皆様、ありがとうございました。この場をお借りしてお礼申し上げます。

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