当前位置: 首页 > news >正文

Shell脚本基础——实训项目任务

项目一 项目实训 (初始Shell脚本)

项目一 项目实训 (初始Shell脚本)项目实施任务一 输入输出重定向任务二 数据输入输出操作任务三 Shell变量操作任务四 算术运算符操作任务五 设置环境变量


【实训任务】

本实训的主要任务是通过编写简单的shell脚本,完成使用数据输入输出命令获取用户输入,将脚本输出写入文件,以及重定向脚本的输入输出操作,并通过设置变量存储不同类型的数据,以便在脚本中处理数据。

【实训目的】

(1)掌握shell脚本的基本格式。

(2)掌握输入输出重定向和管道符的使用方法。

(3)掌握数据输入输出命令的使用方法。

(4)掌握变量的定义和调用方法。

(5)掌握运算符的使用方法。

【实训内容】

(1)使用输入输出重定向,将Shell脚本的输出重定向到文件。

(2)编写shell脚本,使用echo、printf、read命令实现数据的输入输出。

(3)编写shell脚本,定义和调用变量,并在配置文件中永久设置环境变量。

(4)编写shell脚本,进行算数运算。

【实训环境】

在进行本项目的实训操作前,提前准备好Linux操作系统环境,RHEL、CentOS Stream、Debian、Ubuntu、华为openEuler、麒麟openKylin等常见Linux发行版本都可以进行项目实训。


项目实施

任务一 输入输出重定向

1.任务描述

编写简单的shell脚本,使用输入输入重定向及管道符将脚本的信息重定向到文件。

2.任务实施

(1)创建shell脚本firstscript.sh,使用vim文本编辑器在用户家目录下创建一个新的文本文件,将其命名为firstscript.sh,插入以下文本并保存文件,将输入重定向到文件中。

[root@redhat01 ~]# vim input.txt
[root@redhat01 ~]# cat input.txt 
2021
2022
2023
2024
2035
2025
1999
2000
2001
[root@redhat01 ~]# vim firstscript.sh
[root@redhat01 ~]# cat firstscript.sh 
#!/bin/bash
# 从文件中读取输入
sort < input.txt
[root@redhat01 ~]# 

(2)使用bash命令执行脚本。

[root@redhat01 ~]# chmod +x firstscript.sh 
[root@redhat01 ~]# bash firstscript.sh 
1999
2000
2001
2021
2022
2023
2024
2025
2035
[root@redhat01 ~]# cat input.txt 
2021
2022
2023
2024
2035
2025
1999
2000
2001
[root@redhat01 ~]#

(3)将输出写入文件中。

[root@redhat01 ~]# ls -l > output.txt

(4)追加输出到文件中。

[root@redhat01 ~]# ls -l >> output.txt 

(5)将标准错误输出重定向到文件中。

[root@redhat01 ~]# ls -l /non-existent-dir 2>error.log

(6)使用输入重定向忽略read命令的输入。

[root@redhat01 ~]# vim file.sh
[root@redhat01 ~]# cat file.sh 
#!/bin/bash
# 忽略read命令的输入
read -p "Enter your name: " name < /dev/null
echo "Your name is : $name"

(7)从标准输入中读取多行文本。

[root@redhat01 ~]# vim file.sh    
[root@redhat01 ~]# cat file.sh 
#!/bin/bash
echo "Enter some text (Ctrl+D to finish):"
cat << EOF
This is line 1
This is line 2
This is line 3
EOF

(8)将多行文本输入到文件。

[root@redhat01 ~]# vim file.sh 
[root@redhat01 ~]# cat file.sh 
#!/bin/bash
cat << EOF > output.txt
This is new line 1
This is new line 2
This is new line 3
EOF

(9)将多行文本追加到文件。

[root@redhat01 ~]# vim file.sh 
[root@redhat01 ~]# cat file.sh 
#!/bin/bash
cat << EOF >> output.txt
This is line 4
This is line 5
This is line 6
EOF


任务二 数据输入输出操作

1.任务描述

编写shell脚本,通过数据输入输出与用户交互,使用户输入数据或输出信息;通过数据输入输出读取文件中的数据或写入数据到文件中;通过数据输入输出可以与其他程序或系统交互,以获取或输出数据。使用read命令读取用户输入的数据,使用echo或printf命令输出信息。

2.任务实施

(1)使用read命令读取用户输入的数据。

[root@redhat01 ~]# vim printf01.sh
[root@redhat01 ~]# cat printf01.sh 
#!/bin/bash
# 读入用户输入的数字
read -p "Enter a number: " num
# 输出用户输入的数字
echo "You entered: $num"
# 执行脚本并查看输出结果
[root@redhat01 ~]# chmod +x printf01.sh 
[root@redhat01 ~]# bash printf01.sh 
Enter a number: 100
You entered: 100

(2)使用read命令读取多个数据。

[root@redhat01 ~]# vim printf02.sh
[root@redhat01 ~]# cat printf02.sh 
#!/bin/bash
# 读取多个数据
read -p "Enter your name, age and gender: " name age gender
# 输出数据
echo "Name: $name"
echo "Age: $age"
echo "Gender: $gender"
# 执行脚本并查看输出结果
[root@redhat01 ~]# bash printf02.sh 
Enter your name, age and gender: Tom 18 male
Name: Tom
Age: 18
Gender: male
[root@redhat01 ~]# 

(3)使用read命令读取文件中的每一行内容。

[root@redhat01 ~]# vim file.txt
[root@redhat01 ~]# cat file.txt 
www.opencloud.fun
www.redhat.com
Linux Shell and Ansible
[root@redhat01 ~]# vim printf03.sh
[root@redhat01 ~]# cat printf03.sh 
#!/bin/bash
# 读取文件中的每一行内容
while read line; do# 输出读取的每一行内容echo $line
done < file.txt
# 执行脚本并查看输出结果
[root@redhat01 ~]# chmod +x printf03.sh 
[root@redhat01 ~]# bash printf03.sh 
www.opencloud.fun
www.redhat.com
Linux Shell and Ansible

(4)使用printf命令格式化输出数字。

[root@redhat01 ~]# vim printf04.sh
[root@redhat01 ~]# cat printf04.sh 
#!/bin/bash
printf "%.2f\n" 3.14159265
printf "%.4f\n" 3.14159265
printf "%d\n" 123456
printf "%x\n" 255
# 执行脚本并查看输出结果
[root@redhat01 ~]# chmod +x printf04.sh 
[root@redhat01 ~]# bash printf04.sh 
3.14
3.1416
123456
ff

(5)使用printf命令格式化输出字符串。

[root@redhat01 ~]# vim printf05.sh
[root@redhat01 ~]# cat printf05.sh 
#!/bin/bash
printf "%-10s %-8s %-4s\n" Name Gender Age
printf "%-10s %-8s %-4d\n" John Male 30
printf "%-10s %-8s %-4d\n" Mary Female 25
# 执行脚本并查看输出结果
[root@redhat01 ~]# bash printf05.sh 
Name       Gender   Age 
John       Male     30  
Mary       Female   25  
​

(6)使用printf命令输出多个字符和字符串。

[root@redhat01 ~]# vim printf06.sh
[root@redhat01 ~]# cat printf06.sh 
#!/bin/bash
printf "%s %s %s\n" A B C
printf "%s %s %s\n" A B C D E F G
# 定义字符变量
char='a'
# 使用%c格式化输出字符
printf "The character is %c.\n" $char
# 定义字符串
string="Hello,World!"
# 使用%s格式化输出字符串
printf "The string is %s.\n" "$string"
# 使用%-10s格式化输出左对齐的字符串
printf "%-10s\n" "$string"
# 执行脚本并查看输出结果
[root@redhat01 ~]# chmod +x printf06.sh 
[root@redhat01 ~]# bash printf06.sh 
A B C
A B C
D E F
G  
The character is a.
The string is Hello,World!.
Hello,World!

(7)使用printf命令输出变量值。

[root@redhat01 ~]# vim printf07.sh
[root@redhat01 ~]# cat printf07.sh 
#!/bin/bash
name="John"
age=30
printf "My name is %s, and I am %d years old.\n" "$name" "$age"
# 上面的脚本中定义两个变量:name 和 age
# 使用printf命令输出字符串,并使用%s和%d占位符引用变量
# printf命令可以使用多个参数,使用变量时需要使用$调用变量
# 执行脚本并查看输出结果
[root@redhat01 ~]# chmod +x printf07.sh 
[root@redhat01 ~]# bash printf07.sh 
My name is John, and I am 30 years old.


任务三 Shell变量操作

1.任务描述

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

2. 任务实施

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

[root@redhat01 ~]# vim systeminfo-output.sh
[root@redhat01 ~]# cat 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%"
# 注意,在使用变量获取信息时,需要使用$(...)语法来执行命令并将结果赋给变量
# 执行脚本并查看输出结果
[root@redhat01 ~]# chmod +x systeminfo-output.sh 
[root@redhat01 ~]# bash systeminfo-output.sh 
Memory: Total: 1923MB, Used: 943MB, Free: 509MB
IP: 192.168.10.10
172.17.0.1
CPU: 0.0%

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

[root@redhat01 ~]# vim location-output.sh
[root@redhat01 ~]# cat 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"
# 执行脚本并查看输出结果
[root@redhat01 ~]# chmod +x location-output.sh 
[root@redhat01 ~]# 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: 1906
Name is: one two three
[root@redhat01 ~]# 

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

[root@redhat01 ~]# vim date-output.sh
[root@redhat01 ~]# cat 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"
# 执行脚本并查看输出结果
[root@redhat01 ~]# chmod +x date-output.sh 
[root@redhat01 ~]# bash date-output.sh 
Calendar for 09 2024:
​九月 2024     
一 二 三 四 五 六 日12  3  4  5  6  7  89 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30                  
[root@redhat01 ~]# 

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

[root@redhat01 ~]# vim disk-output.sh
[root@redhat01 ~]# cat 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"
# 执行脚本并查看结果
[root@redhat01 ~]# chmod +x disk-output.sh 
[root@redhat01 ~]# bash disk-output.sh 
Disk Partitions:
​
文件系统               容量  已用  可用 已用% 挂载点
devtmpfs               4.0M     0  4.0M    0% /dev
tmpfs                  962M     0  962M    0% /dev/shm
tmpfs                  385M  6.2M  379M    2% /run
/dev/mapper/rhel-root   17G  4.9G   12G   30% /
/dev/nvme0n1p2         960M  260M  701M   27% /boot
/dev/sr0               9.9G  9.9G     0  100% /mnt
/dev/nvme0n1p1         599M  7.0M  592M    2% /boot/efi
tmpfs                  193M   52K  193M    1% /run/user/42
tmpfs                  193M   36K  193M    1% /run/user/0
​
Swap Partitions:
​
Filename                                Type            Size            Used            Priority
/dev/dm-1                               partition       2097148         0               -2
​
Logical Volumes:
​--- Logical volume ---LV Path                /dev/rhel/swapLV Name                swapVG Name                rhelLV UUID                jc19F4-wvpM-m1yp-dHIL-G1hi-ZHMW-DfYr3XLV Write Access        read/writeLV Creation host, time redhat01, 2024-05-27 15:54:27 +0800LV Status              available# open                 2LV Size                2.00 GiBCurrent LE             512Segments               1Allocation             inheritRead ahead sectors     auto- currently set to     256Block device           253:1--- Logical volume ---LV Path                /dev/rhel/rootLV Name                rootVG Name                rhelLV UUID                E8Ircp-j40I-wBqh-5Zcu-OwyB-419p-311plVLV Write Access        read/writeLV Creation host, time redhat01, 2024-05-27 15:54:27 +0800LV Status              available# open                 1LV Size                16.41 GiBCurrent LE             4201Segments               1Allocation             inheritRead ahead sectors     auto- currently set to     256Block device           253:0[root@redhat01 ~]# 


任务四 算术运算符操作

1.任务描述

在shell中,算术运算主要用于执行各种数学计算。常见的算术运算包括加法、减法、乘法、除法、求余数、幂运算等。

2.任务实施

(1)编写shell脚本,计算三角形的面积、圆的面积和周长,输出结果。

[root@redhat01 ~]# vim calculate01.sh
[root@redhat01 ~]# cat calculate01.sh 
#!/bin/bash
# 定义三角形的底和高
triangle_base=6
triangle_height=8
# 计算三角形的面积
triangle_area=$(echo "scale=2; $triangle_base * $triangle_height / 2" | bc)
# 定义圆的半径
circle_radius=10
# 计算圆的面积
circle_area=$(echo "scale=2; 3.14 * $circle_radius * $circle_radius" | bc)
# 计算圆的周长
circle_circumference=$(echo "scale=2; 2 * 3.14 * $circle_radius" | bc)
# 输出三角形的面积、圆的面积和周长
echo "三角形面积:$triangle_area"
echo "圆的面积:$circle_area"
echo "圆的周长:$circle_circumference"
# 执行脚本并查看输出结果
​
[root@redhat01 ~]# chmod +x calculate01.sh 
[root@redhat01 ~]# bash calculate01.sh 
三角形面积:24.00
圆的面积:314.00
圆的周长:62.80

(2)编写shell脚本,使用bc命令进行算术运算。

[root@redhat01 ~]# vim calculate02.sh
[root@redhat01 ~]# cat calculate02.sh 
#!/bin/bash
# 定义变量
a=10
b=20
c=30
# 使用bc命令进行算术运算
result1=$(echo "$a + $b" | bc)
result2=$(echo "$a * $b" | bc)
result3=$(echo "scale=2; $a / $b" | bc)
result4=$(echo "$c % $a" | bc)
result5=$(echo "scale=3; $a ^ $b" | bc)
result6=$(echo "$a + $b * $c" | bc)
result7=$(echo "$a * $b + $c" | bc)
result8=$(echo "$c % $a + $b" | bc)
# 输出结果
echo "a + b = $result1"
echo "a * b = $result2"
echo "a / b = $result3"
echo "c % a = $result4"
echo "a ^ b = $result5"
echo "a + b * c = $result6"
echo "a * b + c = $result7"
echo "c % a + b = $result8"
# 执行脚本并查看输出结果
[root@redhat01 ~]# bash calculate02.sh 
a + b = 30
a * b = 200
a / b = .50
c % a = 0
a ^ b = 100000000000000000000
a + b * c = 610
a * b + c = 230
c % a + b = 20
[root@redhat01 ~]# 

(3)编写shell脚本,使用let命令进行算术运算。

[root@redhat01 ~]# vim calculate03.sh
[root@redhat01 ~]# cat calculate03.sh 
#!/bin/bash
# 定义变量
a=10
b=20
c=30
# 使用let命令进行算术运算
let result1=a+b
let result2=a*b
let result3=c%a
let result4=a**b
let result5=a+b*c
let result6=a*b+c
let result7=c%a+b
# 输出结果
echo "a + b = $result1"
echo "a * b = $result2"
echo "c % a = $result3"
echo "a ^ b = $result4"
echo "a + b * c = $result5"
echo "a * b + c = $result6"
echo "c % a + b = $result7"
# 执行脚本并查看结果
[root@redhat01 ~]# chmod +x calculate03.sh 
[root@redhat01 ~]# bash calculate03.sh 
a + b = 30
a * b = 200
c % a = 0
a ^ b = 7766279631452241920
a + b * c = 610
a * b + c = 230
c % a + b = 20
[root@redhat01 ~]# 

(4)编写shell脚本,使用expr命令进行算术运算。

[root@redhat01 ~]# vim calculate04.sh
[root@redhat01 ~]# cat calculate04.sh 
#!/bin/bash
# 定义变量
a=10
b=20
c=30
# 使用expr命令进行算术运算
result1=`expr $a + $b`
result2=`expr $a \* $b`
result3=`expr $c % $a`
result4=`expr $a \* $a \* $a`
result5=`expr $a + $b \* $c`
result6=`expr $a \* $b + $c`
result7=`expr $c % $a + $b`
# 输出结果
echo "a + b = $result1"
echo "a * b = $result2"
echo "c % a = $result3"
echo "a ^ 3 = $result4"
echo "a + b * c = $result5"
echo "a * b + c = $result6"
echo "c % a + b = $result7"
# 执行脚本并查看输出结果
[root@redhat01 ~]# chmod +x calculate04.sh 
[root@redhat01 ~]# bash calculate04.sh 
a + b = 30
a * b = 200
c % a = 0
a ^ 3 = 1000
a + b * c = 610
a * b + c = 230
c % a + b = 20
[root@redhat01 ~]# 

(5)编写shell脚本,使用$((...))表达式进行算术运算。

[root@redhat01 ~]# vim calculate05.sh
[root@redhat01 ~]# cat calculate05.sh 
#!/bin/bash
# 定义变量
a=10
b=20
c=30
# 计算结果
result1=$((a + b))
result2=$((a * b))
result3=$((a / b))
result4=$((a % b))
result5=$((a ** b))
result6=$((a + b * c))
result7=$((a * b + c))
result8=$((c % a + b))
# 输出结果
echo "a + b = $result1"
echo "a * b = $result2"
echo "a / b = $result3"
echo "a % b = $result4"
echo "a ^ b = $result5"
echo "a + b * c = $result6"
echo "a * b + c = $result7"
echo "c % a + b = $result8"
# 执行脚本并查看输出结果
[root@redhat01 ~]# chmod +x calculate05.sh 
[root@redhat01 ~]# bash calculate05.sh 
a + b = 30
a * b = 200
a / b = 0
a % b = 10
a ^ b = 7766279631452241920
a + b * c = 610
a * b + c = 230
c % a + b = 20
[root@redhat01 ~]# 


任务五 设置环境变量

1.任务描述

在Linux操作系统中,设置java环境变量涉及JAVA_HOME和PATH两个主要的环境变量,将环境变量写入配置文件,可以确保在系统重启或用户重新登录后环境变量依然有效。

2.任务实施

(1)安装OpenJDK 11。

[root@redhat01 ~]# dnf -y install java-11-openjdk java-11-openjdk-devel
正在更新 Subscription Management 软件仓库。
无法读取客户身份
​
本系统尚未在权利服务器中注册。可使用 subscription-manager 进行注册。
​
上次元数据过期检查:0:16:44 前,执行于 2024年09月26日 星期四 21时16分51秒。
依赖关系解决。
=======================================================================================================软件包                           架构           版本                          仓库               大小
=======================================================================================================
安装:java-11-openjdk                  x86_64         1:11.0.20.0.8-3.el9           AppStream         441 kjava-11-openjdk-devel            x86_64         1:11.0.20.0.8-3.el9           AppStream         3.3 M
安装依赖关系:copy-jdk-configs                 noarch         4.0-3.el9                     AppStream          29 kjava-11-openjdk-headless         x86_64         1:11.0.20.0.8-3.el9           AppStream          40 Mjavapackages-filesystem          noarch         6.0.0-4.el9                   AppStream          17 klksctp-tools                     x86_64         1.0.19-2.el9                  BaseOS             98 klua                              x86_64         5.4.4-4.el9                   AppStream         192 klua-posix                        x86_64         35.0-8.el9                    AppStream         155 kmkfontscale                      x86_64         1.2.1-3.el9                   AppStream          34 kttmkfdir                         x86_64         3.0.9-65.el9                  AppStream          55 ktzdata-java                      noarch         2023c-1.el9                   AppStream         234 kxorg-x11-fonts-Type1             noarch         7.5-33.el9                    AppStream         509 k
​
事务概要
=======================================================================================================
安装  12 软件包
​
总计:45 M
安装大小:187 M
下载软件包:
运行事务检查
事务检查成功。
运行事务测试
事务测试成功。
运行事务运行脚本: copy-jdk-configs-4.0-3.el9.noarch                                                      1/1 运行脚本: java-11-openjdk-headless-1:11.0.20.0.8-3.el9.x86_64                                    1/1 准备中  :                                                                                        1/1 安装    : lksctp-tools-1.0.19-2.el9.x86_64                                                      1/12 安装    : tzdata-java-2023c-1.el9.noarch                                                        2/12 安装    : ttmkfdir-3.0.9-65.el9.x86_64                                                          3/12 安装    : mkfontscale-1.2.1-3.el9.x86_64                                                        4/12 安装    : xorg-x11-fonts-Type1-7.5-33.el9.noarch                                                5/12 运行脚本: xorg-x11-fonts-Type1-7.5-33.el9.noarch                                                5/12 安装    : lua-posix-35.0-8.el9.x86_64                                                           6/12 安装    : lua-5.4.4-4.el9.x86_64                                                                7/12 安装    : copy-jdk-configs-4.0-3.el9.noarch                                                     8/12 安装    : javapackages-filesystem-6.0.0-4.el9.noarch                                            9/12 安装    : java-11-openjdk-headless-1:11.0.20.0.8-3.el9.x86_64                                  10/12 运行脚本: java-11-openjdk-headless-1:11.0.20.0.8-3.el9.x86_64                                  10/12 安装    : java-11-openjdk-1:11.0.20.0.8-3.el9.x86_64                                           11/12 运行脚本: java-11-openjdk-1:11.0.20.0.8-3.el9.x86_64                                           11/12 安装    : java-11-openjdk-devel-1:11.0.20.0.8-3.el9.x86_64                                     12/12 运行脚本: java-11-openjdk-devel-1:11.0.20.0.8-3.el9.x86_64                                     12/12 运行脚本: copy-jdk-configs-4.0-3.el9.noarch                                                    12/12 运行脚本: java-11-openjdk-headless-1:11.0.20.0.8-3.el9.x86_64                                  12/12 运行脚本: java-11-openjdk-1:11.0.20.0.8-3.el9.x86_64                                           12/12 运行脚本: java-11-openjdk-devel-1:11.0.20.0.8-3.el9.x86_64                                     12/12 验证    : copy-jdk-configs-4.0-3.el9.noarch                                                     1/12 验证    : java-11-openjdk-1:11.0.20.0.8-3.el9.x86_64                                            2/12 验证    : java-11-openjdk-devel-1:11.0.20.0.8-3.el9.x86_64                                      3/12 验证    : java-11-openjdk-headless-1:11.0.20.0.8-3.el9.x86_64                                   4/12 验证    : javapackages-filesystem-6.0.0-4.el9.noarch                                            5/12 验证    : lua-5.4.4-4.el9.x86_64                                                                6/12 验证    : lua-posix-35.0-8.el9.x86_64                                                           7/12 验证    : mkfontscale-1.2.1-3.el9.x86_64                                                        8/12 验证    : ttmkfdir-3.0.9-65.el9.x86_64                                                          9/12 验证    : tzdata-java-2023c-1.el9.noarch                                                       10/12 验证    : xorg-x11-fonts-Type1-7.5-33.el9.noarch                                               11/12 验证    : lksctp-tools-1.0.19-2.el9.x86_64                                                     12/12 
已更新安装的产品。
​
已安装:copy-jdk-configs-4.0-3.el9.noarch                java-11-openjdk-1:11.0.20.0.8-3.el9.x86_64         java-11-openjdk-devel-1:11.0.20.0.8-3.el9.x86_64 java-11-openjdk-headless-1:11.0.20.0.8-3.el9.x86_64javapackages-filesystem-6.0.0-4.el9.noarch       lksctp-tools-1.0.19-2.el9.x86_64                   lua-5.4.4-4.el9.x86_64                           lua-posix-35.0-8.el9.x86_64                        mkfontscale-1.2.1-3.el9.x86_64                   ttmkfdir-3.0.9-65.el9.x86_64                       tzdata-java-2023c-1.el9.noarch                   xorg-x11-fonts-Type1-7.5-33.el9.noarch             
​
完毕!
[root@redhat01 ~]# 

(2)创建Java环境变量脚本/etc/profile.d/java.sh。

[root@redhat01 ~]# cat > /etc/profile.d/java.sh <<'EOF'
> export JAVA_HOME=$(dirname $(dirname $(readlink $(readlink $(which java)))))
> export PATH=$PATH:$JAVA_HOME/bin
> EOF

(3)执行source命令,使Java环境变量生效。

[root@redhat01 ~]# source /etc/profile.d/java.sh 

相关文章:

Shell脚本基础——实训项目任务

项目一 项目实训 (初始Shell脚本) 项目一 项目实训 (初始Shell脚本)项目实施任务一 输入输出重定向任务二 数据输入输出操作任务三 Shell变量操作任务四 算术运算符操作任务五 设置环境变量 【实训任务】 本实训的主要任务是通过编写简单的shell脚本&#xff0c;完成使用数据…...

Eclipse Memory Analyzer (MAT)提示No java virtual machine was found ...解决办法

1&#xff0c;下载mat后安装&#xff0c;打开时提示 jdk版本低&#xff0c;需要升级到jdk17及以上版本&#xff0c;无奈就下载了jdk17&#xff0c;结果安装后提示没有jre环境&#xff0c;然后手动生成jre目录&#xff0c;命令如下&#xff1a; 进入jdk17目录&#xff1a;执行&…...

【C++篇】深度剖析C++ STL:玩转 list 容器,解锁高效编程的秘密武器

文章目录 C list 容器详解&#xff1a;从入门到精通前言第一章&#xff1a;C list 容器简介1.1 C STL 容器概述1.2 list 的特点 第二章&#xff1a;list 的构造方法2.1 常见构造函数2.1.1 示例&#xff1a;不同构造方法2.1.2 相关文档 第三章&#xff1a;list 迭代器的使用3.1 …...

植物大战僵尸杂交版V2.5.1下载(最新版)

2.5.1版本更新公告&#xff1a; 在最新的2.5.1版本中&#xff0c;游戏对“两面夹击”关卡进行了多项重要调整。出怪倍率和种类均有所降低&#xff0c;部分关卡的初始阳光量也得到了调整&#xff0c;以增强玩家的策略性。同时&#xff0c;玩家可以在这些关卡中使用投手类植物&a…...

基于nodejs+vue的游戏陪玩系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码 精品专栏&#xff1a;Java精选实战项目…...

SVN文件不显示修改状态图标

今天安装试用SVN时发现文件不显示修改状态 以下为解决方法&#xff1a; 1&#xff0c;在有.svn的文件夹中右键--tortoiseSvn--setting 2&#xff0c;选中icon Overlays&#xff0c;右侧的status cache 选shell 3&#xff0c;点击icon set 如下图所示 4&#xff0c;修改icon…...

GB28181语音对讲协议详解

GB28181-2016语音对讲流程如下图1所示&#xff1a; 图1.语音对讲流程。 其中, 信令 1 、2 、 3 、 4 为语音广播通知、 语音广播应答消息流程; 信令 5 、 1 2 、 1 3 、 1 4 、 1 5 、 1 6 为 S I P 服务器接收到客户端的呼叫请求通过 B 2 B UA 代理方式建立语音流接收者与媒…...

JavaScript 数据可视化:前端开发的核心工具

随着互联网和大数据的快速发展&#xff0c;数据呈爆炸式增长&#xff0c;如何有效地展示和理解数据成为了一项关键技能。JavaScript 作为前端开发的主要语言&#xff0c;不仅在构建网页方面无可替代&#xff0c;也在数据可视化领域发挥了重要作用。从简单的图表到复杂的交互式展…...

[Redis][哨兵][上]详细讲解

目录 0.前言1.基本概念1.相关名词解释2.主从复制的问题3.人工恢复主节点故障4.哨兵自动恢复主节点故障 0.前言 说明&#xff1a;该章节相关操作不需要记忆&#xff0c;理解流程和原理即可&#xff0c;用的时候能自主查到即可Redis的主从复制模式下&#xff0c;⼀旦主节点由于故…...

如何展开浏览器开发者模式的Fetch/XHR

说明&#xff1a;大多数程序员都用浏览器的F12&#xff0c;开发者模式查看接口&#xff0c;我也不例外。我常用下面这个选项&#xff0c;它会过滤掉掉其他文档、样式请求&#xff0c;只展示访问服务器的接口请求 有次&#xff0c;不知道点了什么&#xff0c;这个菜单消失找不…...

Pydantic 是一个强大的 Python 库

Pydantic 是一个强大的 Python 库&#xff0c;专门用于数据验证和设置管理。以下是对 Pydantic 的详细介绍&#xff1a; 一、主要功能和特点 数据验证&#xff1a; Pydantic 通过 Python 类型注解来定义数据模型&#xff0c;并自动验证输入数据是否符合预定义的类型和结构。提…...

每日OJ题_牛客_NC40链表相加(二)_链表+高精度加法_C++_Java

目录 牛客_NC40链表相加&#xff08;二&#xff09;_链表高精度加法 题目解析 C代码 Java代码 牛客_NC40链表相加&#xff08;二&#xff09;_链表高精度加法 链表相加(二)_牛客题霸_牛客网 题目解析 模拟⾼精度加法的过程&#xff0c;只不过是在链表中模拟。 C代码 /*…...

Dubbo快速入门(一):分布式与微服务、Dubbo基本概念

文章目录 一、分布式与微服务概念1.大型互联网架构目标2.集群和分布式&#xff08;1&#xff09;集群 (Cluster)&#xff08;2&#xff09;分布式计算 (Distributed Computing)&#xff08;3&#xff09;集群与分布式的关系&#xff08;4&#xff09;实践中的应用案例 3.架构演…...

jmeter性能测试---csv数据文件设置

&#xff08;1&#xff09;什么时候使用CSV数据文件设置&#xff1f; 当不同的用户&#xff0c;或者同一用户多次循环时&#xff0c;都可以获取到不同的值 &#xff08;2&#xff09;使用CSV数据文件设置进行参数化的步骤&#xff1f; 实例&#xff1a; 请求&#xff1a;htt…...

交换基础【计算机网络】

交换基础 1、交换机的工作原理有哪4项操作&#xff0c;地址表如何建立的&#xff1f; 4项基本操作 丢弃 当本端口下的主机访问已知本端口下的主机时丢弃 转发 当某端口下的主机访问已知某端口下的主机时转发 扩散 当某端口下的主机访问未知端口下的主机时要扩散 广播 当某…...

Android12的netd分析

1.文件位置 system/netd/server/目录下的main.cpp和Android.bp 可知编译会生成netd的可执行程序。 2.main函数的流程 int main() {Stopwatch s; 。。。。。。。 // 启动NetlinkManager服务NetlinkManager *nm NetlinkManager::Instance();if (nm nullptr) {ALOGE("Una…...

OpenCV图像文件读写(6)将图像数据写入文件的函数imwrite()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 将图像保存到指定的文件中。 函数 imwrite 将图像保存到指定的文件中。图像格式是根据文件名扩展名选择的&#xff08;参见 cv::imread 获取扩展…...

JVM(HotSpot):方法区(Method Area)

文章目录 一、内存结构图二、方法区定义三、内存溢出问题四、常量池与运行时常量池 一、内存结构图 1.6 方法区详细结构图 1.8方法区详细结构图 1.8后&#xff0c;方法区是JVM内存的一个逻辑结构&#xff0c;真实内存用的本地物理内存。 且字符串常量池从常量池中移入堆中。 …...

JWT的基础与使用

JWT&#xff08;JSON Web Token&#xff09; 是一种用于在各方之间传输信息的紧凑、安全的方式&#xff0c;常用于身份验证和授权。它以令牌的形式将用户信息编码后传输&#xff0c;可以确保数据的完整性和安全性。 1.JWT的结构 JWT 是一个基于 JSON 的令牌&#xff0c;由三部…...

处理 VA02修改行项目计划行(SCHEDULE LINES )报错:不可能确定一个消耗帐户

用户修改销售订单行项目 计划行(SCHEDULE LINES) &#xff0c;从 “CN”改为“CB”时候发生报错提示&#xff1a;不可能确定一个消耗帐户。 Not possible to determine a consumption account Message No. 06138 Diagnosis The system was not able to determine a consumpti…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)

2025年能源电力系统与流体力学国际会议&#xff08;EPSFD 2025&#xff09;将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会&#xff0c;EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

mongodb源码分析session执行handleRequest命令find过程

mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程&#xff0c;并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令&#xff0c;把数据流转换成Message&#xff0c;状态转变流程是&#xff1a;State::Created 》 St…...

MMaDA: Multimodal Large Diffusion Language Models

CODE &#xff1a; https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA&#xff0c;它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构&#xf…...

linux arm系统烧录

1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 &#xff08;忘了有没有这步了 估计有&#xff09; 刷机程序 和 镜像 就不提供了。要刷的时…...

Python实现prophet 理论及参数优化

文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候&#xff0c;写过一篇简单实现&#xff0c;后期随着对该模型的深入研究&#xff0c;本次记录涉及到prophet 的公式以及参数调优&#xff0c;从公式可以更直观…...

SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现

摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序&#xff0c;以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务&#xff0c;提供稳定高效的数据处理与业务逻辑支持&#xff1b;利用 uniapp 实现跨平台前…...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心

当仓库学会“思考”&#xff0c;物流的终极形态正在诞生 想象这样的场景&#xff1a; 凌晨3点&#xff0c;某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径&#xff1b;AI视觉系统在0.1秒内扫描包裹信息&#xff1b;数字孪生平台正模拟次日峰值流量压力…...

JVM 内存结构 详解

内存结构 运行时数据区&#xff1a; Java虚拟机在运行Java程序过程中管理的内存区域。 程序计数器&#xff1a; ​ 线程私有&#xff0c;程序控制流的指示器&#xff0c;分支、循环、跳转、异常处理、线程恢复等基础功能都依赖这个计数器完成。 ​ 每个线程都有一个程序计数…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...

华为OD机考-机房布局

import java.util.*;public class DemoTest5 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseSystem.out.println(solve(in.nextLine()));}}priv…...