#!/bin/bash if test -f quiz2.txt then rm quiz2.txt fi #quiz2.txtが既にあれば削除する echo $1 echo $1 >> quiz2.txt #引数として渡した数字を標準出力とquiz2.txtに書き出す digits="${#1}" #引数の文字数を与える if test $digits -ne 4 ; then echo 'The number must be four-digits.' echo 'Please input again.' exit fi #文字数が4ではないときにその旨を出力し、再度入力を促す #if test $1 -ge 10000 # then echo 'The number must be four-digits.' #elif test $1 -le 999 #then echo 'The number must be four-digits.' #fi #引数の数字が999<$1<10000とすれば4桁ではない場合にerrorを表示すると思ったが、 #「0001」などの場合にもerrorと認識してしまうため間違ったシェルスクリプトである #正しくは上記の文字数に着目した考え方が正確である a=`expr $1 / 1000` #引数の先頭の数字をaとして与える b1=`expr $1 / 100` b2=`expr $(($a * 10))` b=`expr $b1 - $b2` #引数の2番目の数字をbとして与える c1=`expr $1 / 10` c2=`expr $(($a * 100))` c3=`expr $(($b * 10))` c4=`expr $c2 + $c3` c=`expr $c1 - $c4` #引数の3番目の数字をcとして与える d1=`expr $(($a * 1000))` d2=`expr $(($b * 100))` d3=`expr $(($c * 10))` d4=`expr $d1 + $d2 + $d3` d=`expr $1 - $d4` #引数の4番目の数字をdとして与える for x in + - '*' do for y in + - '*' do for z in + - '*' do F1="$a "$x" $b "$y" $c "$z" $d" F2="($a "$x" $b) "$y" $c "$z" $d" F3="$a "$x" ($b "$y" $c) "$z" $d" F4="$a "$x" $b "$y" ($c "$z" $d)" F5="($a "$x" $b "$y" $c) "$z" $d" F6="$a "$x" ($b "$y" $c "$z" $d)" F7="($a "$x" $b) "$y" ($c "$z" $d)" F8="($a "$x" ($b "$y" $c)) "$z" $d" F9="(($a "$x" $b) "$y" $c) "$z" $d" F10="$a "$x" (($b "$y" $c) "$z" $d)" F11="$a "$x" ($b "$y" ($c "$z" $d))" for formula in "$F1" "$F2" "$F3" "$F4" "$F5" "$F6" "$F7" "$F8" "$F9" "$F10" "$F11" #括弧の付け方を考えると式は11通りなので、それぞれの式をF1~F11と置く #11通りの式にx,y,zで与えた3つの演算子「+,-,*」を順番に入れてその計算式をformulaと与える do ans=`expr $(($formula))` if test $ans -eq 10 ; then echo "$formula" echo "$formula" >> quiz2.txt fi #formulaで与えた式を計算した値をansと与える #ansと10が等しい場合はそのときに用いた計算式formulaを標準出力とquiz2.txtに書き出す done done done done line=`cat quiz2.txt | wc -l` #quiz2.txtの中身の行数を与える line_number=`expr $line - 1` #行数から1を引いた数を式の個数として与える(引数も書き込んでいるためその分の行数が余分) if test $line_number -eq 0 then echo "can't make 10" elif test $line_number -eq 1 then echo 'There is only method.' >> quiz2.txt else echo "There are $line_number methods." >> quiz2.txt fi #式の個数が0の場合はその旨を標準出力に表示 #式の個数が1、またはそれ以上の場合はそれぞれその旨をquiz2.txtに書き込む