#!/bin/bash echo "$1:" # $1の文字数の確認。 number="${#1}" if test $number -ne 4 ; then echo 'error!4桁ではありません' echo '4桁の数を入力してください' exit fi #cutコマンドで$1から特定の位置の文字を切り出し、nに代入する。 n1=`echo $1 | cut -c1` n2=`echo $1 | cut -c2` n3=`echo $1 | cut -c3` n4=`echo $1 | cut -c4` if test -e quiz2.txt ; then cat /dev/null >quiz2.txt fi #ここより計算に入っていく、()の取り扱いが面倒であるがここでは()のすべての組み合わせをすべて書き出し、場合分けして総当たり的に取り組んでいく↓。 for i in + - '*' do for j in + - '*' do for k in + - '*' do ans=`expr $n1 "$i" $n2 "$j" $n3 "$k" $n4` if test $ans -eq 10 ; then echo "$n1 $i $n2 $j $n3 $k $n4" >> quiz2.txt fi done done done # (ab)cdの計算 for i in + - '*' do for j in + - '*' do for k in + - '*' do ans=`expr \( $n1 "$i" $n2 \) "$j" $n3 "$k" $n4` if test $ans -eq 10 ; then echo "($n1 $i $n2) $j $n3 $k $n4" >> quiz2.txt fi done done done # (abc)dの計算 for i in + - '*' do for j in + - '*' do for k in + - '*' do ans=`expr \( $n1 "$i" $n2 "$j" $n3 \) "$k" $n4` if test $ans -eq 10 ; then echo "($n1 $i $n2 $j $n3) $k $n4" >> quiz2.txt fi done done done # a(bc)dの計算 for i in + - '*' do for j in + - '*' do for k in + - '*' do ans=`expr $n1 "$i" \( $n2 "$j" $n3 \) "$k" $n4` if test $ans -eq 10 ; then echo "$n1 $i ($n2 $j $n3) $k $n4" >> quiz2.txt fi done done done # a(bcd)の計算 for i in + - '*' do for j in + - '*' do for k in + - '*' do ans=`expr $n1 "$i" \( $n2 "$j" $n3 "$k" $n4 \)` if test $ans -eq 10 ; then echo "$n1 $i ($n2 $j $n3 $k $n4)" >> quiz2.txt fi done done done # ab(cd)の計算 for i in + - '*' do for j in + - '*' do for k in + - '*' do ans=`expr $n1 "$i" $n2 "$j" \( $n3 "$k" $n4 \)` if test $ans -eq 10 ; then echo "$n1 $i $n2 $j ($n3 $k $n4)" >> quiz2.txt fi done done done # (ab)(cd)の計算 for i in + - '*' do for j in + - '*' do for k in + - '*' do ans=`expr \( $n1 "$i" $n2 \) "$j" \( $n3 "$k" $n4 \)` if test $ans -eq 10 ; then echo "($n1 $i $n2) $j ($n3 $k $n4)" >> quiz2.txt fi done done done # ((ab)c)dの計算 for i in + - '*' do for j in + - '*' do for k in + - '*' do ans=`expr \( \( $n1 "$i" $n2 \) "$j" $n3 \) "$k" $n4` if test $ans -eq 10 ; then echo "(($n1 $i $n2) $j $n3) $k $n4" >> quiz2.txt fi done done done # (a(bc))dの計算 for i in + - '*' do for j in + - '*' do for k in + - '*' do ans=`expr \( $n1 "$i" \( $n2 "$j" $n3 \) \) "$k" $n4` if test $ans -eq 10 ; then echo "($n1 $i ($n2 $j $n3)) $k $n4" >> quiz2.txt fi done done done # a((bc)d)の計算 for i in + - '*' do for j in + - '*' do for k in + - '*' do ans=`expr $n1 "$i" \( \( $n2 "$j" $n3 \) "$k" $n4 \)` if test $ans -eq 10 ; then echo "$n1 $i (($n2 $j $n3) $k $n4)" >> quiz2.txt fi done done done # a(b(cd))の計算 for i in + - '*' do for j in + - '*' do for k in + - '*' do ans=`expr $n1 "$i" \( $n2 "$j" \( $n3 "$k" $n4 \) \)` if test $ans -eq 10 ; then echo "$n1 $i ($n2 $j ($n3 $k $n4))" >> quiz2.txt fi done done done # 最後に、10になる計算があればquiz2.txtに書き込まれているはずなので、 # ファイルのサイズは0より大きいはずで # それが条件文 test -s file です # それ以外の場合(サイズが0のとき)は計算式が存在しないと表示されます if test -s quiz2.txt ; then cat < quiz2.txt # quiz2.txtの行数をカウントして計算式が何個あるか調べます result_number=`wc -l < quiz2.txt` echo "$result_number 個の計算式が存在します。" else echo "計算結果が10になる式は存在しません。" fi