shell函数
完成特定功能的代码片段,函数必须先定义才能使用。
- 定义函数
- 调用函数
- 取消函数
- 函数传参
- 命名空间:在shell语言中函数的命名空间是函数内和函数外定义变量是一样的,函数内外不能赋值同样名字的变量
#变量:如果在同一个命名空间可以用,如果不再同一个命名空间就不能用
#函数变量使用的范围:默认,函数里的变量会在函数外面生效
#函数变量如果不让在其他空间用使用:local 分开
local 变量名称 #变量只在函数内生效。属于局部变量
语法格式
myfunc() //函数定义
{
echo “This is my first shell function”
}
myfunc //函数调用
unset myfunc //取消函数
myfunc(){
echo "This is a new function“
}
myfunc
lsl(){
ls –l
}
cd "$1" && lsl
使用$1,$2传参
案例
#!/bin/bash
#v1.19.5.27.1
#作者:行癫
list()
{
echo "+++++++++++++++++++++++++++++++++"
echo "+++++++ 百宝箱 ++++++++"
echo "+++++++++++++++++++++++++++++++++"
echo "|||||||||||||||||||||||||||||||||"
echo "================================="
echo "= 1.yum仓库初始化 ="
echo "= 2.上课笔记工具安装 ="
echo "= 3.kvm虚拟机安装 ="
echo "= 4.vmware虚拟机安装 ="
echo "= 5.vs code安装 ="
echo "= 6.google浏览器安装 ="
echo "= 7.vnc-server的安装 ="
echo "= 8.一键安装所有 ="
echo "= 9.退出 ="
echo "================================="
}
yum-install(){
echo "====正在执行yum初始化操作请耐心等待!===="
rm -rf /etc/yum.repos.d/*
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo > /dev/null
yum -y install wget > /dev/null
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
echo "====正在清空缓存,请耐心等待!===="
yum clean all
echo "====正在重新加载,请耐心等待!===="
yum makecache
echo "====successed===="
}
cherrytree(){
echo "====正在进行安装......====="
yum -y install cherrytree > /dev/null
if [ $? -eq 0 ];then
echo "====successed===="
else
echo "==== failed ===="
echo "====检查网络和yum仓库===="
exit
fi
}
kvm-install(){
echo "====正在安装kvm虚拟机===="
yum -y install libvirt* virt-manager >> /dev/null && yum -y groupinstall 'Virtualization Host' >> /dev/null
echo "==== successed ===="
}
vmware-install(){
echo "====请将vmware安装包放到当前目录下===="
chmod +x
echo "......."
echo "..........."
echo ".................100%"
}
data=`date | awk '{print $4}'`
read -p "当前时间为${data},你是否要进行电脑初始化,继续请按回车(已记录你的初始时间):"
ping -c1 www.baidu.com 1> /dev/null
if [ $? -eq 0 ];then
echo "网络状况良好,请继续~"
else
echo "网络状况不佳,检查网络~"
exit
fi
echo "xingdian" > user.txt
echo "dianye" > password.txt
read -p "欢迎使用行癫工具箱,进行安装部署操作:"
read -p "请输入用户名:" name
username=`cat user.txt | awk '{print $1}'`
passwd=`cat password.txt | awk '{print $1}'`
if [ "${name}" == "${username}" ];then
read -p "请输入密码:" password
if [ "${password}" == "${passwd}" ];then
echo "登陆成功,进入工具箱"
while :
do
list
read -p "请选择你要使用的工具代码:" num
case $num in
1)
yum-install
sleep 3
;;
2)
cherrytree
sleep 3
;;
3)
;;
4)
;;
9)
break
;;
esac
done
data2=`date | awk '{print $4}'`
echo "结束时间为${data2};感谢您的使用!"
else
echo "用户名密码错误,请重新执行脚本!"
exit
fi
else
echo "用户名输入错误,请重新输入!"
exit
fi
数组
数组是一种变量,常规变量只能保存一个值,数组可以保存多个值
- 普通数组:只能用整数作为数组的索引--0 下标
- 关联数组:可以使用字符串作为数组的索引
普通数组定义
declare -a 定义为普通数组 默认为普通数组
数组赋值:
方法一:一次赋一个值
数组名[索引]=变量值
# array1[0]=pear
# array1[1]=apple
# array1[2]=orange
# array1[3]=peach
方法二:一次赋多个值
# array2=(tom jack alice)
# array5=(tom jack alice "bash shell") 如果一个值中有空格要用双引号引起来
# colors=($red $blue $green $recolor)
# array5=(1 2 3 4 5 6 7 "linux shell" [20]=saltstack)
# array8=`cat /etc/passwd`
${数组名[索引]} 引用变量值
# echo ${array1[0]} 访问数组中的第一个元素
# echo ${array1[@]} 访问数组中所有元素 等同于 echo ${array1[*]}
# echo ${#array1[@]} 统计数组元素的个数
# echo ${!array2[@]} 获取数组元素的索引
# echo ${array1[@]:1} 从数组下标1开始
# echo ${array1[@]:1:2} 从数组下标1开始,访问两个元素
关联数组定义
declare -A 数组名 定义为关联数组
数组赋值:
方法一:一次赋一个值
数组名[索引]=变量值
# ass_array1[index1]=pear
# ass_array1[index2]=apple
# ass_array1[index3]=orange
# ass_array1[index4]=peach
方法二:一次赋多个值
ass_array2=([index1]=tom [index2]=jack [index3]=alice [index4]='bash shell')
访问数组元数:
# echo ${ass_array2[index2]} 访问数组中的索引为index2的元素
# echo ${ass_array2[@]} 访问数组中所有元素 等同于 echo ${array1[*]}
# echo ${#ass_array2[@]} 获得数组元素的个数
# echo ${!ass_array2[@]} 获得数组元素的索引
数组遍历
for循环遍历数组
案例1:
#!/bin/bash
#定义数组
array=(Mon Tue Wed Thur Fir Sat Sun)
#数组遍历
for day in ${array[*]}
do
echo $day
done
案例2:
for line in `cat /etc/hosts` 赋值 for循环读取文件内容时是以空格为分隔符
do
hosts[++j]=$line
数组名 索引 值
done
for i in ${!hosts[@]} 遍历
数组元素的索引
do
echo "$i : ${hosts[i]}"
done
while+for循环遍历数组
while read line while循环读取文件时一次读取一整行
do
hosts[++i]=$line
数组 索引付值 读取的内容
数组名 下标(索引) 值
done < /etc/hosts
echo "hosts first: ${hosts[1]}"
#遍历
for i in ${!hosts[@]}
do
echo "$i : ${hosts[i]}"
done
通过数组统计某个东西的数量时,把要统计的对象作为数组的索引,就是统计谁就把谁作为索引