Bash脚本 - 如果GREP结果=那么

时间:2016-05-03 19:01:16

标签: bash macos grep

我可以在那里看到一些grep / if / bash的东西,但是我在OS X上努力将它拉到一起。

基本上我想运行以下命令

diskutil info "/Volumes/Macintosh HD" | grep "Device Block Size"

如果系统块大小恢复为512字节,它会在系统上搜索Macintosh HD我希望它运行一个命令,如果它返回4096字节,我希望它运行不同的命令。

2 个答案:

答案 0 :(得分:3)

这应该这样做

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
  • 计算机可能设置为其他语言,因此可能无法用英语打印
  • Apple可能会更改格式
  • ...

我建议使用类似以下的内容:

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

答案 1 :(得分:2)

您可以使用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