这是我在学习Linux Shell编程的时候偶然遇到的一个小题目,想就其中的问题和大家分享讨论一下,题目是这样的:
脚本执行时接受2-10范围内的一个整数作为输入参数,在屏幕上用+号,@号和&号画出以给定参数为边长的正方形。例如:脚本运行时输入4并回车,则在屏幕上会绘制如下的正方形:
其中2、3行的&之间有两个空格
弄明白这个逻辑之后,我用几分钟写出了它的C语言版本,代码如下
#include<stdio.h> int main() { int n,i,j; printf("input a number between 2 and 10\n"); scanf("%d",&n); if(n==2) printf("@@\n@@"); else { printf("@"); for(i=0;i<n-2;i++) { printf("+"); } printf("@\n"); for(j=0;j<n-2;j++) { printf("&"); for(i=0;i<n-2;i++) { printf(" "); } printf("&\n"); } printf("@"); for(i=0;i<n-2;i++) { printf("+"); } printf("@\n"); } return 0; }然而在写它的Shell版本时,我遇到了不少的麻烦,总结如下:
read n num=$((n-2)
if test $num = 0与其它编程语言不同的是,这个需要加test命令,而且判等符号不是双等于符号,当然这里你写双等于符号也不会出错
for((i=0;i<$num;i=i+1))运行的时候系统就提示:
#!/bin/bash read n num=$((n-2)) if test $num = 0 then echo -e "@@\n@@" else echo -e "@\c" for((i=0;i<$num;i=i+1)) do echo -e "+\c" done echo "@" for((j=0;j<$num;j=j+1)) do echo -e "&\c" for((i=0;i<$num;i=i+1)) do echo -e " \c" done echo "&" done echo -e "@\c" for((i=0;i<$num;i=i+1)) do echo -e "+\c" done echo -e "@\n" fi