新手求助,怎样通过shell scripts用*绘制圆形

sh/bash/dash/ksh/zsh等Shell脚本
回复
头像
yetone
帖子: 7
注册时间: 2011-01-27 20:30

新手求助,怎样通过shell scripts用*绘制圆形

#1

帖子 yetone » 2011-10-14 22:08

本人小白,这几天准备学习一下shell scripts,无意间弄了个C语言的绘圆程序,看似简单,随即想通过shell scripts来移植一下,顺便练练手,但是屡试屡败,望高手赐教,感激不尽
C程序源码:

代码: 全选

#include<stdio.h>  
#include<math.h>  
int main()  
{  
        double y;  
        int x,m;  
        for(y=10;y>=-10;y--)  
        {  
                m=2.5*sqrt(100-y*y); /*计算行y对应的列坐标m,2.5是屏幕纵横比调节系数因为屏幕的 
行距大于列距,不进行调节显示出来的将是椭圆*/  
                for(x=1;x<30-m;x++)  
                        printf(" "); /*图形左侧空白控制*/  
  
                printf("*"); /*圆的左侧*/  
  
                for(;x<30+m;x++)  
                        printf(" "); /*图形的空心部分控制*/  
  
                printf("*\n"); /*圆的右侧*/  
        }  
        return 0;  
}
鄙人移植的shell scripts:

代码: 全选

#!/bin/bash
for ((y=10;y>=-10;y=y-1))
do
	m=$(printf "%.f" $(echo "2.5*sqrt(100-$y*$y)"|bc))
	for ((x=1;x<30-$m;x=x+1))
	do
		printf " "
	done
	printf "*"
	for ((;x<30+$m;x=x+1))
	do
		printf " "
	done
	printf "*\n"
done
执行后出现:

代码: 全选

(standard_in) 1: parse error

代码: 全选

Linux,Freebsd,Solaris,Sco,HP-UX,IBM-AIX,cisco,oracle,java,cgi,mysql,perl,Apache,proFTP,Sendmail,Qmail,DNS,Squid,Rsync,SSL
头像
lilydjwg
论坛版主
帖子: 4249
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: 新手求助,怎样通过shell scripts用*绘制圆形

#2

帖子 lilydjwg » 2011-10-14 22:36

shell 不是用来做计算的。
fnan
帖子: 919
注册时间: 2009-07-01 22:04

Re: 新手求助,怎样通过shell scripts用*绘制圆形

#3

帖子 fnan » 2011-10-15 7:50

#练习而已,一般计算也行。
m=$(printf "%.f" $(echo "2.5*sqrt(100-($y*$y))"|bc))
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
头像
yetone
帖子: 7
注册时间: 2011-01-27 20:30

Re: 新手求助,怎样通过shell scripts用*绘制圆形

#4

帖子 yetone » 2011-10-15 10:32

fnan 写了:#练习而已,一般计算也行。
m=$(printf "%.f" $(echo "2.5*sqrt(100-($y*$y))"|bc))
Thanks,shell的确是诡异啊

代码: 全选

Linux,Freebsd,Solaris,Sco,HP-UX,IBM-AIX,cisco,oracle,java,cgi,mysql,perl,Apache,proFTP,Sendmail,Qmail,DNS,Squid,Rsync,SSL
头像
yetone
帖子: 7
注册时间: 2011-01-27 20:30

Re: 新手求助,怎样通过shell scripts用*绘制圆形

#5

帖子 yetone » 2011-10-15 14:24

fnan 写了:#练习而已,一般计算也行。
m=$(printf "%.f" $(echo "2.5*sqrt(100-($y*$y))"|bc))
谢谢你,你可以帮我解释一下为什么要加括号吗? :em03

代码: 全选

Linux,Freebsd,Solaris,Sco,HP-UX,IBM-AIX,cisco,oracle,java,cgi,mysql,perl,Apache,proFTP,Sendmail,Qmail,DNS,Squid,Rsync,SSL
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

Re: 新手求助,怎样通过shell scripts用*绘制圆形

#6

帖子 eexpress » 2011-10-15 14:43

括号,就是获取结果。
等于一串命令的组合。可以用``代替。
shell作这事情,是傻。
● 鸣学
头像
yetone
帖子: 7
注册时间: 2011-01-27 20:30

Re: 新手求助,怎样通过shell scripts用*绘制圆形

#7

帖子 yetone » 2011-10-15 14:46

eexpress 写了:括号,就是获取结果。
等于一串命令的组合。可以用``代替。
shell作这事情,是傻。
谢谢eexpress大人的指教,sheel的确不适合计算,只是拿来练练手, :em02 嘿嘿

代码: 全选

Linux,Freebsd,Solaris,Sco,HP-UX,IBM-AIX,cisco,oracle,java,cgi,mysql,perl,Apache,proFTP,Sendmail,Qmail,DNS,Squid,Rsync,SSL
fnan
帖子: 919
注册时间: 2009-07-01 22:04

Re: 新手求助,怎样通过shell scripts用*绘制圆形

#8

帖子 fnan » 2011-10-15 20:43

括号是提取结果,这里有个关键问题:
$(echo "2.5*sqrt(100-($y*$y))"|bc))
#100-$y*$y 并不是数学表达式,而是echo的参数,*只是普通字符,!无优先级别! 不加括号的话,echo如实变量扩展为:100--10*-10,传给bc就是格式错误,所以也可以这样:
$(echo "2.5*sqrt($((100-$y*$y)))"|bc))
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
头像
ChenFengyuan
帖子: 770
注册时间: 2008-03-23 0:39

Re: 新手求助,怎样通过shell scripts用*绘制圆形

#9

帖子 ChenFengyuan » 2011-10-15 23:03

eexpress 写了:括号,就是获取结果。
等于一串命令的组合。可以用``代替。
shell作这事情,是傻。
同意,用lisp代替就好了。 :em09
fnan
帖子: 919
注册时间: 2009-07-01 22:04

Re: 新手求助,怎样通过shell scripts用*绘制圆形

#10

帖子 fnan » 2011-10-17 19:07

真认为LZ想画圈圈?
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
回复