如何在Bash中查看参数是否带有大写字母?

时间:2016-02-29 22:32:27

标签: linux bash shell unix sh

如果参数以大写字母开头,我需要创建一个遍历参数列表和检查/计数的脚本。我有一些入门代码,但我被困住了,非常感谢任何帮助!

2 个答案:

答案 0 :(得分:1)

几点说明:

  • 您缺少正则表达式的=~运算符
  • 您的if未以fi结束。
  • 使用[A-Z]在所有语言环境中都不起作用,并且不必要地易碎。某些整理订单的格式为AaBbCcDd,因此A-Z包含ab等; [[: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