高分请教一段linux下shell(bash)小程序

高分请教一段linux下shell(bash)小程序,第1张

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完成,一是获取文件扩展名,二是产生随机文件名直到不重复为止。

将你的备份语句写成可以自行的脚本,如orable_bak.sh

使用 crontab 指令定时执行,相当于 windows 的定时任务:

>crontab -l

输入:

* 23 * * * 你的脚本完整路径

补充:

第一道第五个字段的整数取值范围及意义是:

0~59 表示分

1~23 表示小时

1~31 表示日

1~12 表示月份

0~6 表示星期(其中0表示星期日)

调试的时候,比如现在16点,你可以

10 16 * * * 脚本完整路径名称

测试16点10分是否有效正常执行

crontab -e 编辑该任务

crontab -r 删除该任务

注意:以上 *** 作都是默认有对应权限的情况下。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12162250.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存