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



我需要测试一下 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 用户可能有一个或两个密钥,并且可能因用户而异。

你的逻辑不正确。 您用if [[ "$key1" != "^$" ]]; then检查第一个密钥。 如果这是真的,那么我们退出 if 语句。elif [[ "$key2" != "^$" ]]; then仅在第一次检查为假时运行。(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块。 老实说,不知道那是巴什主义。 我只真正使用 Bash =D。

相关内容

  • 没有找到相关文章

最新更新