免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4024 | 回复: 12
打印 上一主题 下一主题

怎样写一个严格循序执行的脚本(不用&&) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-06-15 22:26 |只看该作者 |倒序浏览
本帖最后由 wkx9dragon 于 2011-06-15 22:30 编辑

我写了个最简单的脚本程序,只是因为单条命令串起来写太麻烦,放在一个文件里执行简单点,可是总是在同一个地方卡壳。希望高手帮帮忙,谢谢了。
[程序的本意是自动更新源代码,备份,编译,openbsd核心]。
#! /bin/sh
if [ -e /tmp/src ]
then
        rm -r /tmp/src
fi       
tar xfz ~/backup/src/stable.tgz -C /tmp
cd /tmp/src
cvs update -dP
cd /tmp
tar cfz stable.tgz src
mv stable.tgz ~/backup/src/stable.tgz
cd /tmp/src/sys/arch/amd64/conf
cp GENERIC.MP stable
config stable
#总是在这里卡壳。原来没有这个判断语句,直接写括号内的命令。(有了判断语句一样无效,用$?一样无效)。无论我怎么写,总是在config stable以后卡壳。可是config stable && cd xx && make clean xx ......就可以,不明白迷惑呀。
if [ -e /tmp/src/sys/arch/amd64/complie/stable ]
then
(
        cd /tmp/src/sys/arch/amd64/complie/stable
        make clean
        make -j 4 depend
        make -j 4
        cp bsd ~/backup
)
fi

论坛徽章:
0
2 [报告]
发表于 2011-06-15 22:36 |只看该作者
config stable && {
...
....
}

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
3 [报告]
发表于 2011-06-16 01:21 |只看该作者
if [ -e /tmp/src/sys/arch/amd64/complie/stable ]
then
(
        cd /tmp/src/sys/arch/amd64/complie/stable
        make clean
        make -j 4 depend
        make -j 4
        cp bsd ~/backup
)
fi


1. 看起来你是要判断文件夹是否存在,用-d
2. 把 ( )去掉

论坛徽章:
0
4 [报告]
发表于 2011-06-16 06:40 |只看该作者
回复 2# ywlscpl

谢谢了,可能我的表达不够清楚,我是说脚本文件中不能出现&&。并且还得保证前一条命令正确执行以后,后一条命令才执行。[ 没有$$,也没于if [ $? ] 到处飞,呵呵,不然程序不就写的非常傻了。]我记得好像shell并不保证命令123书写语句的123执行。

论坛徽章:
0
5 [报告]
发表于 2011-06-16 06:46 |只看该作者
回复 3# yinyuemi
谢谢了,我以为只要判断文件存在就可以了[目录不也是一个特殊文件吗?],我改成判断目录存在的试试。我写这个程序的目的,一是为了简化重复输入,二是为了学习不用&& 来控制程序的循序执行,我记得shell好像不保证顺序书写的命令循序执行。

论坛徽章:
0
6 [报告]
发表于 2011-06-16 08:07 |只看该作者
shell脚本就是严格按顺序执行的
cmd1
cmd2
cmd3
执行完cmd1执行cmd2....

论坛徽章:
0
7 [报告]
发表于 2011-06-16 15:13 |只看该作者
LZ, 你在说什么鸟语??我一点都听不懂!!!!!

#!/bin/sh
set -e
代码段

论坛徽章:
0
8 [报告]
发表于 2011-06-16 15:14 |只看该作者
[ ! -e /tmp/src ] || rm -rf /tmp/src

论坛徽章:
0
9 [报告]
发表于 2011-06-16 17:20 |只看该作者
回复 1# wkx9dragon


    可以-e,执行出错就退出

论坛徽章:
0
10 [报告]
发表于 2011-06-16 20:26 |只看该作者
shell脚本就是严格按顺序执行的
cmd1
cmd2
cmd3
执行完cmd1执行cmd2....
ywlscpl 发表于 2011-06-16 08:07

我记得shell中的命令实际好像是通过系统fork()调用的,可是fork()根本不保证调用顺序。一般shell脚本顺序写,命令就顺序执行,好像你要是这么假定的话,是不能够写出健壮脚本程序的(stable)。

config stable
//无伦我后面怎么改,程序都在这里退出,但是如果我手写,键盘输入就没事,和奇怪哦。[操作系统是OpenBSD 4.9 stable amd64,以普通用户执行,属于wheel组]
if [ -e /tmp/src/sys/arch/amd64/complie/stable ]
then

        cd /tmp/src/sys/arch/amd64/complie/stable
        make clean
        make -j 4 depend
        make -j 4
        cp bsd ~/backup

fi
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP