linux的shell编程

Java_OneByte 2010-10-31 10:37:05
1. 编写一个脚本,实现:对输入的正整数,输出小于该数的所有素数

2. 编写一个脚本,实现:对输入的路径,统计该路径下一级子目录、普通文件、符号链接文件、其他文件的个数

3. 编写一个脚本,对输入的参数进行分析,如果参数中含有
(1) 目录名(路径),则显示该目录(路径)下的文件的详细信息
(2) 普通文件名, 则显示该文件内容
(3) 字符串 telnet, sshd, 则启动对应服务
(4) 如果不是上述3种情况,输出提示信息”wrong input!”

4. 通过搜索字符串函数,实现对系统变量PATH的分解,将其中每个路径提取出来,置入一个数组中,然后逐个输出。
怎么做
...全文
190 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaocai0001 2010-11-01
  • 打赏
  • 举报
回复
第一题真要用Shell去做, 那是自残+脑残
Java_OneByte 2010-11-01
  • 打赏
  • 举报
回复
都自己硬着头皮做出来了。
justkk 2010-11-01
  • 打赏
  • 举报
回复
第4题
awk 'BEGIN{split(ENVIRON["PATH"], a, ":"); for (i in a) print a[i]}'
Linux-Torvalds 2010-11-01
  • 打赏
  • 举报
回复
既然是作业,就要给代码了。
参照#6的做法,可以做到的。
freetstar 2010-11-01
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 steptodream 的回复:]

第一题求素数 如果一直除到比目标数小的那个数的话 数字稍微一大 慢的像蜗牛 shell计算本来就慢
我觉得这样会好一点
C/C++ code

#!/bin/sh
for((i=2;i<=$1;i++))
do
flag=0
sqrt=$(echo "sqrt($i)" | bc)
for ((j=2;j<=$sqrt;j++))
do
……
[/Quote]
这个就是传说中的先求开方的经典求素数方法啊
steptodream 2010-11-01
  • 打赏
  • 举报
回复
第一题求素数 如果一直除到比目标数小的那个数的话 数字稍微一大 慢的像蜗牛 shell计算本来就慢
我觉得这样会好一点

#!/bin/sh
for((i=2;i<=$1;i++))
do
flag=0
sqrt=$(echo "sqrt($i)" | bc)
for ((j=2;j<=$sqrt;j++))
do
if [ $(($i%$j)) -eq 0 ]
then
flag=1
break
fi
done
[ $flag -eq 0 ] && echo $i
done
sinpoal 2010-11-01
  • 打赏
  • 举报
回复

#question 1
#! /bin/bash
read -p "Input a number:" num
while [ $num -gt 0 ]; do
i=2
while [ $i -le $num ]; do
if [ $(($num%$i)) -eq 0 ]; then
break
fi
i=$(($i+1))
if [ $i -eq $(($num -1)) ]; then
echo $num
fi
done
num=$(($num-1))
done

#question 2
可用grep 匹配出满足条件的行再用 wc -l 进行统计
#question 3
if [ -d $value ]; then
ls...
elif [ -f $value ]; then
cat /more /less /expand $value...
else
echo "warning !"
fi
#question 4
echo $PATH | awk -F ":" '{print}'
用for 和数组实现!

####以上只是思路! 楼主可以自己试试~
xiaocai0001 2010-11-01
  • 打赏
  • 举报
回复
无聊给个Python版本的

#!/bin/bash

read -p "Input a number:" num

if [ -z "$num" ] ; then
exit
fi

if [[ "$num" -lt 2 ]] ; then
exit
fi

if [[ "$num" -ge 2 ]] ; then
echo 2
fi

# greate than 2 , do it in python
cat << EOF | python -
import math

def isPrimer(number):
check_start = 3
check_end = int(math.sqrt(number))
for i in xrange(3, check_end+1, 2):
if number % i == 0:
return False
return True

end = $num
start = 3
for i in xrange(start, end+1, 2):
if isPrimer(i):
print i
EOF

weifirst118 2010-11-01
  • 打赏
  • 举报
回复
先做做,遇到问题再来问。
louyong0571 2010-11-01
  • 打赏
  • 举报
回复
课程的作业么,总要自己做点点的吧
steptodream 2010-11-01
  • 打赏
  • 举报
回复
最近好几个同班的问问题都问到这里来了
  • 打赏
  • 举报
回复
汗,都来做作业的··
xiaocai0001 2010-11-01
  • 打赏
  • 举报
回复
显然的

所以说是脑残+自残...

教学用例, 试个1000以下的数字, 以说明Shell无所不能.. 哈哈
steptodream 2010-11-01
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 xiaocai0001 的回复:]

6,7楼, 略过2, 只对奇数算, 还可以省一半时间.
[/Quote]
即使省一半 数字变大之后 时间也会相当大
赶不上perl 更远远赶不上c呀
xiaocai0001 2010-11-01
  • 打赏
  • 举报
回复
6,7楼, 略过2, 只对奇数算, 还可以省一半时间.
steptodream 2010-11-01
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 xiaocai0001 的回复:]

第一题真要用Shell去做, 那是自残+脑残
[/Quote]
确实是这样 shell做计算太慢了 我测试了一下 在我这个机器上
目标数5000 看看差别吧!

6楼的shell脚本(除数不开平方) 27分1.908秒 (结果里缺少2 3)
7楼的shell脚本(除数开平方) 1分34.114秒
perl脚本 (除数开平方) 0.186秒
c语言(除数开平方) 0.011秒

不会python脚本 所以没测试
从结果看 如果目标数字逐渐变大 用shell脚本就是灾难!
freetstar 2010-10-31
  • 打赏
  • 举报
回复
汗...lz连搜索都懒得搜索...这几个问题已经有人问了,你和那个同学是1个班的吧
masmaster 2010-10-31
  • 打赏
  • 举报
回复
homework? looking! ^_^

23,117

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧