gpt4 book ai didi

linux - 如果条件在检查两个字符串时在 shell 脚本中给出错误

转载 作者:太空宇宙 更新时间:2023-11-04 11:24:20 25 4
gpt4 key购买 nike

在下面的 shell 脚本中,我想根据文件类型执行两个不同的任务,但它给出了一个错误:"[==c]: command not found"

echo "enter file name"
read num
var_check= echo $str |awk -F . '{if (NF>1) {print $NF}}'

if ["$var_check"=="c"];then
echo "Some task for c"
elif ["$var_check"=="cpp"];then
echo "Some task for cpp"
else
echo "Wrong file extension"
fi

最佳答案

你写道:

if ["$var_check"=="c"];then

[命令是一个命令;它的名字必须被空格包围(简单地说)。

if [ "$var_check" == "c" ]; then

最后一个参数,],前面也必须有一个空格。其中的操作数也必须以空格分隔;他们需要是单独的参数。 [[ ... ]] 运算符的规则有点不同,但使用空格可以帮助人们阅读代码。你写的有点像期待:

ls"-l"/dev/tty

工作;它不会。

您还需要仔细检查您的test[ 运算符是否支持==;正常形式是 =


行:

var_check= echo $str |awk -F . '{if (NF>1) {print $NF}}'

这将运行 echo 命令并将 var_check 设置为环境变量,这不太可能是您想要的。你几乎肯定打算写:

var_check=$(echo $str |awk -F . '{if (NF>1) {print $NF}}')

这会运行 echoawk 命令并在 var_check 中捕获输出。优先使用 $(...) 表示法,而不是使用较旧但更复杂的 `...` 表示法。在简单的情况下,它们看起来是一样的;当您嵌套它们时,$(...) 表示法的理解和使用要简单得多。

另外,从更大的尺度来看(3 行而不是 1 行):

echo "enter file name"
read num
var_check=$(echo $str |awk -F . '{if (NF>1) {print $NF}}')

您将文件名读入变量num;然后你回显 $str 而不是 $num。如果您已经在脚本的前面某处设置了 $str(在未显示的代码中),那么您所得到的可能没问题。作为一个独立的片段,这是不对的。

您还可以稍微简化 awk:

var_check=$(echo $str |awk -F . 'NF > 1 {print $NF}')

这与您所写的一样有效,但使用的圆括号和大括号较少。

关于linux - 如果条件在检查两个字符串时在 shell 脚本中给出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15772107/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com