Bash脚本-如果GREP result=then

Bash脚本-如果GREP result=then,bash,macos,grep,Bash,Macos,Grep,我可以看到一些grep/if/bash的东西,但我正在努力将它们整合到OSX上的示例中 基本上我想运行以下命令 diskutil info "/Volumes/Macintosh HD" | grep "Device Block Size" 它在系统上搜索Macintosh HD的设备块大小,如果返回512字节,我希望它运行一个命令,如果返回4096字节,我希望它运行另一个命令。这应该可以做到 block_size=$(diskutil info "/Volumes/Macintosh HD"

我可以看到一些grep/if/bash的东西,但我正在努力将它们整合到OSX上的示例中

基本上我想运行以下命令

diskutil info "/Volumes/Macintosh HD" | grep "Device Block Size"
它在系统上搜索Macintosh HD的设备块大小,如果返回512字节,我希望它运行一个命令,如果返回4096字节,我希望它运行另一个命令。

这应该可以做到

block_size=$(diskutil info "/Volumes/Macintosh HD" | grep "Device Block Size" | grep -Eo '[0-9]+')
if [[ "$block_size" = 512 ]]; then
    echo 512
elif [[ "$block_size" = 4096 ]]; then
    echo 4096
else
    echo neither
fi
但是,我要指出,由于各种原因,这不是很容易移植的:

启动卷可能未命名为/Volumes/Macintosh HD 计算机可能设置为不同的语言,因此可能无法以英语打印 苹果可能会改变格式 ... 我建议使用类似于以下内容的内容:

tmp=$(mktemp /tmp/.diskutil_XXXXXX)
diskutil info -plist / >> "$tmp"
block_size=$(/usr/libexec/PlistBuddy -c 'Print :DeviceBlockSize' "$tmp")
rm "$tmp"
if [[ "$block_size" = 512 ]]; then
    echo 512
elif [[ "$block_size" = 4096 ]]; then
    echo 4096
else
    echo neither
fi
这应该可以

block_size=$(diskutil info "/Volumes/Macintosh HD" | grep "Device Block Size" | grep -Eo '[0-9]+')
if [[ "$block_size" = 512 ]]; then
    echo 512
elif [[ "$block_size" = 4096 ]]; then
    echo 4096
else
    echo neither
fi
但是,我要指出,由于各种原因,这不是很容易移植的:

启动卷可能未命名为/Volumes/Macintosh HD 计算机可能设置为不同的语言,因此可能无法以英语打印 苹果可能会改变格式 ... 我建议使用类似于以下内容的内容:

tmp=$(mktemp /tmp/.diskutil_XXXXXX)
diskutil info -plist / >> "$tmp"
block_size=$(/usr/libexec/PlistBuddy -c 'Print :DeviceBlockSize' "$tmp")
rm "$tmp"
if [[ "$block_size" = 512 ]]; then
    echo 512
elif [[ "$block_size" = 4096 ]]; then
    echo 4096
else
    echo neither
fi

您可以使用awk提取大小,然后使用if/elseif条件:

size=$(diskutil info "/Volumes/Macintosh HD" | awk '/Device Block Size/{print $(NF-1)}')

if [[ $size -eq 512 ]]; then
   echo "eecuting command for size = 512 ..."
elif [[ $size -eq 512 ]]; then
   echo "eecuting command for size = 4096 ..."
fi

您可以使用awk提取大小,然后使用if/elseif条件:

size=$(diskutil info "/Volumes/Macintosh HD" | awk '/Device Block Size/{print $(NF-1)}')

if [[ $size -eq 512 ]]; then
   echo "eecuting command for size = 512 ..."
elif [[ $size -eq 512 ]]; then
   echo "eecuting command for size = 4096 ..."
fi

Ho Johannes,那太好了-不要太担心变量,这是一个固定的环境,现在总是使用相同的名称,它工作得非常完美!谢谢:DHo Johannes,那太好了-不要太担心变量。这是一个固定的环境,现在总是使用相同的名称,它工作得非常完美!谢谢:D