检查所有条件(配置文件)的问题

Issue with all conditions (configuration profiles) being checked

好的,现在我已经这样设置了,但它仍然给我一个 ;出口; 注销

[处理完成]

当 运行 通过终端时,我知道有些配置文件不在我的计算机上,应该使脚本继续运行或继续循环。这不是在发生什么吗?

提前致谢....!

这是我目前的情况:

#!/bin/bash

profilesInstalled=`profiles -P|awk '/attribute/ {print }'`

while read line ; do

if [ "$line" = "F2CC78D2-A63F-45CB-AE7D-BF2221D41218" ];then

echo "AD Binding is present"

elif [ "$line" = "1C94DAD1-5FC7-46CE-9E09-576841C15093" ];then

echo "Energy Saver is present"

elif [ "$line" = "A0E5B977-F0AF-44C9-8001-DA0511B702B8" ];then

echo "Finder is present"

elif [ "$line" = "5E9DE5BF-34E4-4A7F-AA29-461FB0631943" ];then

echo "FV2 Redirect is present"

elif [ "$line" = "9AE91C88-D1B2-4227-9E95-80F492DCAA11" ];then

echo "Login Window/Security and Privacy is present"

elif [ "$line" = "00000000-0000-0000-A000-4A414D460003" ];then

echo "MDM Profile is present"

elif [ "$line" = "5E85BBF0-3483-4C80-A1FC-70AF20F82E7C" ];then

echo "Restrictions is present"

elif [ "$line" = "E433D546-5502-4C3F-9E5F-4732ED1F0032" ];then

echo "SAC SUBCA-01 is present"

elif [ "$line" = "5C2AE16B-D4E9-4D15-B190-3CD7B28779E8" ];then

echo "SAC SUBCA-02 is present"

elif [ "$line" = "2C620A13-DF1E-4F6A-A32B-9FA3149F8A56" ];then

echo "SAC-CA-01 is present"

elif [ "$line" = "3B44AE14-E0CE-4621-BACF-1A9C3BA4A459" ];then

echo "Screensaver is present" 

elif [ "$line" = "396A9D84-A9CA-4575-8D09-C9F054B76AF7" ];then

echo "Spotlight is present"

elif [ "$line" = "E0138F02-9A15-47BD-8CA5-7D1D0985A1A6" ];then

echo "Workday Corp is present"
fi 

exit 0

done <<<"$profilesInstalled"

在这些测试中,您需要在 = 周围添加一个 space。第一次测试将始终按书面方式通过。

您还应该引用 "$line" 变量扩展。

除非您在其他地方使用 $profilesInstalled,否则您根本不需要该变量,只需将 profiles 管道直接连接到 while 循环即可。

您还可以将该管道中的 grep 替换为 awk '/attribute/ {print }'

部分"meta"先备注:

  • 请不要大幅度更改您的原始问题,因为这会使现有答案无效(例如
    • 相反,添加 稍后对原始问题的更改,并将更改标记为
    • 如果出现不同的(后续)问题,请将其作为一个单独的新问题提出。
  • 请了解如何 format your code properly - 它已为您完成,您在以后的编辑中再次破坏了该格式。
  • 请阅读如何提供 MCVE (a Minimal, Complete, and Verifiable Example)

不做这些事情:

  • 使您获得所需帮助的可能性大大降低。
  • 降低您的问题及其答案对未来读者的价值。

这是您的代码的清理版本:

# Helper function to determine a string's element index in an array.
# SYNOPSIS
#     indexOf needle "${haystack[@]}"
# *Via stdout*, returns the zero-based index of a string element in an array of strings or -1, if not found.
# The *return code* indicates if the element was found or not.
indexOf() {
  local e ndx=-1
  for e in "${@:2}"; do (( ++ndx )); [[ "$e" == "" ]] && echo $ndx && return 0; done
  echo '-1'; return 1
}

# Define array of profile IDs, and parallel ID of profile names.
# Note: in bash 4+, this could be handled more elegantly with a single
#       associative array.
profileIds=( F2CC78D2-A63F-45CB-AE7D-BF2221D41218 1C94DAD1-5FC7-46CE-9E09-576841C15093
             A0E5B977-F0AF-44C9-8001-DA0511B702B8 5E9DE5BF-34E4-4A7F-AA29-461FB0631943
             9AE91C88-D1B2-4227-9E95-80F492DCAA11 00000000-0000-0000-A000-4A414D460003
             5E85BBF0-3483-4C80-A1FC-70AF20F82E7C E433D546-5502-4C3F-9E5F-4732ED1F0032
             5C2AE16B-D4E9-4D15-B190-3CD7B28779E8 2C620A13-DF1E-4F6A-A32B-9FA3149F8A56
             3B44AE14-E0CE-4621-BACF-1A9C3BA4A459 396A9D84-A9CA-4575-8D09-C9F054B76AF7
             E0138F02-9A15-47BD-8CA5-7D1D0985A1A6 )
profileNames=( "AD Binding"                        "Energy Saver"
               "Finder"                            "FV2 Redirect"
               "Login Window/Security and Privacy" "MDM Profile"
               "Restrictions"                      "SAC SUBCA-01"
               "SAC SUBCA-02"                      "SAC-CA-01"
               "Screensaver"                       "Spotlight"
               "Workday Corp" )

# Feeding the list of installed profile IDs via a process
# substitution (<(...)), loop over them and print their
# respective names.
while read -r line ; do

  # Find the line in the array of profile IDs and
  # print the corresponding name.
  if ndx=$(indexOf "$line" "${profileIds[@]}"); then
    echo "${profileNames[ndx]} is present"
  else
    echo "WARNING: Unknown profile: $line" >&2
  fi

done < <(profiles -P | awk '/attribute/ {print }')

至于为什么你的代码没有循环:

  • 你的循环中有一个无条件 exit 0语句,这意味着循环总是在第一行之后退出.
  • 由于使用 <<< 提供配置文件列表,您总是至少得到 1 行输入,因为 <<< 附加了尾随换行符到它的输入。如果输入为空,您将获得一个带有 empty 行的迭代。

关于这条消息:

; exit; 
logout

[Process completed]

它告诉我两件事:

  • 您正在 OSX,并且您 运行 来自 Finder 的脚本。
  • 脚本产生无输出(如果有输出,它会在 exit;logout 行之间打印)。

当您 运行 来自 Finder 的脚本时,用于 运行 脚本的 shell 退出 在脚本具有 运行 - 其终端 window 是否保持打开状态取决于您的终端偏好 - 在您的情况下,window 保持打开状态,但由于 shell 已退出,您可以不再与它互动。

无论哪种方式,您的特定脚本都应该产生相同的输出,无论是 运行 直接来自终端还是通过 Finder。