我正在尝试运行这个简单的脚本,该脚本在 CentOS 上成功运行,但在 Ubuntu 上运行失败。脚本成功启动但未能进入 if 条件并直接移动到 else。
if 循环是否有任何语法错误?这个想法是将文件名 output2.txt 的内容放入一个名为value的变量中(该命令可以吗?)并检查文本中是否包含512.00GB 子文本(在value 中)...
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
Run Code Online (Sandbox Code Playgroud)
我们得到的错误在第 5 行 [[,这似乎 if 命令不起作用。
我使用了我在网上找到的以下示例来搜索文本中的潜台词:
#example
#STR='GNU/Linux is an operating system'
#SUB='Linux'
#if [[ "$STR" == *"$SUB"* ]]; then
# echo "It's there."
#fi
Run Code Online (Sandbox Code Playgroud)
Flo*_*sch 10
如果你的脚本不是像这样的shebang行开始
#!/bin/bash
Run Code Online (Sandbox Code Playgroud)
它可能由/bin/sh(有关详细信息,请参阅“哪个 shell 解释器运行没有 shebang 的脚本? ”)运行。
Ubuntu 使用dash for/bin/sh并且 dash 不支持 Bash 特定的语法,[[...]]所以你会得到一个错误。
CentOS 可能会使用 Bash,/bin/sh因此它可以在那里工作。
添加
#!/bin/bash
Run Code Online (Sandbox Code Playgroud)
作为脚本的第一行,以确保它由 Bash 运行。