我试图将存储在变量中的字符串与三个不同的字符串进行比较,如果它们都不匹配,则抛出错误。我尝试使用逻辑运算符OR在单个if语句中执行此操作。但是,即使存储在变量中的值与可能的值之一相同,每次遇到错误时也是如此。请找到我尝试过的代码片段。
if [[ "$TYPE" != "LOCAL" || "$TYPE" != "REMOTE" || "$TYPE" != "BOTH" ]]; then
echo -e "\n\tINCORRECT OR NULL ARGUMENTS PASSED. PLEASE VERIFY AND CORRECT THE USAGE MENTIONED AS BELOW: \n"
Usage
exit 1
fi
if [[ "$TYPE" != "LOCAL" ]] || [["$TYPE" != "REMOTE" ]] || [["$TYPE" != "BOTH" ]]; then
echo -e "\n\tINCORRECT OR NULL ARGUMENTS PASSED. PLEASE VERIFY AND CORRECT THE USAGE MENTIONED AS BELOW: \n"
Usage
exit 1
fi
您的逻辑倒退了。任意字符串被保证是从任一不同LOCAL
或不同REMOTE
,因为字符串不能LOCAL
与REMOTE
在同一时间。
在这里,适合该任务的工具是一条case
语句(这是sh
与[[...]]
ksh运算符相反的标准语法):
case $TYPE in
(REMOTE|LOCAL|BOTH) ;; # OK
(*) printf >&2 'Error...\n'; exit 1;;
esac
如果你想使用[[
,在ksh
或bash
或zsh
在ksh
仿真你可以这样做:
if [[ $TYPE != @(REMOTE|LOCAL|BOTH) ]]; then
printf >&2 'Error...\n'
exit 1
fi
或[[ $TYPE != REMOTE && $TYPE != LOCAL && $TYPE != BOTH ]]
或[[ ! ($TYPE = REMOTE || $TYPE = LOCAL || $TYPE = BOTH) ]]
等
或使用标准[
命令:[ "$TYPE" != REMOTE ] && [ "$TYPE" != LOCAL ] && [ "$TYPE" != BOTH ]
。
用ksh93
,bash
或者zsh
,另一种选择是使用一个关联数组:
typeset -A allowed_TYPE
allowed_TYPE=([REMOTE]=1 [LOCAL]=1 [BOTH]=1)
if ((!allowed_TYPE[$TYPE])); then
printf >&2 'Error...\n'
exit 1
fi
使用zsh
,您还可以使用普通数组:
allowed_TYPE=(REMOTE LOCAL BOTH)
if ((! $allowed_TYPE[(Ie)$TYPE]))...
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句