#!/usr/bin/env bash
#### Extract OS-related info from a Linux box ####
#### Display header message ####
# $1 - message
function write_header(){
local h="$@"
echo "------------------------------"
echo " ${h}"
echo "------------------------------"
}
#### Get info about Operating System ####
function os_info(){
write_header "System Info"
echo "Operating System : $(uname --kernel-name)" #uname -s
echo "Kernel Version : $(uname --kernel-release)" #uname -r
awk '/^NAME=/||/^VERSION=/' /etc/os-release
}
В приведенном выше коде я могу извлечь определенные поля из uname
и /etc/os-release
, что выглядит примерно так:
System Info
------------------------------
Operating System : Linux
Kernel Version : 3.16.0-4-amd64
NAME="Debian GNU/Linux"
VERSION="8 (jessie)"
Но что я не смог сделать, так это добавить awk
, например: awk -F'=' '{print $2}
, к оригинальному awk
оператору. Я бы хотел, чтобы вывод выглядел следующим образом для последних двух строк: ИМЯ: Debain GNU/Linux
и VERSION: 8 (jessie)
.
Любые предложения о том, как объединить операторы awk для достижения желаемого результата?
awk -F'[="]+' '/^(NAME|VERSION)=/{printf("%-17s: %s\n",$1,$2)}' /etc/os-release
произвести
NAME : BunsenLabs GNU/Linux
VERSION : 8.6 (Hydrogen)
Мне кажется, что следующее работает:
awk -F'=' '/^NAME=/||/^VERSION=/ { print $2 }' /etc/os-release
Вход:
~$ cat /etc/os-release
NAME="Ubuntu"
VERSION="16.04.1 LTS (Xenial Xerus)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 16.04.1 LTS"
VERSION_ID="16.04"
HOME_URL="http://www.ubuntu.com/"
SUPPORT_URL="http://help.ubuntu.com/"
BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"
VERSION_CODENAME=xenial
UBUNTU_CODENAME=xenial
Выход:
~$ awk -F'=' '/^NAME=/||/^VERSION=/ { print $2 }' /etc/os-release
"Ubuntu"
"16.04.1 LTS (Xenial Xerus)"
Альтернатива сопоставлению регулярных выражений:
awk -F= '$1 == "NAME" || $1 == "VERSION" {print $2}'