⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 twodim.sh

📁 Shall高级编程
💻 SH
字号:
#!/bin/bash# twodim.sh: Simulating a two-dimensional array.# A one-dimensional array consists of a single row.# A two-dimensional array stores rows sequentially.Rows=5Columns=5# 5 X 5 Array.declare -a alpha     # char alpha [Rows] [Columns];                     # Unnecessary declaration. Why?load_alpha (){local rc=0local indexfor i in A B C D E F G H I J K L M N O P Q R S T U V W X Ydo     # Use different symbols if you like.  local row=`expr $rc / $Columns`  local column=`expr $rc % $Rows`  let "index = $row * $Rows + $column"  alpha[$index]=$i# alpha[$row][$column]  let "rc += 1"done  #  Simpler would be#+   declare -a alpha=( A B C D E F G H I J K L M N O P Q R S T U V W X Y )#+ but this somehow lacks the "flavor" of a two-dimensional array.}print_alpha (){local row=0local indexechowhile [ "$row" -lt "$Rows" ]   #  Print out in "row major" order:do                             #+ columns vary,                               #+ while row (outer loop) remains the same.  local column=0  echo -n "       "            #  Lines up "square" array with rotated one.    while [ "$column" -lt "$Columns" ]  do    let "index = $row * $Rows + $column"    echo -n "${alpha[index]} "  # alpha[$row][$column]    let "column += 1"  done  let "row += 1"  echodone  # The simpler equivalent is#     echo ${alpha[*]} | xargs -n $Columnsecho}filter ()     # Filter out negative array indices.{echo -n "  "  # Provides the tilt.              # Explain how.if [[ "$1" -ge 0 &&  "$1" -lt "$Rows" && "$2" -ge 0 && "$2" -lt "$Columns" ]]then    let "index = $1 * $Rows + $2"    # Now, print it rotated.    echo -n " ${alpha[index]}"    #           alpha[$row][$column]fi    }  rotate ()  #  Rotate the array 45 degrees --{          #+ "balance" it on its lower lefthand corner.local rowlocal columnfor (( row = Rows; row > -Rows; row-- ))  do       # Step through the array backwards. Why?  for (( column = 0; column < Columns; column++ ))  do    if [ "$row" -ge 0 ]    then      let "t1 = $column - $row"      let "t2 = $column"    else      let "t1 = $column"      let "t2 = $column + $row"    fi      filter $t1 $t2   # Filter out negative array indices.                     # What happens if you don't do this?  done  echo; echodone #  Array rotation inspired by examples (pp. 143-146) in#+ "Advanced C Programming on the IBM PC," by Herbert Mayer#+ (see bibliography).#  This just goes to show that much of what can be done in C#+ can also be done in shell scripting.}#--------------- Now, let the show begin. ------------#load_alpha     # Load the array.print_alpha    # Print it out.  rotate         # Rotate it 45 degrees counterclockwise.#-----------------------------------------------------#exit 0# This is a rather contrived, not to mention inelegant simulation.# Exercises:# ---------# 1)  Rewrite the array loading and printing functions#     in a more intuitive and less kludgy fashion.## 2)  Figure out how the array rotation functions work.#     Hint: think about the implications of backwards-indexing an array.## 3)  Rewrite this script to handle a non-square array,#     such as a 6 X 4 one.#     Try to minimize "distortion" when the array is rotated.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -