【发布时间】:2022-01-04 11:47:25
【问题描述】:
我正在尝试制作一个简单的 bash 脚本来检查是否可以执行 ping 命令(有互联网),否则。
我已经有一个完美运行的代码,它直接在 if 语句中检查是否可以执行 ping 命令而不使用 /dev/null 进行输出。
旧代码:
#! /usr/bin/bash
YELLOW="\e[33m"
RED="\e[1;31m"
GREEN="\e[1;32m"
ENDCOLOR="\e[0m"
if ping -c 1 8.8.8.8 > /dev/null 2>&1; then
echo -e "${YELLOW}[*]${ENDCOLOR} You have Internet access."
else
echo -e "\n ${RED}[!]${ENDCOLOR} You don't have Internet access !"
echo -e "\n ${YELLOW}[*]${ENDCOLOR} Quitting webDirDiscover..."
exit 1
fi
现在我要做的是将命令 ping -c 1 8.8.8.8 存储在一个名为 PING 的变量中。完成后,执行 if 语句并检查结果。
问题是这样做会返回错误:
./webDirDiscover.sh: line 10: PING: command not found
当我认为 if 语句应该正常工作时。
当前代码:
#! /usr/bin/bash
YELLOW="\e[33m"
RED="\e[1;31m"
GREEN="\e[1;32m"
ENDCOLOR="\e[0m"
PING=$(ping -c 1 8.8.8.8)
if $PING -eq 0; then
echo -e "${YELLOW}[*]${ENDCOLOR} You have Internet access."
else
echo -e "\n ${RED}[!]${ENDCOLOR} You don't have Internet access !"
echo -e "\n ${YELLOW}[*]${ENDCOLOR} Quitting webDirDiscover..."
exit 1
fi
除了解决这个简单的脚本之外,这在执行更复杂的命令时会派上用场,从而获得更直观和视觉上令人愉悦的代码。
【问题讨论】:
-
嗨。不要使用变量来保存命令;从技术角度来看,功能是恰当的解决方案。尽管如此,我还是会分享一个答案,解释为什么你的脚本不能按预期工作
-
好的,不使用变量保存命令有什么具体原因吗?现在我下班了,所以不能用功能测试它。我什么时候可以试试!谢谢
-
您没有将命令存储在变量中,而是将命令的输出存储到了变量中。另外,这样做有什么意义?如果你真的想通过一个变量来操作一个命令(例如,因为你想以一种你觉得在函数中太复杂的方式来摆弄参数),不要将它存储到一个标量中,而是一个数组(除非你喜欢调试噩梦)。当然,您可以为此目的误用变量,就像使用自行车搬运沉重的橡木桌子一样。
标签: bash shell if-statement