[英]If condition giving error in shell script when checking two strings
在下面的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}}')
这将运行echo
和awk
命令,并在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}')
这将与您编写的内容相同,但是使用较少的括号和花括号。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.