Download this script

GeSHi © 2004-2007 Nigel McNie, 2007-2010 Benny Baumann, 2008-2009 Milian Wolff
  1. #!/bin/bash
  2.  
  3. echo "Enter the keyword:"
  4. read keyWord
  5.  
  6. declare -a keySquare
  7. declare -a plainText
  8. allCharacters="ABCDEFGHIKLMNOPQRSTUVWXYZ"
  9.  
  10. #Function to find the location of char in key-square
  11. locateInKeySquare() {
  12.         char=$1
  13.         for((j=0;j<${#keySquare[@]};j++))
  14.         do
  15.                 if [ "${keySquare[$j]}" == "$char" ]
  16.                 then
  17.                         return $j
  18.                 fi
  19.         done
  20. }
  21.  
  22. #Function to add a given character into the key-square
  23. addToKeySquare() {
  24.         char=$1
  25.        
  26.         #change character to uppercase
  27.         char=`echo $char | tr '[:lower:]' '[:upper:]'`
  28.  
  29.         #If the character is 'J', then change it to 'I'
  30.         if [ "$char" == 'J' ]
  31.         then
  32.                 char='I'
  33.         fi
  34.        
  35.         #Return if the parameter is not a character
  36.         if [ `echo $allCharacters | grep -c "$char"` -eq 0 ]
  37.         then
  38.                 return
  39.         fi
  40.        
  41.         #If the character is already present, then quit
  42.         if [ `echo ${keySquare[@]} | grep -c "$char"` -ne 0 ]
  43.         then
  44.                 return;
  45.         fi
  46.  
  47.         keySquare=( ${keySquare[@]} $char )
  48. }
  49.  
  50. #Function to print the key-square
  51. printKeySquare() {
  52.         for((i=0;i<${#keySquare[@]};i++))
  53.         do
  54.                 if [ `echo $i%5 | bc` -eq 0 ]
  55.                 then
  56.                         echo ""
  57.                 fi
  58.        
  59.                 echo -n ${keySquare[$i]}
  60.         done   
  61.         echo ""
  62. }
  63.  
  64. #Add all the characters from the keyword into the key-square
  65. for((i=1;i<=${#keyWord};i++))
  66. do
  67.         cur=`echo $keyWord | cut -c $i`
  68.         addToKeySquare $cur
  69. done
  70.  
  71. #Add the remaining characters into the key-square
  72. for((i=1;i<=${#allCharacters};i++))
  73. do
  74.         cur=`echo $allCharacters | cut -c $i`
  75.         addToKeySquare $cur
  76. done
  77.  
  78. printKeySquare
  79.  
  80. echo "Enter the plain string:"
  81. read plainTextString
  82.  
  83. tmp=""
  84.  
  85. for((i=1;i<=${#plainTextString};i++))
  86. do
  87.         char=`echo $plainTextString | cut -c $i`
  88.  
  89.         #change character to uppercase
  90.         char=`echo $char | tr '[:lower:]' '[:upper:]'`
  91.  
  92.         #If the character is 'J', then change it to 'I'
  93.         if [ "$char" == 'J' ]
  94.         then
  95.                 char='I'
  96.         fi
  97.        
  98.         #Return if the parameter is not a character
  99.         if [ `echo $allCharacters | grep -c "$char"` -eq 0 ]
  100.         then
  101.                 continue
  102.         fi
  103.        
  104.         if [ "$tmp" == "$char" ]
  105.         then
  106.                 continue
  107.         fi
  108.        
  109.         tmp="$tmp$char"
  110.        
  111.         if [ ${#tmp} -eq 2 ]
  112.         then
  113.                 plainText=( ${plainText[@]} $tmp )
  114.                 tmp=""
  115.         fi
  116. done
  117.  
  118. if [ ${#tmp} -eq 1 ]
  119. then
  120.         tmp=$tmp"X"
  121.         plainText=( ${plainText[@]} $tmp )
  122. fi
  123.  
  124. echo ${plainText[*]}
  125.  
  126. for((i=0;i<${#plainText[@]};i++))
  127. do
  128.         char1=`echo ${plainText[$i]} | cut -c 1`
  129.         char2=`echo ${plainText[$i]} | cut -c 2`
  130.        
  131.         locateInKeySquare $char1
  132.         pos1=$?
  133.        
  134.         locateInKeySquare $char2
  135.         pos2=$?
  136.        
  137.         r1=`echo "(($pos1)/5)" | bc`
  138.         c1=`echo "(($pos1)%5)" | bc`
  139.  
  140.         r2=`echo "(($pos2)/5)" | bc`
  141.         c2=`echo "(($pos2)%5)" | bc`
  142.        
  143.         #Rule 1
  144.         if [ $r1 -eq $r2 ]
  145.         then
  146.                 c1=`echo "(($c1+1)%5)" | bc`
  147.                 c2=`echo "(($c2+1)%5)" | bc`
  148.  
  149.         #Rule 2
  150.         elif [ $c1 -eq $c2 ]
  151.         then
  152.                 r1=`echo "(($r1+1)%5)" | bc`
  153.                 r2=`echo "(($r2+1)%5)" | bc`
  154.        
  155.         #Rule 3
  156.         else
  157.                 tmp=$c1
  158.                 c1=$c2
  159.                 c2=$tmp
  160.         fi
  161.  
  162.         pos1=`echo "($r1*5)+$c1" | bc`
  163.         pos2=`echo "($r2*5)+$c2" | bc`
  164.        
  165.         char1=${keySquare[$pos1]}
  166.         char2=${keySquare[$pos2]}
  167.        
  168.         echo -n $char1$char2
  169. done
  170. echo ""