shell之函数和数组练习案例

news2024/9/24 5:27:14

目录

  • 函数和数组练习案例
    • 1、编写函数,实现打印绿色OK和红色FAILED判断是否有参数,存在为Ok,不存在为FAILED
    • 2、编写函数,实现判断是否无位置参数,如无参数,提示错误
    • 3、编写函数实现两个数字做为参数,返回最大值
    • 4、编写函数,实现两个整数位参数,计算加减乘除。
    • 5、将/etc/shadow文件的每一行作为元数赋值给数组
    • 6、使用关联数组统计文件/etc/passwd中用户使用的不同类型shell的数量
    • 7、使用关联数组按扩展名统计指定目录中文件的数量

函数和数组练习案例

1、编写函数,实现打印绿色OK和红色FAILED判断是否有参数,存在为Ok,不存在为FAILED

#!/bin/bash
#########################
#File name:1.sh
#Version:v1.0
#Email:admin@test.com
#Created time:2023-01-03 15:18:02
#Description:
#########################
print(){
        if [ -z "$1" ];then
                 echo -e "\033[31m failed \033[0m"
        else

                 echo -e "\033[32m ok \033[0m"
        fi
}

有参数运行结果

print 1

在这里插入图片描述
无参数运行结果

print

在这里插入图片描述

2、编写函数,实现判断是否无位置参数,如无参数,提示错误

#!/bin/bash
#########################
#File name:2.sh
#Version:v1.0
#Email:admin@test.com
#Created time:2023-01-03 21:43:28
#Description:
#########################
set(){
        if [ "$#" -eq 0 ]
        then
                echo "error"
        else
                echo "the function has "$#" parameters"
        fi
}

无参数运行结果

set

在这里插入图片描述
有参数运行结果

set 123 shuju2
在这里插入图片描述

3、编写函数实现两个数字做为参数,返回最大值

#!/bin/bash
#########################
#File name:3.sh
#Version:v1.0
#Email:admin@test.com
#Created time:2023-01-03 21:58:41
#Description:
#########################
max(){
        if [ $1 -ge $2 ];then
                return $1
        else
                return $2
        fi
}

read -p "please input two number:" num1 num2
max $num1 $num2
echo "the max number is $?"

4、编写函数,实现两个整数位参数,计算加减乘除。

#!/bin/bash
#########################
#File name:4.sh
#Version:v1.0
#Email:admin@test.com
#Created time:2023-01-03 22:07:27
#Description:
#########################
calculation(){
        echo "a+b=$(($1+$2))"
        if [ $1 -ge $2 ]
        then
                echo "a-b=$(($1-$2))"
        else
                echo "b-a=$(($2-$1))"
        fi
        echo "a*b=$(($1*$2))"
        echo "a/b=$(($1/$2))"
}

read -p "please input two number:" num1 num2
calculation $num1 $num2

运行结果

[root@localhost teacher3]# bash 4.sh
please input two number:6 6
a+b=12
a-b=0
a*b=36
a/b=1

5、将/etc/shadow文件的每一行作为元数赋值给数组

#!/bin/bash
#########################
#File name:5.sh
#Version:v1.0
#Email:admin@test.com
#Created time:2023-01-03 23:17:40
#Description:
#########################
i=0
for j in `cat /etc/shadow`
do
        arry[$i]=$j
        let i++
done

echo ${arry[4]}
命令行模式下
[root@localhost teacher3]# arry=(`cat /etc/shadow`)
[root@localhost teacher3]# echo ${arry[*]}

运行结果

[root@localhost teacher3]# bash 5.sh
lp::17110:0:99999:7:::
[root@localhost teacher3]# head -5 /etc/shadow | tail -1
lp:
:17110:0:99999:7::: (查看源文件第五行内容)

在这里插入图片描述

6、使用关联数组统计文件/etc/passwd中用户使用的不同类型shell的数量

#!/bin/bash
#########################
#File name:6.sh
#Version:v1.0
#Email:admin@test.com
#Created time:2023-01-03 22:29:16
#Description:
#########################
declare -A typenum
#var1=`cat /etc/passwd | cut -d ':' -f 7`
for i in `cut -d ':' -f 7  /etc/passwd`
do
        #echo $i
        let typenum[$i]+=1
done

for type in ${!typenum[*]}
do
        echo "$type:${typenum[$type]}"
done

运行结果

[root@localhost teacher3]# bash 6.sh
/sbin/nologin:18
/bin/sync:1
/bin/bash:24
/sbin/shutdown:1
/sbin/halt:1

7、使用关联数组按扩展名统计指定目录中文件的数量

#!/bin/bash
#########################
#File name:7.sh
#Version:v1.0
#Email:admin@test.com
#Created time:2023-01-03 23:05:54
#Description:
#########################
declare -A typenum
for i in `ls ./xixi`
do
        #echo $i
        let typenum[${i#*.}]+=1
done
#echo ${typenum[*]}
for j in ${!typenum[*]}
do
        echo "$j:${typenum[$j]}"
done

运行结果

[root@localhost teacher3]# bash 7.sh 
jpg:10
mp3:10
mov:5
tar.gz:10
tar.bz2:10
png:10

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/137632.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ArcGIS基础实验操作100例--实验46按要素融合多边形

本实验专栏参考自汤国安教授《地理信息系统基础实验操作100例》一书 实验平台:ArcGIS 10.6 实验数据:请访问实验1(传送门) 高级编辑篇--实验46 按要素融合多边形 目录 一、实验背景 二、实验数据 三、实验步骤 (1&…

ctf中linux内核态的漏洞挖掘与利用系列1

说明 该系列文章主要是从ctf比赛入手,针对linux内核上的漏洞分析、挖掘与利用做讲解,本篇文章主要介绍内核漏洞利用所需的前置知识以及准备工作。 linux内核态与用户态的区别 以 Intel CPU 为例,按照权限级别划分,Intel把 CPU指…

8.JS笔记-函数

1.函数 函数是封装了一段可以被重复执行调用的代码块。目的是让大量代码重复使用 封装:将一个或多个功能通过函数的方式进行封装,对外只提供一个简单的函数接口(将主板、CPU等封到主机里) 2.函数使用 2.1 声明函数 function 函…

DHCP自动分配IP命令配置

由路由器R3充当服务器给PC3和PC4分配IP地址&#xff1a; [r3] dhcp enable-----开启DHCP服务器 [r3] ip pool ? STRING<1-64> Pool name [r3] ip pool aaa-----创建地址池&#xff08;aaa是地址池的名字&#xff09; [r3-ip-pool-aaa]network 192.168.4.0 mask 24-----…

【C进阶】C语言终话,了解计算机的程序环境和预处理过程

目录 &#x1f3c2;前言&#x1f3c2;&#xff1a; &#x1f3c7;一、详解编译与链接&#x1f3c7;&#xff1a; 1.程序的翻译环境与执行环境&#xff1a; 2.翻译环境&#xff1a; 3.翻译阶段&#xff1a; ①.编译&#xff1a; ②.链接&#xff1a; 4.运行环境&#xff1a; …

Java 并发编程 (一)Semaphore和Exchanger的使用

Semaphore和Exchanger的使用 Semaphore 功能介绍 Semaphore 主要作用就是限制线程并发数量。 Semaphore 的构造函数中permits 可以控制最大并发数。每个线程可以acquire指定数量的 permit 。但是acquire n个 则需要释放n个。防止被阻塞 public class MySemaphore {// permits…

【python】鞭炮快乐响,春联贴门上,祝福送到你身旁

前言 大家早好、午好、晚好吖 ❤ ~ 现在贴春联已成风俗&#xff0c;红色的对联贴在大门上&#xff0c;房子顿时生辉。 正如诗云&#xff1a;“喜气临门红色妍&#xff0c;家家户户贴春联&#xff1b;旧年辞别迎新岁&#xff0c;时序车轮总向前。” 今天&#xff0c;我们就用p…

静态路由的拓展配置

静态路由的拓展配置&#xff1a; 1、负载均衡 当路由器访问同一个目标具有多条开销相似的路径&#xff08;经过路由器的数量&#xff09;时&#xff0c;可以让流量拆分后沿多条路径同时传输&#xff0c;可以达到叠加带宽的效果。&#xff08;当开销不相似时做负载均衡&#xff…

数据可视化系列-03AIPL消费者行为全链路可视化模型实践

文章目录4.AIPL消费者行为全链路可视化模型实践4.1、用户画像用户画像产生的原因用户画像概述用户画像构成原则第一类用户画像 User Persona第二类用户画像User Profile4.2、标签体系标签体系简介标签分类贴标签的方式标签的优化用户画像标签和权重4.3、用户画像大数据应用4.4、…

USB基础

一 USB 芯片组成 同以太网类似&#xff0c;USB芯片也分为Controller部分(主机控制器/设备控制器)和PHY部分(收发器) 两大部分组成。 Controller部分 主要实现USB的协议和控制&#xff0c;内部逻辑主要有 MAC层&#xff0c;CSR层&#xff0c;FIFO层等。 MAC层实现安装USB协议…

一文看懂 Redis 主从同步的原理

Redis 主从同步的基本原理有三种&#xff0c;分别是&#xff1a;全量复制&#xff0c;基于长链接的命令传播&#xff0c;增量复制。 接下来分别说说这三种主从间同步的原理。 全量复制 当我们启动多个 Redis 实例的时候&#xff0c;它们相互之间就可以通过 replicaof&#x…

新人转行IC该怎么选择岗位?(内附各岗位学习视频)

最近看到不少同学在后台提问&#xff1a;新人转行IC该怎么选择岗位&#xff1f;其实转行本身就是一件大事&#xff0c;转行之前一定要做好调研&#xff0c;选择适合自己的岗位&#xff0c;这样才能规划好职业生涯。 IC行业这几个岗位是最常见的&#xff1a;数IC前端设计工程师…

PoolFormer实战:使用PoolFormer实现图像分类任务(二)

文章目录训练部分导入项目使用的库设置随机因子设置全局参数图像预处理与增强读取数据设置Loss设置模型设置优化器和学习率调整算法设置混合精度&#xff0c;DP多卡&#xff0c;EMA定义训练和验证函数训练函数验证函数调用训练和验证方法运行以及结果查看测试热力图可视化展示完…

JSON数据解析

1.基础 JSON(JavaScript Object Notation) 是一种通用的轻量级数据交换文本格式。它很容易让人阅读和编写&#xff0c;也便于机器进行解析和生成。它使用JavaScript语法来存储和描述数据对象&#xff0c;但是JSON完全独立于JavaScript。JSON可适用于多种流行编程语言。这些特性…

JavaScript 用法

文章目录JavaScript 用法<script><script><script> 标签<body><body><body> 中的 JavaScriptJavaScript 函数和事件在 <head><head><head> 或者 <body><body><body> 的JavaScript<head><hea…

计算机网络知识解析

本篇文章主要讲的是计算机网络相关的内容&#xff0c;需要有一定的计算机网络的基础知识才能汲取更多的知识。当然没基础也可以看懂&#xff0c;会对计算机网络有一个基础的理解。在这一篇介绍中&#xff0c;我尽可能的覆盖一些面试中的问题&#xff0c;通过本篇文章&#xff0…

2022年吃瓜事件拆解,打造爆款,让你拥有顶级营销思维!

大环境下&#xff0c;谁又是幸存者&#xff1f;2022年吃瓜事件拆解&#xff0c;打造爆款&#xff0c;让你拥有顶级营销思维&#xff08;完整版&#xff09;&#xff01;小伍带你了解【商业营销内核】&#xff01;咱们开讲&#xff01;【事件1】张兰 vs 大S&#xff0c;大女主张…

【PyTorch学习1】B站刘二大人《PyTorch深度学习实践》——线性模型(Linear Model)

b站课程链接&#xff1a;线性模型 1.基本思想&#xff1a; 给出了一组一维数据&#xff0c;定义了一个简单的线性拟合函数&#xff0c;通过穷举法来列出一些权重&#xff08;拟合函数的系数&#xff09;&#xff0c;并计算这些权重对应的拟合损失函数&#xff08;使用均方误差…

C/C++智能指针详解

系列文章目录 文章目录系列文章目录前言一、什么是智能指针&#xff1f;二、使用方法1.shared_ptr2.unique_ptr3.weak_ptr前言 对C/C学习感兴趣的可以看看这篇文章哦&#xff1a;C/C教程 本章主要介绍一些C/C中智能指针的实现原理以及如何使用 一、什么是智能指针&#xff1…

计算机组成原理复习:存储器系统

计算机组成原理复习&#xff1a;存储器系统3.1 存储器的层次化结构3.2 半导体随机存储器&#xff08;RAM&#xff0c;易失性存储器&#xff09;3.2.1 静态随机存储器&#xff08;SRAM&#xff09;3.2.2 动态随机存储器&#xff08;DRAM&#xff09;3.2.3 只读存储器&#xff08…