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

【AI基础】pytorch lightning 基础学习

传统pytorch工作流是首先定义模型框架&#xff0c;然后写训练和验证&#xff0c;测试循环代码。训练&#xff0c;验证&#xff0c;测试代码写起来比较繁琐。这里介绍使用pytorch lightning 部署模型&#xff0c;加速模型训练和验证&#xff0c;记录。 准备工作 1 安装pytorch…...

高通量测序技术--组蛋白甲基化修饰、DNA亲和纯化测序,教授(优青)团队指导:从实验设计、结果分析到SCI论文辅助

组蛋白甲基化修饰工具(H3K4me3 ChIP-seq)组蛋白甲基化类型也有很多种&#xff0c;包括赖氨酸甲基化位点H3K4、H3K9、H3K27、H3K36、H3K79和H4K20等。组蛋白H3第4位赖氨酸的甲基化修饰(H3K4)在进化上高度保守&#xff0c;是被研究最多的组蛋白修饰之一。 DNA亲和纯化测序 DNA亲…...

[极客大挑战 2019]RCE ME1

<?php error_reporting(0); if(isset($_GET[code])){$code$_GET[code];if(strlen($code)>40){die("This is too Long.");}if(preg_match("/[A-Za-z0-9]/",$code)){die("NO.");}eval($code); } else{highlight_file(__FILE__); }// ?>…...

计算机毕业设计 中医院问诊系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…...

FME辅助规划选址

1.需求&#xff1a;新建运动场馆 用地需求&#xff1a;至少1km*2km 找到符合要求的储备地块 2.已有资源&#xff1a;储备用地 现在城市地块储备比较充足&#xff0c;但都是不规则地块 找出可以建大型场馆的地块 3.问题分析 图斑内部可以放下1000*2000的矩形 4.解决思路…...

Unity中的GUIStyle错误:SerializedObject of SerializedProperty has been Disposed.

一运行就循环打印这个报错&#xff0c; 解决办法&#xff0c;每次改参数之后在HIerarchy中手动保存&#xff0c;就会停止循环打印&#xff0c;style中的字体也显示出来了&#xff0c; 或者 直接换个低版本的...

实战篇 | WSL迁移Linux系统到非系统盘(完整实操版)

1. 操作步骤 1.1 确认要导出的Linux系统是否存在&#xff08;可跳过&#xff09; # 终端命令 # 查看通过WSL安装的Linux系统列表 wsl -l1.2 导出Linux系统为tar包 # 终端命令 # 格式&#xff08;过&#xff09; wsl --export <Distribution Name> <File Name> #…...

增量式编码器实现原理

目录 概述 1 认识增量式编码器 1.1 概述 1.2 增量式编码器的特性 1.3 编码器的硬件 2 增量式编码器实现原理 2.1 编码器信号 2.2 正反转判断 概述 本文主要介绍增量式编码器实现原理&#xff0c;包括增量式编码器的特性&#xff0c;信号特性&#xff0c;以及如何使用编…...

数据集-目标检测系列-口罩检测数据集 mask>> DataBall

数据集-目标检测系列-口罩检测数据集 mask>> DataBall 数据集-目标检测系列-口罩检测数据集 mask 数据量&#xff1a;1W DataBall 助力快速掌握数据集的信息和使用方式&#xff0c;享有百种数据集&#xff0c;持续增加中。 数据项目地址&#xff1a; gitcode: https…...

工作安排 - 华为OD统一考试(E卷)

2024华为OD机试(C卷+D卷)最新题库【超值优惠】Java/Python/C++合集 题目描述 小明每周上班都会拿到自己的工作清单,工作清单内包含n项工作,每项工作都有对应的耗时时长(单位h)和报酬,工作的总报酬为所有已完成工作的报酬之和。那么请你帮小明安排一下工作,保证小明在指定…...