初学shell,书上的if小程序为什么出错?

sh/bash/dash/ksh/zsh等Shell脚本
回复
头像
double_crane
帖子: 52
注册时间: 2011-04-06 1:56

初学shell,书上的if小程序为什么出错?

#1

帖子 double_crane » 2011-11-21 22:02

照书上抄的,关于if的用法

#!/bin/bash
for filename in 'ls'
do
cp $filename ./backup/$filename
if ( $? -ne 0 ) then
echo "copy failed"
fi
done

程序的意思就是把一个文件夹的内容在子目录做备份
为什么执行报错
cp: 无法获取"ls" 的文件状态(stat): 没有那个文件或目录
./if: 行 5: 1: 未找到命令

开始怀疑是子目录没创建,但是我 建一个 backup的目录,还是一样报错啊?
这是什么情况啊?

还有,我发现这书上写的 if 有点乱;
if 后面 有时是 小括号 有时是中括号
有时括号后面有 封号,有时后面又没有封号
这是怎么回事?

谢谢啦
头像
cuihao
帖子: 4793
注册时间: 2008-07-24 11:33
来自: 郑州
联系:

Re: 初学shell,书上的if小程序为什么出错?

#2

帖子 cuihao » 2011-11-21 22:07

for filename in `ls`
求人不如求它仨: 天蓝的Wiki 屎黄的Wiki 绿
Site: CUIHAO.TK    Twitter: @cuihaoleo
Machine: Athlon64 X2 5200+ / 2x2GB DDR2-800 / GeForce GTS 450
AD: ~まだ見ぬ誰かの笑顔のために~
头像
cuihao
帖子: 4793
注册时间: 2008-07-24 11:33
来自: 郑州
联系:

Re: 初学shell,书上的if小程序为什么出错?

#3

帖子 cuihao » 2011-11-21 22:14

小括号貌似是C语法,不能你那么写的:

代码: 全选

if (($? != 0 )); then
求人不如求它仨: 天蓝的Wiki 屎黄的Wiki 绿
Site: CUIHAO.TK    Twitter: @cuihaoleo
Machine: Athlon64 X2 5200+ / 2x2GB DDR2-800 / GeForce GTS 450
AD: ~まだ見ぬ誰かの笑顔のために~
头像
double_crane
帖子: 52
注册时间: 2011-04-06 1:56

Re: 初学shell,书上的if小程序为什么出错?

#4

帖子 double_crane » 2011-11-22 0:28

谢谢啊,是应该反杠号;
封号是有的,买的书,写的不对啊,挫,还清华出版社的...

中括号有效,但是提示如下
cp: 略过目录"backup"
copy failed

小括号也能用,有效,提示
./if: 行 6: 0: 未找到命令
./if: 行 6: 0: 未找到命令
./if: 行 6: 0: 未找到命令
./if: 行 6: 0: 未找到命令
cp: 略过目录"backup"
./if: 行 6: 1: 未找到命令
./if: 行 6: 0: 未找到命令
./if: 行 6: 0: 未找到命令
./if: 行 6: 0: 未找到命令

这个是什么意思啊,
我看到明明复制成功了的
头像
cuihao
帖子: 4793
注册时间: 2008-07-24 11:33
来自: 郑州
联系:

Re: 初学shell,书上的if小程序为什么出错?

#5

帖子 cuihao » 2011-11-22 6:41

copy目录要用:

代码: 全选

copy -r 路径
if的问题嘛,我还没搞清楚。

其实我不太懂shell脚本 :em02
求人不如求它仨: 天蓝的Wiki 屎黄的Wiki 绿
Site: CUIHAO.TK    Twitter: @cuihaoleo
Machine: Athlon64 X2 5200+ / 2x2GB DDR2-800 / GeForce GTS 450
AD: ~まだ見ぬ誰かの笑顔のために~
cao627
帖子: 992
注册时间: 2007-12-05 10:57
系统: ubuntu14.04
来自: 金山

Re: 初学shell,书上的if小程序为什么出错?

#6

帖子 cao627 » 2011-11-22 8:07

楼主
if ( $? -ne 0 ) then
是什么意思?解释解释
我也学学
头像
naturalaw
帖子: 1360
注册时间: 2011-09-06 22:04

Re: 初学shell,书上的if小程序为什么出错?

#7

帖子 naturalaw » 2011-11-22 21:44

結構不對.

代码: 全选

if [ ] ;then
fi
少了分號.
要不then你就另起一行寫.
  • The eternal law
头像
naturalaw
帖子: 1360
注册时间: 2011-09-06 22:04

Re: 初学shell,书上的if小程序为什么出错?

#8

帖子 naturalaw » 2011-11-22 21:46

double_crane 写了:照书上抄的,关于if的用法

#!/bin/bash
for filename in 'ls'
do
cp $filename ./backup/$filename
if ( $? -ne 0 ) then
echo "copy failed"
fi
done

程序的意思就是把一个文件夹的内容在子目录做备份
为什么执行报错
cp: 无法获取"ls" 的文件状态(stat): 没有那个文件或目录
./if: 行 5: 1: 未找到命令

开始怀疑是子目录没创建,但是我 建一个 backup的目录,还是一样报错啊?
这是什么情况啊?

还有,我发现这书上写的 if 有点乱;
if 后面 有时是 小括号 有时是中括号
有时括号后面有 封号,有时后面又没有封号
这是怎么回事?

谢谢啦
學shell你還是找那本電子書吧.ebook99搞的pdf.在chinaunix論壇有連載.
  • The eternal law
回复