我有一个基本上有一个函数的脚本然后我运行一个如果运行该函数,如果内核版本是我需要的版本。简而言之就像这样
#!/bin/bash
postinstall() {
run some postinstall commands in here
}
UNAME=`uname -r`
if [[ $UNAME == 3.* ]]
then
postinstall
else
echo "Kernel version is not correct"
fi
当我在CLI上运行命令时,它的工作正常,但当我以sh <scriptname>
触发脚本时,我得到以下结果:
: 313: <scriptname>.sh: [[: not found
Kernel version is not correct
第313行是带有“if”的那一行。
答案 0 :(得分:0)
正如我在comment中所提到的,安装为/bin/sh
的shell不一定是Bash(例如,在Ubuntu上,它通常是dash
),甚至当它是Bash,当它作为sh
而不是bash
运行时,它的行为会有所不同。
但是,正如chepner comment中指出的那样,即使以sh
运行(在Bash的POSIX mode中),Bash也会识别[[
命令 - 虽然它无法识别POSIX shell syntax的其他扩展名,例如process substitution。
鉴于您看到的错误消息,很明显,在您的计算机上,sh
无法将[[
识别为有效命令,这反过来意味着它可能不是Bash。因此,您不应该使用sh
但使用bash
运行它。或者在命令行上没有指定shell的情况下运行它,让shebang(#!/bin/bash
)确保内核运行正确的shell。