在bash中测试变量的内容,看看是否为空

时间:2018-06-04 19:48:50

标签: bash amazon-web-services aws-iam

我需要测试以查看bash变量是否包含某些内容或者它们是否为空。

我正在编写一个旋转aws键的脚本。

我想出了这个测试:

keys=$(aws iam list-access-keys --user-name "$user_name" --profile="$aws_key"  | grep -i accesskeyid | awk '{print $2}' | sed 's/"//g')
   key1=${keys%$'\n'*}
   key2=${keys#*$'\n'}

   echo "$key1"
   echo "$key2"
   echo

   if [[ "$key1" != "^$" ]]; then
     echo "Key1: $key1"
   elif [[ "$key2" != "^$" ]]; then
     echo "Key 2: $key2"
   else 
     echo "There is no key data."
   fi

当我运行脚本时,它首先打印两个变量以确保它们具有值。但是,当我运行测试以查看它们是否具有值时,只打印出第一个变量:

AKIAIDQFZ62EMKNSZ7PQ
AKIAIPSNLAJKBLH2CLOQ

Key1: AKIAIDQFZ53EMKNSZ7PQ

如何有效地测试变量key1和key2的内容以确保它们有内容?

原因是AWS用户可能有一个或两个密钥,并且可能因用户而异。

1 个答案:

答案 0 :(得分:1)

你的逻辑错误。您使用if [[ "$key1" != "^$" ]]; then检查第一个密钥。如果是这样,那么我们退出if语句。 elif [[ "$key2" != "^$" ]]; then仅在第一次检查为false时运行。 (elifelse if)的缩写。在这种情况下,您会正确地找到else语句,但如果满足第一个条件,您将跳过elif

你的逻辑应该是这样的:

if [[ $key1 ]]; then
  echo "Key1: $key1"
fi

if [[ $key2 ]]; then
  echo "Key 2: $key2"
fi

if [[ ! $key2$key1 ]]; then
  echo "There is no key data."
fi

编辑:根据查尔斯的建议修正if块。老实说,不知道那是一个Bashism。我只是真的使用Bash = D.