2017-04-25 12 views
1

私はかなり新しくbashです。例えば、data.txtやdata.csvのようなファイルからcalcという名前のファイルに数値を読み込む方法を考えています。 .bash。bashでコンマで区切られた整数を使ってファイルを読む方法

私はインターフェイスが動作していますが、calc.bashに数値を読み込んで計算を行うことができます。また、私が選択した2つの数字の位置を保持する方法を知りたいと思います。

たとえば、

data.txtに1,3,4,6,10,12ENDという数字のリストがあります。 私は1と3を読んで一緒に追加しました。 どのように私は最後に離れた場所を保存するので、私は4で別の操作を行うことができます。したがって、1 + 3 = 4、4 + 4 = 8そして、 ENDを押すまでしかし、彼らがそれをすることを選択した場合のみ。

もし前の数字+ - * /を次の数字と一緒に使用しないことを選択した場合、あなたはリストの次の2つの数字に移動します。あなたが1,3で行われている場合、あなたは4,6

に移るので、これは私のCalcUI.bashこれはCalcUI.bashは

Running CalcUI: 
Enter operation to be performed (+-*/ or Q to Quit): * 
Use previous result as operand? (y/n): n 
Reset data file pointer to start of data file? (y/n):n 

Calc.bash run on Tue Apr 4 14:46:24 CDT 2017 process id 2493 
Calculated result for: 3 * 35 
Result: 105 

press <enter> to continue 
を好きに見えるものである

#!/bin/bash 
while true; do 
    read -p "Enter operation to be performed (+-/ or Q to Quit): " op 
    case $op in 
    [+] ) echo "You chose +"; echo "+" >> Inst.txt; break;; 
    [-]* ) echo "You chose -"; echo "-" >> Inst.txt; break;; 
    [*] ) echo "You chose *"; echo "*" >> Inst.txt; break;; 
    [/]* ) echo "You chose /"; echo "/" >> Inst.txt; break;; 
    [Qq]*) exit;; 
    * ) echo "Please answer using the following +-/ or Q to Quit";; 
    esac 
done 
while true; do 
    read -p "Use previous result as operand?(y/n): " pr 
    case $pr in 
    [Yy] ) echo "You chose y";echo "y" >> Inst.txt; break;; 
    [Nn]*) echo "You chose n";echo "n" >> Inst.txt; break;; 
    * ) echo " Please answer using y or n";; 
    esac 
done 
while true; do 
    read -p "Reset data file pointer to start of data file?(y/n) " reset 
case $reset in 
    [Yy] ) echo "You chose y"; break;; 
    [Nn]*) echo "You chose n"; break;; 
    * ) echo "Enter y or n";; 
    esac 
done 
exec ./Calc.bash & 

次のようになります

calc.bashdata.txtcalc.bashcalcUI.bashで通信する方法がわかりません。

+0

のように見て、あなたがこれまでにしようとしているものを、SOに歓迎するだろうか?あなたがしたことと、どこで立ち往生しているのかを示す簡潔な例を提供できますか? – zmo

+0

私のコードで投稿を更新しました。 – Przn

答えて

1

機能を使用します。
すべてを1つのファイルで処理すると、何が起きているのかが分かりやすくなります。
後で別のファイルにユーティリティを作成し、source thatfileに呼び出し元で環境設定を使用することができます。
ほとんどの場合、私はechoを使って結果を返します(my_functionmy_result=$(my_function)と呼んでいます)。これは、コンソールに何か他のものを書き込むと失敗します。グローバル変数を使用することができます。

,を改行(trを使用)に置き換えることで、整数をフィールドとして読み取ることができます。
ソリューションは、ハロー

function get_operator { 
    while true; do  
    read -p "Enter operation to be performed (+-/ or Q to Quit): " op 
    case $op in              
     [+]) echo "You chose +";break;;        
     [-]) echo "You chose -";break;;        
     [*]) echo "You chose \*, (not supported yet) try again";;  
     [/]) echo "You chose /";break;;        
     [Qq])exit;;             
     *) echo "Please answer using the following +-/ or Q to Quit";; 
     esac                
exit 
    done 
} 

function get_next_operator { 
    while true; do 
     read -p "Use previous result as operand?(y/n): " pr 
     case $pr in 
     [Yy]) break;; 
     [Nn]) echo "You chose n";get_operator; break;; 
     *) echo " Please answer using y or n";; 
     esac 
    done 
} 

unset first_integer 
unset op 
for k in $(echo "2,4,6,8,9" | tr ',' '\n'); do 
    echo "Next integer = $k" 
    if [ -z "${first_integer}" ]; then 
     first_integer=$k 
     continue 
    fi 
    if [ -z "${op}" ]; then 
     get_operator 
    else 
     get_next_operator 
    fi 
    printf "%s %s %s = " "${first_integer}" "${op}" "${k}" 
    ((first_integer = first_integer $op k)) 
    printf "%s\n" "${first_integer}" 
done 
関連する問題