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

posted @   老王教你学Linux  阅读(459)  评论(0编辑  收藏  举报
编辑推荐:
· .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 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
点击右上角即可分享
微信分享提示