【发布时间】:2019-03-08 20:40:02
【问题描述】:
正如我的标题所暗示的那样,我猜我是 shell 的初学者,但我遇到了一个我无法解决的问题。
我在 Notepad++ 中输入我的脚本,并小心翼翼地删除了 CR。我在 PuttY 中执行我的脚本,即使它有一个 echo 命令,它也没有显示任何内容。我猜错误是我的脚本,但我不知道在哪里,因为 PuttY 没有显示任何错误。
脚本:
for ((i=wc -l <ListeTableFicToLoadRetour.lst; i>=0; i-=1))
do
echo ${i}
done
wc命令单独运行,显示文件中有2行是正确的。
当我在 PuttY 中输入脚本时: devfic@psd949(DEV/DEV):/projets/dstage/d_fic/home/devfic/sh>test.ksh devfic@psd949(DEV/DEV):/projets/dstage/d_fic/home/devfic/sh>
如果是傻瓜的错误,我很抱歉,我几天前才开始使用ksh:/
【问题讨论】:
-
您希望将变量 i 设置为 wc 命令的 输出。现在变量 i 被设置为 wc,重定向输入被忽略。在 wc -l 周围加上反引号
-
@LewisM,
$(...)比反引号更好——反引号不能很好地嵌套,$( )不仅在 ksh 中受支持,而且在所有 POSIX 兼容的 shell 中都受支持。 -
反引号和 altgr+7 反引号一样吗?我试过了,它也不起作用:(
-
我建议您运行带有日志记录的脚本——例如,
ksh -x test.ksh,因此它实际上会在执行时向您显示每一行。 -
顺便说一句,请注意,除非您的系统在
PATH中配置了.,否则仅运行test.ksh不应该工作——这种做法存在一些重大安全问题.理论上,你应该需要添加一个shebang,比如#!/usr/bin/env ksh,作为脚本的第一行;使用chmod +x test.ksh使其可执行,并限定路径(如./test.ksh以指定在当前目录中找到的shell)或将脚本安装在PATH变量中的某个位置。