测试bash中的变量内容是否为空
test the contents of variables in bash to see if empty
我需要测试 bash 变量是否有内容或者它们是否为空。
我正在编写一个轮换 aws 密钥的脚本。
我想出了这个测试:
keys=$(aws iam list-access-keys --user-name "$user_name" --profile="$aws_key" | grep -i accesskeyid | awk '{print }' | 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
仅在第一次检查为假时运行。 (elif
是 else 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
编辑:根据 Charles 的建议修复了 if
块。老实说,不知道那是一种 Bash 主义。我真的只用 Bash =D.
我需要测试 bash 变量是否有内容或者它们是否为空。
我正在编写一个轮换 aws 密钥的脚本。
我想出了这个测试:
keys=$(aws iam list-access-keys --user-name "$user_name" --profile="$aws_key" | grep -i accesskeyid | awk '{print }' | 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
仅在第一次检查为假时运行。 (elif
是 else 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
编辑:根据 Charles 的建议修复了 if
块。老实说,不知道那是一种 Bash 主义。我真的只用 Bash =D.