#!/bin/bash echo a=? read a #a=?と表示し、aを読み込む p=`expr $a % 2` q=`expr $a % 13` #pとqをそれぞれ、aを2と13で割ったときの余りとする while [ $p = 0 ] || [ $q = 0 ] #pかqが0ならば以下の作業を繰り返す do echo "aには26と互いに素な数字を入力してください。" #"aには26と互いに素な数字を入力してください。"と表示する echo a=? read a #a=?と表示し、aを読み込む p=`expr $a % 2` q=`expr $a % 13` #pとqをそれぞれ、aを2と13で割ったときの余りとする done echo b=? read b #b=?と表示し、bを読み込む echo F=? read F #F=?と表示し、Fを読み込む i=1 while test $i -le 26 #以下の作業を、iを1から始めて26まで繰り返す do echo {a..z} > quiz2-1.2txt #aからzまでアルファベット順に横に並べる cut -d ' ' -f $i quiz2-1.2txt >> quiz2-2.2txt #スペースを区切り文字としてiフィールド目を取り出して追記し、それをquiz2-2.2txtとする i=`expr $i + 1` done x=0 while test $x -le 25 #以下の作業を、xを0から始めて25まで繰り返す do echo $x >> quiz2-3.2txt #xを表示し、それをquiz2-3.2txtとする y=$(( ($a * $x + $b) % 26 )) #yをアフィン暗号の変換式と定義する echo $y >> quiz2-4.2txt #yを表示し、それをquiz2-4.2txtとする x=`expr $x + 1` done paste -d " " quiz2-2.2txt quiz2-3.2txt quiz2-4.2txt > quiz2-5.2txt #スペースを区切り文字としてquiz2-2.2txt、quiz2-3.2txt、quiz2-4.2txtを水平方向に連結させ、それをquiz2-5.2txtとする echo $F > quiz2-6.2txt #Fを表示したものをquiz2-6.2txtとしておく j=1 k=`expr length "$F"` while test $j -le $k #kをFの文字数とし、以下の作業をjが1からkまで繰り返す do l=`cut -c$j quiz2-6.2txt` #lをquiz2-6.2txt、つまりFの左からj文字目とする m=`sed -n '/'$l'/p' quiz2-5.2txt | cut -d " " -f 2` #mをquiz2-5.2txtにおける、lを含む行の、スペースを区切り文字とした2フィールド目の数字とする n=1 while test $n -le 26 #以下の作業を、nを1から始めて26まで繰り返す do o=`sed -n ''$n'p' quiz2-5.2txt | cut -d " " -f 3` #oをquiz2-5.2txtにおける、nを含む行の、スペースを区切り文字とした3フィールド目の数字とする if [[ $m = $o ]] #mとoが同じかを判定する then sed -n ''$n'p' quiz2-5.2txt | cut -d " " -f 1 #同じならば、quiz2-5.2txtおけるn行目の、スペースを区切り文字とした1フィールド目の文字を取り出す fi >> quiz2-7.2txt #ifコマンドでの実行結果をquiz2-7.2txtとする n=`expr $n + 1` done j=`expr $j + 1` done echo `cat quiz2-7.2txt` > quiz2-8.2txt #quiz2-7.2txtを横に表示し、それをquiz2-8.2txtとする sed "s/ //g" quiz2-8.2txt #quiz2-8.2txtでスペースを削除する #else #echo "aには26と互いに素な数字を入力してください。" #fi rm *.2txt #.2txtが名前に付いたファイルを削除する #終了