#!/bin/bash #quiz2.txtファイルが存在する場合は削除する if test -e quiz2.txt; then rm quiz2.txt fi #引数を表示する echo "$1:" #引数の文字数を求める #4桁以外の場合にerror文を表示させ、再入力を促す number="${#1}" if test $number -ne 4 ; then echo 'error!4桁ではありません' echo '4桁の数を入力してください' exit fi #引数の4桁の数を1つずつに分け、それぞれをa,b,c,dとする #ただし、exprを用いて計算する場合 *の前に\(本来はバックスラッシュ)を入れる #()をもちいる場合はそれぞれの()の前に\(バックスラッシュ)を入れる a=`expr $1 / 1000` b=`expr \( $1 - $a \* 1000 \) / 100` c=`expr \( $1 - $a \* 1000 - $b \* 100 \) / 10` d=`expr \( $1 - $a \* 1000 - $b \* 100 - $c \* 10 \) / 1` #ここから実際に計算をしていく #演算子を順番にi,j,kとおき、+,-,\* を代入する #変数a,b,c,dとi,j,kを用いて式を作る #()のつけ方を考えると全部で式は11個 #各式をそれぞれ exp[0]~[10]と置く([]を付けるのは後々の都合のため) #各式に値と演算子を代入する for i in + - \* do for j in + - \* do for k in + - \* do exp[0]="$a "$i" $b "$j" $c "$k" $d" exp[1]="( $a "$i" $b ) "$j" $c "$k" $d" exp[2]="$a "$i" ( $b "$j" $c ) "$k" $d" exp[3]="$a "$i" $b "$j" ( $c "$k" $d )" exp[4]="( $a "$i" $b "$j" $c ) "$k" $d" exp[5]="$a "$i" ( $b "$j" $c "$k" $d )" exp[6]="(( $a "$i" $b ) "$j" $c ) "$k" $d" exp[7]="( $a "$i" $b ) "$j" ( $c "$k" $d )" exp[8]="( $a "$i" ( $b "$j" $c )) "$k" $d" exp[9]="$a "$i" (( $b "$j" $c ) "$k" $d )" exp[10]="$a "$i" ( $b "$j" ( $c "$k" $d ))" #全ての計算式をまとめてexpressionとおく #配列したexp[0]~[10]をexpressionに代入(簡素化のために[]が必要だった) #計算式の答えをanswerとおきanswerが10になる計算式を表示,quiz2.txtにも書き込む for expression in "${exp[@]}" do answer=`expr $(($expression))` if test $answer -eq 10 ; then echo "$expression" echo "$expression" >> quiz2.txt fi done done done done #もし$1の値で10が作れなかった場合について考慮する #10が作れたならばquiz2.txtのファイルの容量は0ではない #ファイル容量の有無をtest -sで確認する #0だった場合,作れなかったことを表示,quiz2.txtにも書き込む if test -s quiz2.txt ; then cat quiz2.txt else echo "$1:" >> quiz2.txt echo "$1 で10は作れませんでした" echo "$1 で10は作れませんでした" >> quiz2.txt fi