*自动安装jdk的脚本--select用法*

本文提供了一个 bash 脚本,用于在新机器上自动化安装 JDK,并处理不同格式的安装包(如 .gz 和 .bin)。脚本通过用户选择和后续的配置步骤确保 JDK 正确安装并设置环境变量。
#!/bin/bash
#
echo "You want to which kinds of means to install jdk:"
select jdk in `ls *gz *bin`
do
 echo "Your choice is $jdk"
 break
done

echo "According to your chosen bag suffixes to choice,eg:bin"
echo "Usage:Please input bin or gz:"
read -p "You jdk type is App>" type
case $type in
bin)
   chmod +x $jdk
   sh $jdk
   ;;
gz)
  tar -zxvf $jdk
   ;;
esac 

ls jdk* -d|while read jdkfile;do
appjdk=(`echo $jdkfile`)
size=${#jdkfile[@]}
for ((i=0;i<$size;i++))
 do
  if [ -d ${appjdk[$i]} ];then
     mv ${appjdk[$i]} /opt/oracle/

  echo -e  "JAVA_HOME=/opt/oracle/"${appjdk[$i]}"" >> /etc/profile
  echo -e  "JAVA_BIN=/opt/oracle/"${appjdk[$i]}"/bin" >> /etc/profile
  echo -e  "PATH=$PATH:$JAVA_BIN" >> /etc/profile
  echo -e  "CLASSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar" >> /etc/profile
  export JAVA_HOME JAVA_BIN PATH CLASSPATH
source /etc/profile
echo "Now we'll test about whether it's ok!"
java -version
echo "                                    "
     if [ $? == 0 ];then
       echo "You see,jdk is installed successfully!"
     else
       echo "Please check where did jdk go wrong!!!"
     fi

  fi
 done
done

PS:

我写这个脚本的主要目的是在新的机器上面安装jdk,但是一般jdk的安装会有.gz.tar和bin两种形式的,所以才有了以上脚本的思路。

我上面用颜色标注的都是用到的函数或者说是我们平时写脚本过程中应该注意的地方,大家也可以引用一下,(*^__^*) 嘻嘻……

# Check-JdkVersion-Better.ps1 $DependencyDir = "target/dependency" $TempDir = Join-Path $env:TEMP "jar_class_scan" $OutputFile = "jdk_versions.csv" if (Test-Path $TempDir) { Remove-Item $TempDir -Recurse -Force } New-Item -ItemType Directory -Path $TempDir | Out-Null "JAR文件,主版本号,JDK版本" | Out-File -Encoding UTF8 $OutputFile function Get-JavaVersionFromMajor($major) { switch ($major) { 50 { return "JDK 6" } 51 { return "JDK 7" } 52 { return "JDK 8" } 53 { return "JDK 9" } 54 { return "JDK 10" } default { return "JDK $([Math]::Floor(($major - 44)))" } } } function Get-MajorVersionFromBytes([byte[]]$bytes) { if ($bytes.Length -lt 8) { return $null } $minor = [BitConverter]::ToUInt16(@( $bytes[1], $bytes[0] ), 0) $major = [BitConverter]::ToUInt16(@( $bytes[3], $bytes[2] ), 0) return $major } Get-ChildItem $DependencyDir -Filter *.jar | ForEach-Object { $jarPath = $_.FullName $jarName = $_.Name # 排除明显无 .class 的 jar 名称 $excludedPatterns = @( "*-sources.*", "*-javadoc.*", "*-native.*", "*-resources.*", "*-fonts*", "*swagger-ui*", "*starter[-.]*", "*autoconfigure*", "*boringssl*", "*epoll*", "*kqueue*", "*windows*", "*linux*", "*osx*" ) if ($excludedPatterns | Where-Object { $jarName -like $_ }) { Write-Host "jump: $jarName (unknown.class)" -ForegroundColor Gray return } try { [System.Reflection.Assembly]::LoadWithPartialName("System.IO.Compression.FileSystem") | Out-Null $archive = [System.IO.Compression.ZipFile]::OpenRead($jarPath) $classEntry = $archive.Entries | Where-Object { $_.FullName.EndsWith(".class") } | Select-Object -First 1 if (-not $classEntry) { Write-Host "none.class file: $jarName" -ForegroundColor Yellow $archive.Dispose() return } $stream = $classEntry.Open() $buffer = New-Object byte[] 8 $read = $stream.Read($buffer, 0, 8) $stream.Dispose() $archive.Dispose() if ($read -ne 8) { return } $magic = [BitConverter]::ToUInt32([Array]::Reverse($buffer[0..3]), 0) if ($magic -ne 0xCAFEBAFE) { Write-Host "magic($($magic)): $jarName" -ForegroundColor Red return } $majorVersion = Get-MajorVersionFromBytes $buffer $jdkVer = Get-JavaVersionFromMajor $majorVersion "$jarName,$majorVersion,$jdkVer" | Out-File -Encoding UTF8 -Append $OutputFile if ($majorVersion -eq 50) { Write-Host "find JDK 6!($jarName)" -ForegroundColor Red } else { Write-Host "$jarName -> $jdkVer" } } catch { Write-Warning "fail: $jarName (`$_.Exception.Message`)" } } Write-Host "`n complete result save $OutputFile" -ForegroundColor Green 把你说的这些可能的校验添加到上面的方法中
最新发布
11-08
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值