李雷廷的个人博客分享 http://blog.sciencenet.cn/u/llt001

博文

一种利用脚本在Linux下运行命令的方式

已有 2708 次阅读 2015-10-20 11:28 |系统分类:科研笔记

一般情况下,在Linux下运行程序有两种方式:

1)直接在终端输入Linux命令,一次运行一个命令

2)把多条Linux命令写到一个脚本中,直接运行脚本


对于第一种情况,其优点是快速得到结果,无需额外的考虑;缺点是命令的复用性较差,且查看已经运行的命令,及命令之间的逻辑关系不易。

对于第二种情况,其优点是程序复用性好,可以多次修改,重复运行,以及设计复杂的逻辑关系;而缺点是不可随意运行,以免覆盖已经得到的结果。


考虑到这两种方式的优缺点,认为第三种运行程序的方式更好一些,即,将需要运行的命令通过一个脚本打印到屏幕上,检查命令情况,然后通过管道连接用sh程序运行脚本打印出的命令。例如

gzip_files.sh :

for i in $(ls *.txt)

do

   j=$(basename "*.txt")

   if [ -e $i.gz ] ; then

       echo "# $i: gzipped file exist"

   else

       echo "# compress file $i"

       echo "gzip -c $i > $i.gz"

   fi

done

这段代码的意思是,先检查一下当前文件夹下有哪些后缀为txt的文件,然后检查每一个后缀为txt的文件是否存在其对应的后缀为gz的文件,如果存在,则打印一个说明,如果不存在则打印一个gzip命令,输入结果可以是

# 1.txt: gzipped file exist

# compress file 2.txt

gzip -c 2.txt > 2.txt.gz

...

通过检查输出结果,可以快速查看需要运行的命令是否正确,并可以通过grep -v删除一些命令,然后通过管道连接sh程序运行这些命令,即

sh gzip_files.sh | sh

sh gzip_file.sh | grep -v 'important.txt' | sh


这样做虽然增加了额外的步骤,但是以这种只打印命令到屏幕、不实际运行命令的方式写作的脚本可以随意的运行一下,检查结果,不必担心重复运行了某个命令产生难以预期的后果。



https://blog.sciencenet.cn/blog-656335-929506.html

上一篇:怎样判断newick格式的进化树是有根树,还是无根树?
下一篇:GitHub的Wiki是单独的repository
收藏 IP: 218.2.227.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...
扫一扫,分享此博文

全部作者的精选博文

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-7-19 19:21

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部