你写了:
if ["$var_check"=="c"];then
命令是[
命令;它的名称必须用空格包围(简单地说)。
if [ "$var_check" == "c" ]; then
最后一个参数 ,]
之前也必须有一个空格。其中的操作数也必须用空格分隔;它们需要是单独的论点。运算符的规则[[ ... ]]
有点不同,但使用空格可以帮助人们阅读代码。你写的有点像期待:
ls"-l"/dev/tty
去工作; 它不会。
您还需要仔细检查您的test
or[
运营商是否支持==
; 正常形式是=
.
该行:
var_check= echo $str |awk -F . '{if (NF>1) {print $NF}}'
这将使用set 作为环境变量运行echo
命令,这不太可能是您想要的。var_check
你几乎肯定打算写:
var_check=$(echo $str |awk -F . '{if (NF>1) {print $NF}}')
这将运行echo
andawk
命令并捕获var_check
. 优先使用$(...)
符号,而不是使用较旧但更复杂的`...`
符号。在简单的情况下,它们看起来是一样的;当您嵌套它们时,$(...)
符号非常容易理解和使用。
此外,在更大的范围内(3 行而不是 1 行):
echo "enter file name"
read num
var_check=$(echo $str |awk -F . '{if (NF>1) {print $NF}}')
您将文件名读入变量num
;然后你 echo$str
而不是$num
. 如果您已经$str
在脚本中的某个位置(在未显示的代码中)进行了设置,那么您所拥有的可能没问题。作为一个独立的片段,这是不对的。
您还可以简化awk
一点:
var_check=$(echo $str |awk -F . 'NF > 1 {print $NF}')
这将与您编写的内容相同,但使用较少的括号和大括号。