我想测试是否存在clearcase视图并仅在存在时执行remove命令。我试图从Linux 6.x环境中的shell脚本执行此操作。我试图将我的条件格式化为单行和完整的“if”语句,但似乎无法使其工作。我需要做些什么来实现这两种方法 - 如果语法方法有效,可以使用单行和完整吗?
这是代码,处于最新状态
#!/bin/ksh
#
STREAMNAME=app_stream_int
PVOB=domain_pvob
VOB=domain_app
viewdir=/opt/local/software/rational/viewstorage
shareddir=/opt/shared/test
storagedir=${shareddir}/viewstorage
projectdir=${shareddir}/projects
ctdir=/opt/rational/clearcase/bin
viewname=$viewdir/test_$STREAMNAME.vws
viewtag=test_$STREAMNAME
echo "STREAMNAME $STREAMNAME - PVOB $PVOB - VOB $VOB"
echo "Removing View if it exists ... \n"
# [ $(${ctdir}/cleartool lsview ${viewname}) ] && { ${ctdir}/cleartool rmview ${viewname}; echo "view removed" }
# [ ${ctdir}/cleartool lsview -long ${viewtag} ] && { ${ctdir}/cleartool rmview ${viewname}; echo "view removed" }
# ${ctdir}/cleartool lsview -long ${viewtag} | grep "Tag" && { ${ctdir}/cleartool rmview ${viewname}; echo "view removed" }
if [ ${ctdir}/cleartool lsview -long ${viewtag} | grep 'Tag' == "0" ]
then
echo "view found"
${ctdir}/cleartool rmview ${viewname}
fi
我更喜欢单线型解决方案,但'if'语句也可以。
答案 0 :(得分:1)
如果该命令遵循退出代码的UNIX约定,则 general 一行代码如下:
command && { success1; success2; } || { failure1; failure2; }
&&
后面的列表指定命令成功时应运行的内容(以0
退出),而||
后面的列表指定命令失败时应运行的内容。在列表中,请注意所有命令以分号结尾,包括最后一个。
对于您的具体情况,这看起来会起作用:
"${ctdir}"/cleartool lsview "${viewname}" && { "${ctdir}"/cleartool rmview "${viewname}" && echo "view removed" || echo "cannot remove view"; }
以下是使用标准命令运行此模式的示例:
$ ls foo && { rm -f foo && echo 'removed' || echo 'not removed'; }
ls: cannot access foo: No such file or directory
$ touch foo
$ ls foo && { rm -f foo && echo 'removed' || echo 'not removed'; }
foo
removed
$ sudo touch /foo
$ sudo chmod 600 /foo
$ ls /foo && { rm -f /foo && echo 'removed' || echo 'not removed'; }
/foo
rm: cannot remove ‘/foo’: Permission denied
not removed