为什么这个.sh脚本在CentOS上可以运行,但在Ubuntu上却不能运行?

为什么这个.sh脚本在CentOS上可以运行,但在Ubuntu上却不能运行?

我正在尝试运行这个简单的脚本,它在 CentOS 上成功运行,但在 Ubuntu 上却不行。脚本启动成功,但无法进入 if 条件,直接转到 else。

if 循环是否有语法错误?其目的是将文件名 output2.txt 的内容放入名为价值(该命令可以吗?)并检查潜台词512.00GB包括在文本中(在价值)...

sudo msecli -L > output2.txt
value=`cat output2.txt`
check="512.00GB"
#echo "$value"
if [[ "$value" == *"$check"* ]]; then
  echo "The SSD is 512GB"
sudo msecli -L >> output.txt
sudo nvme delete-ns -n 1 /dev/nvme0
sudo nvme delete-ns -n 1 /dev/nvme1
sleep 1
sudo msecli -N -q 100 -n /dev/nvme0 -r
sleep 1
sudo msecli -N -q 100 -n /dev/nvme1 -r
sleep 2
sudo reboot
else
sudo msecli -L >> output.txt
echo "***** The SSD is READY!!! *****"
fi

我们得到的错误在第 5 行 [[,这似乎 if 命令不起作用。

我使用了以下在网上找到的示例来搜索文本中的潜台词:

#example
#STR='GNU/Linux is an operating system'
#SUB='Linux'
#if [[ "$STR" == *"$SUB"* ]]; then
#  echo "It's there."
#fi

答案1

如果你的脚本不是以舍邦像线一样

#!/bin/bash

它可能由/bin/sh(参见“哪个 shell 解释器可以运行没有 shebang 的脚本?”以了解详细信息)。

Ubuntu 使用短跑for/bin/sh和 dash 不支持 Bash 特定的语法,[[...]]因此您会收到错误。

CentOS 可能使用 Bash,/bin/sh因此它可以在那里工作。

添加

#!/bin/bash

作为脚本的第一行,以确保它由 Bash 运行。

相关内容