我如何在 bash 脚本中打印出 rpm sudo --version

how do i print out rpm sudo --version in bash script

#!/bin/bash
if rpm -q sudo > /dev/null; then
        echo "sudo is installed and version is"
else
        echo "sudo is not installed"
fi

你好想知道是否可以在检查安装后打印出我的 sudo 版本。如果有办法,我该怎么做

sudo --version 输出必须被解析,return 状态用于确定它是否已安装。

首先,无论活动系统区域设置如何,您都希望版本输出保持一致。

所以你用LANG=C sudo --version调用它。

这会打印多行,只有第一行最后一个元素是 sudo 版本:

Sudo version 1.9.5p2
Sudoers policy plugin version 1.9.5p2
Sudoers file grammar version 48
Sudoers I/O plugin version 1.9.5p2
Sudoers audit plugin version 1.9.5p2

使用POSIX-shell语法,行和字段解析必须使用外部工具来完成。这里 awk 能够一次解析所有内容:

#!/usr/bin/env sh

# Captures version string parsed with awk:
# so only last entry of first line is captured
if sudo_version=$(LANG=C sudo --version 2>/dev/null | awk 'NR==1{print $NF}')
  then printf 'sudo is installed and version is %s\n' "$sudo_version"
  else printf 'sudo is not installed\n' >&2
fi

如果使用 Bash,将第一行捕获到数组中,避免使用外部工具和管道分叉过程:

#!/usr/bin/env bash

# Capture version string first line into a Bash array
if read -ra version_array < <(LANG=C sudo --version 2>/dev/null)
then
  # Version is the last element of array
  printf 'sudo is installed and version is %s\n' "${version_array[-1]}"
else
  printf 'sudo is not installed\n' >&2
fi