我接受用户输入并希望脚本适用于以下情况。我尝试过使用'=='和'=〜'。但是,当我使用'=='但第一种情况失败时,我的脚本适用于第二种情况。当我使用'=〜'而不是脚本接受像./script john harryyy smith这样的参数时,我不希望它接受。让这两种情况都有效的最佳方法是什么?
./script john harry smith
./script john
if [[ "${args[@]}" == "john" ]]; then
....
else
....
答案 0 :(得分:1)
您可以使用grep
,然后使用wc
来计算grep匹配。
if [[ "$(echo ${args[@]} | grep "john" | wc -l) -ge 0 ]]; then ...; else...; fi
对于用户输入,我建议使用grep -i
,以使grep搜索大小写不敏感。
修改强>
没有完全阅读整个问题,所以我的不好。上面的内容仍然会与哈里相提并论。为了将多个参数匹配到多个变量,我可能会使用for循环。
for ((i=0;i<${#args[@]};i++)); do
if [ ${args[$i]} = "john" ]; then
...
break #optional, prevents the code from executing twice if the user has typed two "john"s.
fi
done
但是,您必须为要检查的每个名称设置一个循环。如果你把名字也放在一个数组中,你可以改为双循环;
#array names contains the names to check against.
for ((i=0;i<${#names[@]};i++)); do
for ((ii=0;ii<${#args[@]};ii++)); do
if [ ${args[$ii]} = ${names[$i]} ]; then
...
continue 2 #again, optional, continues the first loop for the same reason as above
fi
done
done
答案 1 :(得分:0)
我想我会使用像这样的case语句..这不是确切的代码。这看起来很有效,因为我特别喜欢像#john&#39;
这样的字符串案例$ {args [i]} in &#39;哈利&#39; |&#39;史密斯&#39; | .....) ..... ...... ;;
'john')
.....
.......
;;
*)