Shell的函数
function可以不用写 ()中不能放任何东西
#定义函数——没有参数,没有返回值
function func1(){
echo "hello world"
}
#调用函数
func1
#定义函数——有参数,没有返回值
function func2(){
echo "hello world_$1_$2" #这里的引用是调用函数的参数,非脚本参数
}
#调用函数
func2 aaa bbb
#定义函数——有参数,有返回值
function func3(){
sum=$[$1+$2] #或者 let sum=$1+$2
echo $sum
}
#调用函数
res=$(func3 10 20)
echo $res
#状态码,0~255,既可以作为状态判断,也可以作为信号传递
func4(){
echo "hello"
return 1
}
ret=$(func4)
echo #? #输出上一条命令的状态码1(函数体中的echo命令)
echo $ret
echo #? #输出echo $ret的状态码0
数组
#!/bin/bash
#数组定义
arr=("hello" "java" "shell")
#访问数组元素
echo ${arr[3]}
#将数组元素转为字符串输出
echo ${arr[*]}
#获取数组长度
echo ${#arr[*]}
#遍历数组
for var in ${arr[*]}
do
echo $var
done
#遍历数组
len=${#arr[*]}
for ((i=0;i<len;i++))
do
echo ${arr[$i]}
done
shell的select语句
#案例
#!/bin/bash
echo "选择你喜欢的操作系统"
PS3="请输入你的选择:"
select var in "Linux" "Mac" "Windows" "Other"
do
break #跳出select循环
done
echo "你选择了:$var"
#select和case的结合,模拟一键启停操作
#!/bin/bash
echo "你要进行什么操作?"
PS3="请输入你的操作编号:"
select var in "启动" "停止" "重启"
do
case $var in
"启动")
echo "正在执行启动的命令。。。"
;;
"停止")
echo "正在执行停止的命令。。。"
;;
"重启")
echo "正在执行重启的命令。。。"
;;
esac
break
done
sleep 3
echo "$var 执行完毕"
shell脚本之间的调用(bbb.sh导入aaa.sh)
脚本aaa.sh
#!/bin/bash
MAX_VALUE=999
STR="Guangdong/Guangzhou"
func1(){
echo "这是aaa脚本的函数"
}
脚本bbb.sh
#!/bin/bash
#导入脚本aaa
. /export/shell/test/aaa.sh #方式一
#source /export/shell/test/aaa.sh #方式二,选择其中一个就行,这里选一把二注释
#使用脚本aaa的定义
echo $MAX_VALUE
echo $STR
func1
#相当于将aaa的内容直接复制到bbb上
注:如果导入的脚本,有重名的函数和变量,回忆最后一次导入的函数和变量为主
一键安装JavaJDK脚本,jdk_install.sh
#!/bin/bash
#提示开始安装
echo "现在开始安装JDK"
sleep 1 #休眠一秒
#删除centos自带的jdk
oldjdks=$(rpm -qa | grep java)
for old in ${oldjdks}
do
rpm -e --nodeps $old #循环删除含有jdk字样的文件
done
#创建安装目录/export/server,进入安装目录
java_path="/export/server"
if test ! -d $java_path;then
mkdir -p $java_path
fi
#解压jdk安装包,下面是存放jdk安装的路径/export/software
tar -xvf /export/software/jdk-8u241-linux-x64.tar.gz -C $java_path
#设置环境变量
JAVA_HOME="/export/server/jdk1.8.0_241"
grep "JAVA_HOME" /etc/profile
if test $? -ne 0;then
echo "export JAVA_HOME=/export/server/jdk1.8.0_241" >> /etc/profile
echo "export PATH=:$JAVA_HOME/bin:$PATH" >> /etc/profile
fi
#加载环境变量
source /etc/profile
#提示用户安装成功,查看jdk安装版本
echo "恭喜,JDK安装成功"
java -version
shell的括号总结
$str #访问变量
${str} #访问变量
result=`ls` #执行shell命令,并赋值
result=$(ls) #执行shell命令,并赋值
result=$((1+2)) #执行数学运算
result=$[1+2] #执行数学运算
str=${array[*]} #数组转为字符串
len=${#array[*]} #求数组长度