shell中函数与数组的使用方法
1.什么是函数
2.函数的使用场景
3.函数基础语法
4.函数的传参
5.函数返回值
6.函数相关示例脚本
1.什么是Shel|函数
函数其实就是一堆命令的合集 ,用来完成特定功能的代码块。
2.为什么要使用函数
比如:我们经常需要使用判断功能,完全可以将其封装为一个函数 ,这样在写程序过程中可以在
任何地方调用该函数,不必重复编写。这样能减少代码冗余,可读性更强。
函数和变量类似,必须先定义才可以调用,如果定义不调用则不会被执行。
2.函数基础语法
1..定义ShelIl函数,可以通过如下两种方式进行定义。
#第一种
fun() {
echo "123"
}
#第二种方式
function fun_Status{
echo "456"
}
fun
fun_Status
###执行结果
123
456
- 函数传参
3.函数参数传递
在函数内部可以使用参数$1、$2.. ,调用函数function_ name $1 $2..
1.函数中传递参数
[root@bgx she11]# fun2() { echo "hello, $1"; }
#调用
[root@bgx shell]# fun2 Linux
he1l1o, Linux
1.如何定义函数和调用函数
fun01 () { echo "Hello World"; }
fun01
2.如何给函数传递一-个参数
fun01 () { echo "Hello $1"; }
fun01 SHell
#执行时跟上一个固定的参数
fun01 $1
#执行时跟上一个不固定的参数
(脚本的位置参数,需要执行脚本时传递)
3.函数接收N多个参数传递
fun01 () { echo "Hello $*"; }
fun01 liunx shell
Python
Test .
1. shell函数echo返回字符串结果示例一
[root@bgx shel1]# cat fun_ echo.sh
#!/bin/bash
get_users() {
users= ( cat /etc/passwd| cut -d: -f1 )
echo $users
}
#get_ users
#可以对拿到的函数结果进行遍历
user_ list= get_ users
index=1
for u in $user_ list
do
echo "The $index user is : $u"
let index++
done
retun实例
file=/ etc/ passwd
#定义文件
t_ file(){
#函数判断
if[-f$file];then
return 0
else
return1
fi
#调用函数,并根据函数返回状态码进行输出
t_file && echo "该文件存在$file"
I_echo "该文件不存在$file"
ngx_status=$1
nginx_is_status () {
systemctl $ngx_status nginx
if [ $? -eq 0 ];then
echo "nginx is $ngx_status"
else
echo "nginx is $ngx_stauts err"
exit 1
fi
}
case $ngx_status in
start)
nginx_is_status
;;
stop)
nginx_is_status
;;
*)
echo "USAGE: $0 { start | stop | restart }"
exit
esac
数组的基本概述
1数组基本概述
1.什么是数组
数组其实也算是变量,传统的变量只能存储一个值, 但数组可以存储多个值。
2.数组的分类
shell数组分为普通数组和关联数组
普通数组:只能使用整数作为数组索引
关联数组:可以使用字符串作为数组索引
3.数组遍历与循环
1.数组的遍历与循环是啥?
其实就是使用对数组进行批量赋值,然后通过循环方式批量取出数组的值对其进行统计。
2.如果需要统计-个文件中某个字段出现的次数,怎么办?
思路就是:要统计谁就将谁作为数组的索引,注意仅支持关联数组。
3.如上的方式可以实现数组的赋值,但数组赋值后还需要遍历结果,才能完成统计需求,
遍历的方式有如下两种:
1、通过数组的个数进行遍历(不推荐)
2、通过数组的索引进行遍历(推荐)
1.普通数组赋值与遍历示例
while read line
do
host[i++]=$line
done </etc/hosts
I
for itme in ${!host[@]}
do
echo "你的索引是: $itme 你对应的值是: ${host[$itme]}"
done
2、数组实现/etc/passwd 最后一列排序去重 (与awk取列,排序去重没一点区别,只是实现的方式不一样)
#!/bin/bash
declare -A login
while read line
do
types=$(echo $line | awk -F ":" '{print $NF}')
Let login[ $types]++
done</ etc/ passwd
for item in ${!login[@]}
do
echo "你的索引是$item 索引出现的次数是: ${Login [$item]}"
done
3、数组实现自创建.txt 文本的取值
declare -A sex
while read line
do
types=$(echo $line| awk '{print $2}')
Let sex [$types ]++
done<sex. txt
for
item in ${!sex[@]}
do
echo "你的索引是: $itqm 该索引出现的次数是: ${sex [$item]"
done
技术是没有终点的,也是学不完的,最重要的是活着、不秃。 学习看书还是看视频,都不重要,重要的是学会,欢迎关注,我们的目标---不秃。
---更多运维开发交流及软件包免费获取请加V: Linuxlaowang
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义