shell-函数和数组-4
创始人
2025-05-29 08:44:20
0

shell函数

完成特定功能的代码片段,函数必须先定义才能使用。

  • 定义函数
  • 调用函数
  • 取消函数
  • 函数传参
  • 命名空间:在shell语言中函数的命名空间是函数内和函数外定义变量是一样的,函数内外不能赋值同样名字的变量
  1. #变量:如果在同一个命名空间可以用,如果不再同一个命名空间就不能用

  2. #函数变量使用的范围:默认,函数里的变量会在函数外面生效

  3. #函数变量如果不让在其他空间用使用:local 分开

  4. 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/nullyum -y install wget > /dev/nullwget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repoecho "====正在清空缓存,请耐心等待!===="yum clean allecho "====正在重新加载,请耐心等待!===="yum makecacheecho "====successed===="
}cherrytree(){echo "====正在进行安装......====="yum -y install cherrytree > /dev/nullif [ $? -eq 0 ];thenecho "====successed===="elseecho "====  failed  ===="echo "====检查网络和yum仓库===="exitfi
}kvm-install(){echo "====正在安装kvm虚拟机===="yum -y install libvirt* virt-manager >> /dev/null && yum -y groupinstall 'Virtualization Host' >> /dev/nullecho "====    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/nullif [ $? -eq 0 ];thenecho "网络状况良好,请继续~"
elseecho "网络状况不佳,检查网络~"exit
fiecho "xingdian" > user.txt
echo "dianye" > password.txtread -p "欢迎使用行癫工具箱,进行安装部署操作:"read -p "请输入用户名:" nameusername=`cat user.txt | awk '{print $1}'`
passwd=`cat password.txt | awk '{print $1}'`if [ "${name}" == "${username}" ];thenread -p "请输入密码:" passwordif [ "${password}" == "${passwd}" ];thenecho "登陆成功,进入工具箱"while :dolistread -p "请选择你要使用的工具代码:" numcase $num in1)yum-installsleep 3;;2)cherrytreesleep 3;;3);;4);;9)break;;	esacdone	data2=`date | awk '{print $4}'`echo "结束时间为${data2};感谢您的使用!"else echo "用户名密码错误,请重新执行脚本!"exitfi
elseecho "用户名输入错误,请重新输入!"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[*]}
doecho $day
done案例2:
for line in `cat /etc/hosts`    赋值    for循环读取文件内容时是以空格为分隔符
dohosts[++j]=$line数组名 索引   值
donefor  i in ${!hosts[@]}           遍历数组元素的索引
doecho "$i : ${hosts[i]}"
done

while+for循环遍历数组

while read line                    while循环读取文件时一次读取一整行
do hosts[++i]=$line数组   索引付值  读取的内容数组名 下标(索引)  值
done < /etc/hostsecho  "hosts first: ${hosts[1]}"#遍历
for i in ${!hosts[@]}
doecho "$i : ${hosts[i]}"
done

通过数组统计某个东西的数量时,把要统计的对象作为数组的索引,就是统计谁就把谁作为索引 

相关内容

热门资讯

幼儿园开学第一天活动方案范文   2017幼儿园开学第一天活动方案需要怎么备课呢?我们不妨一起来参考下范文吧!以下是小编为您搜集整...
幼儿园招生活动方案 幼儿园招生活动方案(通用15篇)  为了保障事情或工作顺利、圆满进行,预先制定方案是必不可少的,方案...
Servlet的详细使用 文章目录Servlet体系结构Servlet urlPattern配置Request和Respons...
Java 基础学习总结(205... 参数校验 入参出参校验是每个程序员必备的基本素养。你设计的接口,必须先校验参数。比如入参是否允许为空...
Three.js——learn... Three.js——learn02Three.js——learn02通过轨道控制器查看物体Orbit...
小学读书交流会活动方案 小学读书交流会活动方案范文(通用15篇)  为确保活动顺利开展,预先制定活动方案是必不可少的,活动方...
打折促销活动方案 打折促销活动方案  为了确定工作或事情顺利开展,通常需要预先制定一份完整的方案,方案的内容和形式都要...
java-day01  程序就是有序指令的集合 cmd执行java程序,javac Test.java&#x...
十一月诚信·慎独教育月活动方... 十一月诚信·慎独教育月活动方案  在平凡的学习、工作、生活中,许多人都有过写信的经历,对书信都不陌生...
SpringCloud读取Na... hello,我是灰小猿,一个超会写bug的程序员! 近期在...
同课异构活动方案 同课异构活动方案(通用7篇)  为了确保活动扎实开展,预先制定活动方案是必不可少的,活动方案其实就是...
国庆优惠活动促销方案 国庆优惠活动促销方案(通用11篇)  为确保活动高质量高水平开展,常常需要提前制定一份优秀的活动方案...
五四晚会活动方案 五四晚会活动方案(通用13篇)  为保障活动顺利开展,常常需要预先准备活动方案,活动方案是为某一活动...
学校主题活动方案 学校主题活动方案(通用25篇)  为有力保证活动开展的质量水平,时常需要预先制定一份周密的活动方案,...
你是真的“C”——结构体中鲜有... 你是真的“C”——结构体中的精髓剖析【内存对齐】+ 【位段】 😎前言...
爱心组织活动方案 爱心组织活动方案  为了确保工作或事情能有条不紊地开展,就需要我们事先制定方案,方案是阐明行动的时间...
珠宝店国庆节活动方案 珠宝店国庆节活动方案(6篇)  为了确保工作或事情能高效地开展,常常需要提前制定一份优秀的方案,方案...
教师读书交流会活动方案 教师读书交流会活动方案  读书交流会是很重要的活动,下面unjs小编整理了教师读书交流会活动方案,欢...
国际残疾人日主题活动方案 2021国际残疾人日主题活动方案范文(通用5篇)  为了确保活动得以顺利进行,时常需要预先制定一份周...
字体压缩 前端字体压缩 最近在写官网时候开开心心的将需求开发完成验收完毕,就在上线的时候你发生了奇怪的事情。 ...