如果参数以大写字母开头,我需要创建一个遍历参数列表和检查/计数的脚本。我有一些入门代码,但我被困住了,非常感谢任何帮助!
答案 0 :(得分:1)
几点说明:
=~
运算符if
未以fi
结束。[A-Z]
在所有语言环境中都不起作用,并且不必要地易碎。某些整理订单的格式为AaBbCcDd
,因此A-Z
包含a
,b
等; [[:upper:]]
保证在任何地方做正确的事。$@
与不带引号的$*
的行为完全相同。如果您想要正确地遵守首次调用函数时使用的引用和转义,请使用"$@"
,引用。改为考虑:
#!/bin/bash
(( "$#" )) || { echo "Error: No arguments given" >&2; exit 1; }
re='^[[:upper:]]' # store regex in a variable for compatibility with old bash releases
for word in "$@"; do
[[ $word =~ $re ]] && ((++count))
done
echo "$count arguments started with upper-case characters"
或者,通过使用case语句,您可以避免需要bash,并检查其他类型:
for word in "$@"; do
case $word in
[[:upper:]]*) (( ++upper_count )) ;;
[[:lower:]]*) (( ++lower_count )) ;;
[[:digit:]]*) (( ++digit_count )) ;;
esac
done
echo "Found $upper_count arguments starting with upper-case letters"
echo "Found $lower_count arguments starting with lower-case letters"
echo "Found $digit_count arguments starting with digits"
答案 1 :(得分:0)
#! /bin/bash
if [ $# -eq 0 ]; then
echo Error
exit 1
fi
COUNT=`echo "$@" | tr ' ' '\n' | grep "^[A-Z]" | wc -l`
echo $COUNT