#!/bin/bash # 入力された数字は$1に入っているので、その文字数の確認をする count=${#1} if test $count -ne 4 ; then echo "入力された $1 は4桁の数字ではありません。" echo 'もう一度入力してください。' exit 1 fi echo "$1 ;" # cutコマンドを使って、4つの数字を1つずつ変数に代入する a=`echo $1 | cut -c1` b=`echo $1 | cut -c2` c=`echo $1 | cut -c3` d=`echo $1 | cut -c4` # すでにquiz2.txtが存在する場合は内容をクリアする if test -e quiz2.txt ; then cat /dev/null >quiz2.txt fi # 計算のやり方は # abcd (ab)cd (abc)d a(bc)d a(bcd) ab(cd) # (ab)(cd) ((ab)c)d (a(bc))d a((bc)d) a(b(cd)) の11通りあるので # それぞれforコマンドを用いて繰り返し演算を行う # そこでi,j,kの3つの演算子を代入する変数を用いる # 1:abcd for i in + - '*' do for j in + - '*' do for k in + - '*' do ans=`expr $a "$i" $b "$j" $c "$k" $d` # ifコマンドで、$ans が10ならばechoで式を表示させる if test $ans -eq 10 ; then echo "$a $i $b $j $c $k $d" >> quiz2.txt fi done done done # 2:(ab)cd for i in + - '*' do for j in + - '*' do for k in + - '*' do ans=`expr \( $a "$i" $b \) "$j" $c "$k" $d` if test $ans -eq 10 ; then echo "($a $i $b) $j $c $k $d" >> quiz2.txt fi done done done # 3:(abc)d for i in + - '*' do for j in + - '*' do for k in + - '*' do ans=`expr \( $a "$i" $b "$j" $c \) "$k" $d` if test $ans -eq 10 ; then echo "($a $i $b $j $c) $k $d" >> quiz2.txt fi done done done # 4:a(bc)d for i in + - '*' do for j in + - '*' do for k in + - '*' do ans=`expr $a "$i" \( $b "$j" $c \) "$k" $d` if test $ans -eq 10 ; then echo "$a $i ($b $j $c) $k $d" >> quiz2.txt fi done done done # 5:a(bcd) for i in + - '*' do for j in + - '*' do for k in + - '*' do ans=`expr $a "$i" \( $b "$j" $c "$k" $d \)` if test $ans -eq 10 ; then echo "$a $i ($b $j $c $k $d)" >> quiz2.txt fi done done done # 6:ab(cd) for i in + - '*' do for j in + - '*' do for k in + - '*' do ans=`expr $a "$i" $b "$j" \( $c "$k" $d \)` if test $ans -eq 10 ; then echo "$a $i $b $j ($c $k $d)" >> quiz2.txt fi done done done # 7:(ab)(cd) for i in + - '*' do for j in + - '*' do for k in + - '*' do ans=`expr \( $a "$i" $b \) "$j" \( $c "$k" $d \)` if test $ans -eq 10 ; then echo "($a $i $b) $j ($c $k $d)" >> quiz2.txt fi done done done # 8:((ab)c)d for i in + - '*' do for j in + - '*' do for k in + - '*' do ans=`expr \( \( $a "$i" $b \) "$j" $c \) "$k" $d` if test $ans -eq 10 ; then echo "(($a $i $b) $j $c) $k $d" >> quiz2.txt fi done done done # 9:(a(bc))d for i in + - '*' do for j in + - '*' do for k in + - '*' do ans=`expr \( $a "$i" \( $b "$j" $c \) \) "$k" $d` if test $ans -eq 10 ; then echo "($a $i ($b $j $c)) $k $d" >> quiz2.txt fi done done done # 10:a((bc)d) for i in + - '*' do for j in + - '*' do for k in + - '*' do ans=`expr $a "$i" \( \( $b "$j" $c \) "$k" $d \)` if test $ans -eq 10 ; then echo "$a $i (($b $j $c) $k $d)" >> quiz2.txt fi done done done # 11:a(b(cd)) for i in + - '*' do for j in + - '*' do for k in + - '*' do ans=`expr $a "$i" \( $b "$j" \( $c "$k" $d \) \)` if test $ans -eq 10 ; then echo "$a $i ($b $j ($c $k $d))" >> quiz2.txt fi done done done # 式の個数が1以上の場合、式を qui2.txt に書き込む if test -s quiz2.txt ; then cat < quiz2.txt # quiz2.txtの1行目は引数なので、行数から1引いたものを計算式の個数とする result_number=`wc -l < quiz2.txt` echo "$result_number 個の計算式が存在します。" # 式の個数が0の場合はその旨を表示する else echo "計算結果が10になる式は存在しません。" fi