我在这里做错了什么? 该脚本默认输入此IF语句&显示要退出的echo语句。
#!/bin/ksh
server=$1
dbname=$2
IFS="
"
if [[ "${dbname}" != "abc_def_data" || "${dbname}" != "abc_def01_data" ]]; then
echo "Msg: Triggers can only be applied to CMS_JAD:abc_def_data/abc_def01_data!"
exit 0
fi
答案 0 :(得分:1)
!=
条件的链接需要一些反思。
我更倾向于使用case ... esac
结构来更清晰地测试这些条件。
case "${dbname}" in
abc_def_data|abc_def01_data )
#dbg echo "matched, but for real code replace with just a ':' char"
:
;;
* )
echo "didn_t match any expected values for \$dbname"
echo exit 1
;;
esac
请注意,当您真正尝试查找*)
案例时,abc_def_data (etc)
匹配的操作可以是任何操作,但只需跳到下一部分代码,您只需要shell的null cmd :
。
修改1
请注意,我有echo exit 1
,如果您将其复制/粘贴到命令行,则shell不会退出。在实际代码中,移除echo
并期望exit
起作用。
修改2
另请注意,案例匹配(|
)中的abc_def_data**|**abc_def01_data
字符本质上是OR
(我认为它在“案例匹配”上下文中称为其他内容)。
IHTH
答案 1 :(得分:0)
你有没有想过要写这个?
if [[ "${dbname}" != "abc_def_data" && "${dbname}" != "abc_def01_data" ]]; then
echo "Msg: Triggers can only be applied to CMS_JAD:abc_def_data/abc_def01_data!"
exit 0
fi
答案 2 :(得分:0)
尝试这个男人,它应该工作得很好你应该用“[]”分隔条件并使用-o而不是|| .... 顺便说一下,它对我很有用......
server=$1
dbname=$2
IFS=""
if [ "${dbname}" != "abc_def_data" ] -o [ "${dbname}" != "abc_def01_data" ]
then
echo "Msg: Triggers can only be applied to CMS_JAD:abc_def_data/abc_def01_data!"
exit 0
fi