我正在尝试运行这个简单的脚本,它在 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 运行。