- PR -

for文を使ったshスクリプトについてご教授お願い致します

1
投稿者投稿内容
embryo
会議室デビュー日: 2006/08/02
投稿数: 3
投稿日時: 2006-08-02 00:24
皆様始めまして、embryoと申します。
ただ今、エンジニアになるために研修中の身です。課題として出されたshスクリプトで躓いておりご教授頂けたらと思い投稿しました。

問題としては、for文を使用し、一週間の間で何日忙しいか表示させるスクリプトを作成せよ。月曜日から日曜日にかけてyes/noで入力できるようにすることという問題です。

*実行結果
月曜日は忙しいですか?¥(yes/no¥)
yes
火曜日は忙しいですか?¥(yes/no¥)
no
日曜日まで繰り返し忙しいと答えた日数を表示させます。

自分で作成したスクリプト内容
-------------------------------------------
#! /bin/sh
for i in 月 火 水 木 金 土 日
do
echo "$i曜日は忙しいですか?¥(yes/no¥)"
read
done
grep [yes] test8.sh | wc -w
--------------------------------------------
としています。

yes/noを格納する変数が足りないというのは何となく分かるのですが
どのように記述すればいいのかまったく分からないんです。
どうかよろしくお願い致します。
非武装エリア
大ベテラン
会議室デビュー日: 2004/03/03
投稿数: 202
お住まい・勤務地: 日本・たこ部屋
投稿日時: 2006-08-02 09:32
いくつかやり方が考えられますが、そのまま回答を出しては出題者の意に反するでしょうからヒントだけ...

まずyesの件数を知りたいなら
count変数を初期に0にしておいて、

read 変数

とかで変数に yesが入力された時点で
count変数を+1ずつインクリメントして処理の最後で、count変数の中を表示させれば良いでしょう。
インクリメントには、exprを
また、yesの判断にはtest([]という書式)をif文とともに使うのが一般的かな。
また、yesだった曜日を保持するには、最初に保持する変数を

格納変数=""

という形で初期化しておき、yesだった時点で

格納変数="$格納変数 $曜日の格納された変数"

という形で変数上に追加していくと良いでしょう。

ああ、あと、"yes"と"no"の文字検査ルーチンなども入れておくと出題者が喜ぶかも知れませんね。(yesやno以外の文字チェックや、大文字(YES)だったりYesまたはyだけだった時などにも対応できると良いでしょうね。
この辺りの判断には、grepとifなどを組み合わせたりcase文を使う手もあるでしょう。

では頑張ってください。


[ メッセージ編集済み 編集者: 非武装エリア 編集日時 2006-08-02 09:56 ]
コブラ
ぬし
会議室デビュー日: 2003/07/18
投稿数: 1038
お住まい・勤務地: 神奈川
投稿日時: 2006-08-02 09:42


コード:
#!/bin/sh

n=`expr 0`

for i in "Mon" "Tues" "Wednes" "Thurs" "Fri" "Satur" "Sun"
do
    echo -n "Are you busy on "$i"day(yes/no)? "
    read r

    if [ "$r" = "yes" -o "$r" = "Yes" ]; then
        n=`expr $n + 1`
    fi
done

echo
echo "You are having $n busy days!!"

embryo
会議室デビュー日: 2006/08/02
投稿数: 3
投稿日時: 2006-08-02 22:10
非武装エリアさん、コブラさん返答ありがとう御座います。
確認が遅くなって申し訳無いです、教えて頂いた内容を元に
明日作成してみようと思います。
本当にありがとうございました。
1

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