当前位置: 首页 > 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…...

Android Wi-Fi 连接失败日志分析

1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分&#xff1a; 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析&#xff1a; CTR…...

golang循环变量捕获问题​​

在 Go 语言中&#xff0c;当在循环中启动协程&#xff08;goroutine&#xff09;时&#xff0c;如果在协程闭包中直接引用循环变量&#xff0c;可能会遇到一个常见的陷阱 - ​​循环变量捕获问题​​。让我详细解释一下&#xff1a; 问题背景 看这个代码片段&#xff1a; fo…...

在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能

下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能&#xff0c;包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...

Debian系统简介

目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版&#xff…...

MMaDA: Multimodal Large Diffusion Language Models

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

关于 WASM:1. WASM 基础原理

一、WASM 简介 1.1 WebAssembly 是什么&#xff1f; WebAssembly&#xff08;WASM&#xff09; 是一种能在现代浏览器中高效运行的二进制指令格式&#xff0c;它不是传统的编程语言&#xff0c;而是一种 低级字节码格式&#xff0c;可由高级语言&#xff08;如 C、C、Rust&am…...

Mobile ALOHA全身模仿学习

一、题目 Mobile ALOHA&#xff1a;通过低成本全身远程操作学习双手移动操作 传统模仿学习&#xff08;Imitation Learning&#xff09;缺点&#xff1a;聚焦与桌面操作&#xff0c;缺乏通用任务所需的移动性和灵活性 本论文优点&#xff1a;&#xff08;1&#xff09;在ALOHA…...

Java编程之桥接模式

定义 桥接模式&#xff08;Bridge Pattern&#xff09;属于结构型设计模式&#xff0c;它的核心意图是将抽象部分与实现部分分离&#xff0c;使它们可以独立地变化。这种模式通过组合关系来替代继承关系&#xff0c;从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...

uniapp 字符包含的相关方法

在uniapp中&#xff0c;如果你想检查一个字符串是否包含另一个子字符串&#xff0c;你可以使用JavaScript中的includes()方法或者indexOf()方法。这两种方法都可以达到目的&#xff0c;但它们在处理方式和返回值上有所不同。 使用includes()方法 includes()方法用于判断一个字…...

Chrome 浏览器前端与客户端双向通信实战

Chrome 前端&#xff08;即页面 JS / Web UI&#xff09;与客户端&#xff08;C 后端&#xff09;的交互机制&#xff0c;是 Chromium 架构中非常核心的一环。下面我将按常见场景&#xff0c;从通道、流程、技术栈几个角度做一套完整的分析&#xff0c;特别适合你这种在分析和改…...