#!/bin/bash #入力された数字の桁数を引数nameに渡します。 name=`expr length $1` #そのnameの桁数によってこのままシェルを続けるのか終わらせるのか判断させます。 echo "桁数 $name" if test $name -ne 4 ; then echo '4桁の数字で入力してください。' exit 1 fi #入力された4桁の数字を4つに分離します。 #cutコマンドを用いて変数の値の何文字めかを取り出します。 #つまりcut -cでは1文字目を取り出すという意味である。 one=`echo $1 | cut -c1` two=`echo $1 | cut -c2` three=`echo $1 | cut -c3` four=`echo $1 | cut -c4` echo "$one,$two,$three,$fourでテンパズルを組みます。" #結果を導くquiz2.txtというファイルが存在していれば中身を白紙に戻します。 if [ -e quiz2.txt ]; then echo "ファイルを上書きします。" cat /dev/null >quiz2.txt fi #演算を11回繰り返します。 # forコマンドを用いてi,j,kに、+,-,*を考えられる組み合わせ全て代入していきます #1.one two three four for i in + - '*' do for j in + - '*' do for k in + - '*' do answer=$(( $one $i $two $j $three $k $four )) if test $answer -eq 10 ; then echo "$one $i $two $j $three $k $four" >>quiz2.txt fi done done done # 2.(one two ) three four for i in + - '*' do for j in + - '*' do for k in + - '*' do answer=$(( ($one $i $two) $j $three $k $four )) if test $answer -eq 10 ; then echo "($one $i $two) $j $three $k $four" >>quiz2.txt fi done done done #3.one (two three) four for i in + - '*' do for j in + - '*' do for k in + - '*' do answer=$(( $one $i ($two $j $three) $k $four )) if test $answer -eq 10 ; then echo "$one $i ($two $j $three) $k $four" >>quiz2.txt fi done done done #4.one two (three four) for i in + - '*' do for j in + - '*' do for k in + - '*' do answer=$(( $one $i $two $j ($three $k $four) )) if test $answer -eq 10 ; then echo "$one $i $two $j ($three $k $four)" >>quiz2.txt fi done done done #5.(one two three) four for i in + - '*' do for j in + - '*' do for k in + - '*' do answer=$(( ($one $i $two $j $three) $k $four )) if test $answer -eq 10 ; then echo "($one $i $two $j $three) $k $four" >>quiz2.txt fi done done done #6.one (two three four) for i in + - '*' do for j in + - '*' do for k in + - '*' do answer=$(( $one $i ($two $j $three $k $four) )) if test $answer -eq 10 ; then echo "$one $i ($two $j $three $k $four)" >>quiz2.txt fi done done done #7.((one two) three) four for i in + - '*' do for j in + - '*' do for k in + - '*' do answer=$(( (($one $i $two) $j $three) $k $four )) if test $answer -eq 10 ; then echo "(($one $i $two) $j $three) $k $four" >>quiz2.txt fi done done done #8.(one (two three)) four for i in + - '*' do for j in + - '*' do for k in + - '*' do answer=$(( ($one $i ($two $j $three)) $k $four )) if test $answer -eq 10 ; then echo "($one $i ($two $j $three)) $k $four" >>quiz2.txt fi done done done #9.one ((two three) four) for i in + - '*' do for j in + - '*' do for k in + - '*' do answer=$(( $one $i (($two $j $three) $k $four) )) if test $answer -eq 10 ; then echo "$one $i (($two $j $three) $k $four)" >>quiz2.txt fi done done done #10.one (two (three four)) for i in + - '*' do for j in + - '*' do for k in + - '*' do answer=$(( $one $i ($two $j ($three $k $four)) )) if test $answer -eq 10 ; then echo "$one $i ($two $j ($three $k $four))" >>quiz2.txt fi done done done #11.(one two) (three four) for i in + - '*' do for j in + - '*' do for k in + - '*' do answer=$(( ($one $i $two) $j ($three $k $four) )) if test $answer -eq 10 ; then echo "($one $i $two) $j ($three $k $four)" >>quiz2.txt fi done done done #10を作る式を作れなかったならば その意の文章を表示させます。 #10が作れたらcatでそれを表示させます。 if test -s quiz2.txt ; then cat quiz2.txt else echo "この4桁の数字では10を作れません。" fi