上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