Linux自动化运维:Shell与Ansible(微课版)
上QQ阅读APP看书,第一时间看更新

任务1.4.3 Shell变量操作

1. 任务描述

在Shell中,变量主要用于保存和引用各种类型的数据,可以用于存储各种信息,如字符串、数字等。变量在Shell中非常常用,可以用于存储用户输入的数据、存储程序运行过程中产生的数据、存储程序执行结果,还可以用于条件判断和循环控制、存储文件名和路径、文件处理、存储环境变量、程序的配置和运行等。

2. 任务实施

(1)编写Shell脚本,使用变量获取主机的内存信息、网络互联网协议(Internet Protocol,IP)地址、CPU负载等信息。


[opencloud@server ~]$ vim systeminfo-output.sh 
#!/bin/bash 
# 获取内存信息 
memory=$(free -m | awk 'NR==2{printf "Total: %sMB, Used: %sMB, Free: %sMB", $2, $3, $4}') 
# 获取网络 IP地址 
ip=$(ip addr | grep 'inet' | grep -v 'inet6' | grep -v '127.0.0.1' | awk '{print $2}' | cut -d '/' -f 1) 
# 获取 CPU 负载 
cpu=$(top -bn1 | grep 'Cpu(s)' | awk '{print $2}' | cut -d '%' -f 1) 
# 输出信息 
echo "Memory: $memory" 
echo "IP: $ip" 
echo "CPU: $cpu%" 
# 注意,在使用变量获取信息时,需要使用 $(...) 语法来执行命令并将结果赋给变量 
# 执行脚本并查看输出结果 
[opencloud@server ~]$ bash systeminfo-output.sh 

(2)编写Shell脚本,输出$0、$1、$2、$3、$@、$#、$!、$?、$*、$$等位置参数的变量信息。


[opencloud@server ~]$ vim location-output.sh
#!/bin/bash
# 提示用户输入他们的姓名
echo "Please enter your name: "
read name
# 输出各变量的值
echo "\$0 is: $0"
echo "\$1 is: $1"
echo "\$2 is: $2"
echo "\$3 is: $3"
echo "\$@ is: $@"
echo "\$# is: $#"
echo "\$! is: $!"
echo "\$? is: $?"
echo "\$* is: $*"
echo "\$\$ is: $$"
echo "Name is: $name"
# 执行脚本并查看输出结果
[opencloud@server ~]$ bash location-output.sh one two three
Please enter your name:
one two three
$0 is: location-output.sh
$1 is: one
$2 is: two
$3 is: three
$@ is: one two three
$# is: 3
$! is:
$? is: 0
$* is: one two three
$$ is: 2859485
Name is: one two three

(3)输出当前目的日历信息,并使用printf命令格式化输出。


[opencloud@server ~]$ vim date-output.sh
#!/bin/bash
# 获取当前月份和年份
month=$(date +%m)
year=$(date +%Y)
# 使用cal命令获取当前月的日历
calendar=$(cal $month $year)
# 使用printf命令格式化输出
printf "Calendar for %s %s:\n\n" $month $year
printf "%s\n" "$calendar"
# 执行脚本并查看输出结果
[opencloud@server ~]$ bash date-output.sh 
Calendar for 01 2023: 
    January 2023     
Su Mo Tu We Th Fr Sa 
 1  2  3  4  5  6  7 
 8  9 10 11 12 13 14 
15 16 17 18 19 20 21 
22 23 24 25 26 27 28 
29 30 31 

(4)编写Shell脚本,使用变量并结合printf命令格式化输出当前系统的磁盘分区、swap分区、逻辑卷信息等。


[opencloud@server ~]$ vim disk-output.sh
#!/bin/bash
# 使用df命令获取磁盘分区信息
disk_partitions=$(df -h)
# 使用swapon命令获取swap分区信息
swap_partitions=$(swapon -s)
# 使用lvdisplay命令获取逻辑卷信息
logical_volumes=$(lvdisplay)

# 使用printf命令格式化输出
printf "Disk Partitions:\n\n"
printf "%s\n" "$disk_partitions"
printf "\nSwap Partitions:\n\n"
printf "%s\n" "$swap_partitions"
printf "\nLogical Volumes:\n\n"
printf "%s\n" "$logical_volumes"
# 执行脚本并查看输出结果
[opencloud@server ~]$ bash disk-output.sh