Shell函数数组练习

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

[root@shell ~]# vim ok.sh +

#!/bin/bash

read -p "请输入一个参数:" i                                               
function ok_failed() {                                                    
    if [ -z "$i" ]; then      
 #-z为检查字符串长度是否为空,也可以用[ $# -eq 0 ]
        echo -e "\033[31mFAILED\033[0m"                                   
    else                                                                  
        echo -e "\033[32mOK\033[0m"                                       
    fi                                                                    
}                                                                         
ok_failed                      
#若用[ $# -eq 0 ]这里调用函数需要加参数$i 

[root@shell ~]# sh ok.sh 1
请输入一个参数:1
OK
[root@shell ~]# sh ok.sh 1
请输入一个参数:
FAILED

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

[root@shell ~]# vim test_weizhi.sh +

#!/bin/bash

read -p "请输入参数,若不要参数直接回车:" i
function test_weizhi() {
        if [ $# -eq 0 ];then
                echo "Error无参数"
        else
                echo "输入的了$#个参数"
        fi
}
test_weizhi $i

[root@shell ~]# sh test_weizhi.sh 
请输入参数,若不要参数直接回车:1 2 3 4 
输入的了4个参数
[root@shell ~]# sh test_weizhi.sh 
请输入参数,若不要参数直接回车:
Error无参数

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

方法一:

[root@shell ~]# vim max_value.sh +

#!/bin/bash

read -p "请输入两个数字:" num1 num2
function max_value() {
        if [ $num1 -gt $num2 ];then
                echo "最大值为$num1"
        elif [ $num1 -eq $num2 ];then
                echo "两个参数相等"
        else
                echo "最大值为$num2"
        fi
}
max_value $num1 $num2

[root@shell ~]# sh max_value.sh 
请输入两个数字:1 1
两个参数相等
[root@shell ~]# sh max_value.sh 
请输入两个数字:1 2
最大值为2
[root@shell ~]# sh max_value.sh 
请输入两个数字:3 2
最大值为3

方法二:

方法一过于简单而且bug太多,咱还是要谨慎点,上点难度

[root@shell ~]# vim max_value2.sh +

#!/bin/bash

read -p "请输入两个参数:" -a num        #-a为指定变量类型为数组
function max_value2() {
        if ! [ ${#num[@]} -eq 2 ];then
                echo "请输入两个参数"
                exit 2                                  
 #如输入的参数不等于2,则退出脚本
        fi
for i in ${num[@]}                              
#使用for循环遍历num数组 
do
        if [[ ! $i =~ ^[0-9]+$ ]];then          
#变量i匹配使用正则表达式匹配是否为数字
                echo "请输入纯数字"
                exit 2
        fi
done
        if [ ${num[0]} -eq ${num[1]} ];then
                echo "请输入两个不同的数字"
                exit 2
        fi
max=${num[0]}                        
  #定义最大值的初始值,一般都定义为第一个元素,以第一个元素为基准依次和其它元素比较找到最大值
for i in ${num[@]}
do
        if [ $i -gt $max ];then
                max=$i
        fi
done
echo "最大值为$max"
}
max_value2

[root@shell ~]# sh max_value2.sh
请输入两个参数:1 2 3
请输入两个参数
[root@shell ~]# sh max_value2.sh
请输入两个参数:a 2
请输入纯数字
[root@shell ~]# sh max_value2.sh
请输入两个参数:1 1
请输入两个不同的数字
[root@shell ~]# sh max_value2.sh
请输入两个参数:1 2
最大值为2
[root@shell ~]# sh max_value2.sh
请输入两个参数:3 2
最大值为3

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

方法一:

[root@shell ~]# vim  calculate.sh +

#!/bin/bash

read -p "请输入两个参数:" i v
function calculate() {
        echo "$i+$v=$((i+v))"
        echo "$i-$v=$((i-v))"
        echo "$i*$v=$((i*v))"
        echo "$i÷$v=$((i/v))"
}
calculate

[root@shell ~]# sh calculate.sh
请输入两个参数:4 2 
4+2=6
4-2=2
4*2=8
4÷2=2

方法二:

方法一为超级简化版,咱还是上点难度吧,用if条件判断吧!(也可以用case这里就懒得写了都差不多)

[root@shell ~]# vim  calculate2.sh +

#!/bin/bash

read -p "请输入运算符:" a
read -p "请输入第一个整数:" i
read -p "请输入第二个整数:" v
 
function calculate2() {
        if [ "$a" = "+" ];then
                echo "$i+$v=$((i+v))"
        elif [ "$a" = "-" ];then
                echo "$i-$v=$((i-v))"
        elif [ "$a" = "*" ];then
                echo "$i*$v=$((i*v))"
        elif [ "$a" = "/" ];then
                echo "$i÷$v=$((i/v))"
        else
                echo "请输入合法与算法符"
        fi
}
calculate2

[root@shell ~]# sh calculate2.sh +
请输入运算符:+
请输入第一个整数:4
请输入第二个整数:7
4+7=11
[root@shell ~]# sh calculate2.sh +
请输入运算符:-
请输入第一个整数:6
请输入第二个整数:3
6-3=3
[root@shell ~]# sh calculate2.sh +
请输入运算符:*
请输入第一个整数:4
请输入第二个整数:3
4*3=12
[root@shell ~]# sh calculate2.sh +
请输入运算符:/
请输入第一个整数:6
请输入第二个整数:2
6÷2=3
[root@shell ~]# sh calculate2.sh +
请输入运算符:&
请输入第一个整数:3
请输入第二个整数:3
请输入合法与算法符

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

[root@shell ~]# vim shadow.sh +

#!/bin/bash

function shadow() {                                     
        declare -A arry_shadow                          
        while read line

        do                                              
                arry_shadow+=([$line]=$line)    
#将当前行的内容作为关联数组arry_shadow的键和值
        done < /etc/shadow                              
                                                        
        for key in "${!arry_shadow[@]}"        
#!为返回对应的键值
        do                                              
                echo "${arry_shadow[$key]}"             
        done                                            
}        

line=1                                                  
shadow
                                               

[root@shell ~]# sh shadow.sh 

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

[root@shell ~]# awk -F: '{count[$NF]++} END{for (shell in count) print count[shell], shell}' /etc/passwd | sort -n
1 /bin/sync
1 /sbin/halt
1 /sbin/shutdown
2 /usr/sbin/nologin
3 /bin/bash
32 /sbin/nologin

这里count[$NF]++定义一个关联数字,元素出现次数进行累加,最后使用for循环遍历count数组,打印元素出现的次数和其元素 

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

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

相关文章

mac 安装nvm以及切换node版本详细步骤

1、nvm介绍&#xff08;node版本管理工具&#xff09; nvm 可以让你通过命令行快速安装和使用不同版本的node 有时候项目太老&#xff0c;node版本太高,执行npm install命令会报错,可以借助nvm切换低版本的node。 2、安装nvm 在终端执行安装命令 curl -o- https://raw.gith…

后端只打印了info等级的日志?-SpringBoot日志打印-Slf4j

在调用log变量的方法来输出日志时&#xff0c;有以上5个级别对应的方法&#xff0c;从不太重要&#xff0c;到非常重要 调用不同的方法&#xff0c;就会输出不同级别的日志。 trace&#xff1a;跟踪信息debug&#xff1a;调试信息info&#xff1a;一般信息warn&#xff1a;警告…

1、混合方式UI设计

1、混合方式UI设计 新建项目添加静态资源添加资源添加action添加菜单菜单栏工具栏中间编辑区域 代码添加其他组件字体和大小状态栏 添加槽函数UI设置的转到槽的手写的设置应用程序图标 代码 新建项目 MainWindow代码文件夹主窗口为 (QMainWindow) 添加静态资源 AppIcon.icoi…

scikit-learn-feature_selection

参考&#xff1a; Feature selection 1. 移除低方差的特征 方差低&#xff0c;说明变化不大。 将特征方差值小于一定值的特征移除 单变量特征分析 通过单特征分析&#xff0c;选择最好的&#xff08;前k个&#xff09;的特征&#xff0c;scikit-learn 提供的方法有&#x…

基于JAVA+SpringBoot+Vue的前后端分离的旅游网站

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 一、项目背景介绍&#xff1a; 近年来&#xff0c;随…

IntelliJ IDEA 自带的 HTTP Client接口调用插件,替代 Postman

文章目录 引言建议目录结构新建请求不同环境的变量配置添加环境http-client.env.jsonhttp-client.private.env.json引用变量 请求示例Get请求示例Post请求示例鉴权示例断言示例Websocket请求示例 内置对象和动态变量内置对象&#xff1a;内置变量&#xff1a; 引言 在日常的 W…

关于引用unpkg.com的mars3d相关依赖文件报错无法请求的说明

问题来源&#xff1a; 1.关于引用unpkg.com的mars3d相关依赖文件报错无法请求的说明 说明&#xff1a; 1.最近npm、unpkeg都访问异常&#xff0c;可能是unpkg.com等国外的服务器不稳定导致的请求未响应。 解决方案&#xff1a; 1.请切换静态文件引入的方式请求相关资源。参…

LaTex:如何在数学环境下打出大的右括号“}“

一般来说多行公式打左大括号都知道使用语法"cases" \begin{cases} foo\\ foo\\ \end{cases}最近需要键入右边大花括号括起来公式的时候犯难了&#xff0c;搜了很多用的都是"\left.array\right}"&#xff0c;看得我昏迷&#xff0c;屡屡报错。 突然想起很久…

selenium自动化(中)

显式等待与隐式等待 简介 在实际工作中等待机制可以保证代码的稳定性&#xff0c;保证代码不会受网速、电脑性能等条件的约束。 等待就是当运行代码时&#xff0c;如果页面的渲染速度跟不上代码的运行速度&#xff0c;就需要人为的去限制代码执行的速度。 在做 Web 自动化时…

PS背景色替换

1.打开ps后右键图层复制 2.隐藏复制的图层&#xff0c;选择魔术橡皮擦擦掉不用替换的颜色 3.选中图层后选择颜色叠加修改图层颜色

机器学习-SVM(支持向量机)

推荐课程&#xff1a;【机器学习实战】第5期 支持向量机 |数据分析|机器学习|算法|菊安酱_哔哩哔哩_bilibili 赞美菊神ヾ ( ゜ⅴ゜)&#xff89; 一、什么是支持向量机&#xff1f; 支持向量机&#xff08;Support Vector Machine, SVM&#xff09;是一类按监督学习&#xff0…

【神行百里】pandas查询加速之行索引篇

最近进行大数据处理的时候&#xff0c;发现我以前常用的pandas查询方法太慢了&#xff0c;太慢了&#xff0c;真是太慢了&#xff0c;查阅资料&#xff0c;遂发现了一种新的加速方法&#xff0c;能助力我飞上天&#xff0c;和太阳肩并肩&#xff0c;所以记录下来。 1. 场景说明…

跨境独立站优势包括哪些?是否值得做呢?

跨境独立站的优势主要包括&#xff1a; 自主品牌建设&#xff1a;独立站可以更好地展示自主品牌形象&#xff0c;提高品牌知名度和美誉度。 独立域名&#xff1a;独立站可以拥有自己的域名&#xff0c;更加稳定和可信。 自主运营&#xff1a;独立站可以自主运营&#xff0c;包…

低版本echarts的升级到新版5.4.0的echarts浏览器预警和报错信息

新版5.4.0的echarts浏览器预警和报错信息 [ECharts] DEPRECATED: ‘normal’ hierarchy in itemStyle has been removed since 4.0. All style properties are configured in itemStyle directly now. 因为normal层被移除&#xff0c;问题代码如下图所示 itemStyle: {normal:…

MBR30200FCT-ASEMI大电流肖特基MBR30200FCT

编辑&#xff1a;ll MBR30200FCT-ASEMI大电流肖特基MBR30200FCT 型号&#xff1a;MBR30200FCT 品牌&#xff1a;ASEMI 封装&#xff1a;TO-220F 最大平均正向电流&#xff1a;30A 最大重复峰值反向电压&#xff1a;200V 产品引线数量&#xff1a;3 产品内部芯片个数&am…

系统韧性研究(7)| 韧性系统的16大指导原则

不良事件和条件可能会中断系统&#xff0c;导致系统无法提供必要的功能和服务。正如我在本系列的前几篇文章中所概述的那样&#xff0c;韧性是大多数系统的一个基本质量属性&#xff0c;因为它们提供了关键的能力和服务&#xff0c;尽管存在着不可避免的困难&#xff0c;但这些…

文件搜索项目知识介绍

项目背景SQLite介绍SQLite、驱动包下载SQLite使用SQLite和MySQL区别 JDBC搭配SQLiteJDBC原理-创建连接JDBC原理-关闭连接添加和发送SQLJDBC-事务开启和提交 打包.exe文件线程池线程数量问题 项目背景 需求上&#xff1a;因为Windows的文件搜索工具搜索速度十分的慢&#xff1b…

虚幻学习笔记11—C++结构体、枚举与蓝图的通信

一、前言 结构体的定义和枚举类似&#xff0c;枚举的定义有两种方式。区别是结构体必须以“F”开头命名&#xff0c;而枚举不用。 额外再讲了一下蓝图生成时暴露变量的方法。 二、实现 2.1、结构体 1、定义结构体 代码如下&#xff0c;注意这个定义的代码一定要在“UCLASS()”…

从零构建属于自己的GPT系列6:模型本地化部署2(文本生成函数解读、模型本地化部署、文本生成文本网页展示、代码逐行解读)

&#x1f6a9;&#x1f6a9;&#x1f6a9;Hugging Face 实战系列 总目录 有任何问题欢迎在下面留言 本篇文章的代码运行界面均在PyCharm中进行 本篇文章配套的代码资源已经上传 从零构建属于自己的GPT系列1&#xff1a;数据预处理 从零构建属于自己的GPT系列2&#xff1a;模型训…

ThinkPHP连接ORACLE数据库教程

目录 概念基本步骤详细操作问题排除参考 概念 要连接Oracle数据库&#xff0c;必须有两个东西&#xff0c;一个PHP官方写的扩展&#xff0c;一个Oracle官方写的客户端PHP是通过扩展去操作oralce客户端连接的服务端数据库&#xff0c;所以两个都不能少&#xff0c;而且版本必须…