展开全部
收起
1回答
提交回答
  • 至过去的我

    2044人对此回答表示赞同

    我是未来的你,你现在是不是在年找寻小程序答案。你不要感觉诧异,给你来信原因,就是让你不在后悔。今天去学习如何推广小程序,相信......点击查看更多>
    发布于
  • 空空如也

    36人对此回答表示赞同


    shell基本上只有一个框架,事实上没有任何功能,几乎所有具有一定功能的shell脚本程序都是调用其它工具来实现的,比如awk、sed等。

    下面是shell调用perl产生6位随机串的语句:

    perl -e "@a=('a'..'z','0'..'9','A'..'Z');print \$a[int(rand()*\$#a)] for (1..6);"

    在shell的提示符下粘贴上面的语句,回车就可以产生一个随机串。

    如果你认为这是shell语句,那么恭喜你,你的程序很快就写好了,其余建立目录、移动文件、检查文件是否存在等语句我相信你会。

    如果你和我一样,认为这不是shell语句,实际上是perl程序,那么我非常抱歉,或许本人对shell的认识不够,帮不了你,你继续等待高人,祝你好运。

    补充:
    我写的程序如下:

    #以下三行获取当前的年月日
    y=`date +%Y`
    m=`date +%m`
    d=`date +%d`
    #下面定义文件的源和目标文件夹
    src="/file/temp"
    dst="/file/$y/$m/$d"
    #下面是两个临时文件,只在运行的时候才需要,第一个文件存在表示正在运行
    run_flag="/file/log/running"
    tmp_file="/file/log/tmp"

    #调试一:你使用时删除下面三行
    src="$HOME/ygb"
    run_flag="$HOME/ygb/running"
    tmp_file="$HOME/ygb/tmp"

    #首先检查文件是否正在运行,否则退出,或者设置标志
    test -f $run_flag && exit
    cat /dev/null > $run_flag

    echo "start processing ..."

    #定义函数移动单个文件
    mv_file(){
    perl <<! > $tmp_file
    \$a="$1";
    \$n=rindex(\$a,".");
    print substr(\$a,\$n) if (\$n>0);
    !
    ext=`cat $tmp_file`
    while true
    do
    perl <<! > $tmp_file
    @a=('a'..'z','0'..'9');
    print \$a[int(rand()*\$#a)] for (1..6);
    !
    dst_f=$dst/`cat $tmp_file`$ext
    test -f $dst_f || break
    done
    #调试二:你使用时候删除下面语句的echo和两个引号
    echo "mv $1 $dst_f"
    }

    #移动所有文件
    for f in $src/*
    do
    mv_file $f
    done

    #运行结束以后清除标志
    rm $run_flag
    echo "done."

    程序在SCO UNIX上调试通过,没有使用任何特殊内容,在LINUX上应该没有问题。程序的两段核心代码都调用perl完成,一是获取文件扩展名,二是产生随机文件名直到不重复为止。
    展开
    36
    0回复
    发布于 8年前

    评论(0)

    收起评论

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 Z
咨询热线

13312967497

扫码添加业务即可随时咨询 还可领取小程序推广攻略

业务咨询: 13312967497
扫码咨询

扫码咨询套餐

回到顶部