If statement 如果then语句崩溃,csh
我正在尝试使用csh编写一个脚本来检查我们的归档文件中的数据,如果数据不在那里,就可以输入它。我写了一个if-then语句来检查数据文件。看起来是这样的:If statement 如果then语句崩溃,csh,if-statement,csh,If Statement,Csh,我正在尝试使用csh编写一个脚本来检查我们的归档文件中的数据,如果数据不在那里,就可以输入它。我写了一个if-then语句来检查数据文件。看起来是这样的: if (! -e $site*d.Z) then cdraw2rnx set site = `echo $site | tr "[a-z]" "[A-Z]"` if (! -e $site*T00*) then echo "No data for" $site "exists in Archive"
if (! -e $site*d.Z) then
cdraw2rnx
set site = `echo $site | tr "[a-z]" "[A-Z]"`
if (! -e $site*T00*) then
echo "No data for" $site "exists in Archive"
else
echo "Data Found"
endif
else
echo $site "is Rinexed"
endif
cdraw2rnx是另一个脚本
当我运行脚本时,它会到达这个if语句,然后返回
site*d.Z: no match
然后它停止了。我的理解是,由于站点没有匹配项,它应该执行语句的then部分,但它只是结束。我不熟悉脚本,不知道自己在做什么。因此,任何帮助都将不胜感激 在csh中,匹配失败是致命错误;这不仅仅导致条件为假 假设
$site
为“FOO”,则:
if (! -e $site*d.Z) then
将展开为名称以FOO
开头并以d.Z
结尾的所有文件的列表。如果有多个这样的文件,则会出现语法错误,因为-e
只接受一个参数。如您所见,如果您没有,您的脚本将崩溃
不能使用通配符测试可能存在或不存在的文件
相反,您可以将grep
与正则表达式一起使用(应该注意,正则表达式的语法和语义与通配符稍有不同)。例如(我没有测试过这个):
grep-c
打印与正则表达式匹配的行数。我在regexp上使用了双引号,以便变量${site}
将被展开。我添加了花括号,以确保名称站点
的结尾被识别(在这种情况下不需要,但这是一种良好的做法)。^
和$
确保正则表达式与整个文件名匹配
脚本的其余部分留作练习
当然,我不能不发布就讨论csh脚本。我添加了一个csh标记,因为这至少看起来像一个csh脚本。如果这是不正确的,请用正确的标签更新,以表明您使用的是哪种语言。谢谢Kieth,它在cshAwesome中。感谢您花时间向我解释这一点以及csh脚本链接。这是一个很大的帮助。我会支持你的回答,但我在这里没有名声。@javery1289:你现在有多一点了。
set count = `ls | grep -c "^${site}.*d`.Z$"
if ($count == 1) then
....
endif