- PR -

bシェルのechoでファイルを選択したい

投稿者投稿内容
やすけ
ベテラン
会議室デビュー日: 2003/08/20
投稿数: 87
投稿日時: 2005-11-29 10:44
中村と申します。
Unix SunOS5.6,Oracle8.0.4の実行環境です。
bシェルであるディレクトリのファイルを選択できるようにechoにて表示したいのですが、cシェルでは出来たのですが、bシェルでやりたいのですが、ほとんどわからない状況です。以下にcシェルにて出来たコーディングを記述します。以下のcシェルの内容がbシェルで出来れば最高です。
set dir="/export/home/
cd $dir/
set list = `ls -l $dir`
set flist = ""
@ i = 0
foreach file($list) ←この部分から下のendまでがわかりません。
if ( -f $dir/$file ) then
set flist = ($flist $file)
@ i += 1
echo "処理番号 $i: $file"
endif
end
echo -n "処理番号を選択してください:"
set ShoriNo = $<
コブラ
ぬし
会議室デビュー日: 2003/07/18
投稿数: 1038
お住まい・勤務地: 神奈川
投稿日時: 2005-11-29 14:55
コード:
i=`expr 1`
for arg in *.dmp
do
    if [ -f $arg ]; then
        flist="$flist $arg"
        echo "処理番号 $i: $arg"
        i=`expr $i + 1`
    fi
done

echo -n "処理番号を選択してください:" 
read ShoriNo



ちょっと、実行環境が無いんで些細なエラーは修正を (プ
やすけ
ベテラン
会議室デビュー日: 2003/08/20
投稿数: 87
投稿日時: 2005-11-29 20:04
コブラさん、レス遅くなってすみません。
コブラさんのご指摘いただいたとおりにやってみましたら
出来ました。ありがとうございました。
コブラ
ぬし
会議室デビュー日: 2003/07/18
投稿数: 1038
お住まい・勤務地: 神奈川
投稿日時: 2005-11-30 05:06
>flist="$flist $arg"

結局、これは何の役にも立ってないっちゅぅこって (プ
やすけ
ベテラン
会議室デビュー日: 2003/08/20
投稿数: 87
投稿日時: 2005-11-30 09:03
コブラさん、全て役に立ちました。ありがとうございました。
flist="$flist $arg" の部分もとても役立ちました。
ありがとうございました。
コブラ
ぬし
会議室デビュー日: 2003/07/18
投稿数: 1038
お住まい・勤務地: 神奈川
投稿日時: 2005-11-30 09:59
マジで?
portulaca
会議室デビュー日: 2005/11/30
投稿数: 12
投稿日時: 2005-11-30 10:07
パイプでつないじゃう手もありますね。
これなら空白を含んだファイル名があっても大丈夫。
(その場合は flist の中身が使えなくなりますが)
------------------------------------------------------------------
#!/bin/sh
dir="/export/home/"
cd "$dir"
flist=""
i=0
ls -1 "$dir" | while read file ; do
  if [ -f "$file" ]; then
    flist="$flist $file"
    i=`expr $i + 1`
    echo "処理番号 $i: $file"
  fi
done
echo "処理番号を選択してください:¥c"
read ShoriNo
------------------------------------------------------------------
System V 系のシェルでは echo の『-n』は効きません。
代わりに末尾に『¥c』をつけます。
(『¥』は半角のバックスラッシュに置き替えてください)
あと、ksh なら『i=`expr $i + 1`』を『let i=i+1』とする手もアリ。
やすけ
ベテラン
会議室デビュー日: 2003/08/20
投稿数: 87
投稿日時: 2005-11-30 10:39
portulacaさん、レスありがとうございます。
Unix SunOS5.6でのbシェルでは\cが効いて、改行しなくなりました。
本当に助かりました。それで、Miracle Linux Standard Edition V2.0 (Styrax)で\cをつけて実行してみたのですが、改行されてしまいました。
Unixでは出来て、Linuxではできないとういうことがあるのでしょうか?
シェルは同じbシェルを使っているのですが。。。。以下にコーディングを記します。
#!/bin/sh
echo '処理番号を入力して下さい:\c';
read no
case $no in
1) /home/nkdse/A.sh;;
2) /home/nkdse/B.sh;;
3) /home/nkdse/C.sh;;
*) exit 0;;
esac
exit 0
ってこんな感じで同じことをUnix、Linuxでもやっているのですが。。。。
よろしくお願いします。

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