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.hqwc.cn/news/268048.html

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

相关文章

DNF 单机联网 搭建教程(附视频)

更多游戏搭建&pvf修改教程请见: DNF教程 注意&#xff1a;请不要将游戏进行商业化&#xff0c;一切后果概不负责。仅供单机&#xff0c;好友之间进行娱乐&#xff01;&#xff01; 注意&#xff1a;请不要将游戏进行商业化&#xff0c;一切后果概不负责。仅供单机&#…

SiteGround如何设置WordPress网站自动更新

SiteGround Autoupdate功能会自动帮我们更新在他们这里托管的所有WordPress网站&#xff0c;这样做是为了保证网站安全&#xff0c;并且让它们一直保持最新状态。他们会根据我们选择的设置自动更新不同版本的WordPress&#xff0c;包括主要版本和次要版本。在每次自动更新之前&…

计算机循环神经网络(RNN)

计算机循环神经网络&#xff08;RNN&#xff09; 一、引言 循环神经网络&#xff08;RNN&#xff09;是一种常见的深度学习模型&#xff0c;适用于处理序列数据&#xff0c;如文本、语音、时间序列等。RNN通过捕捉序列数据中的时间依赖关系和上下文信息&#xff0c;能够解决很…

EasyRecovery2024国内免费的电脑数据恢复软件(一键备份还原)

EasyRecovery2024是coco玛奇朵Ontrack 的技术杰作。它是一个硬盘数据恢复工具&#xff0c;能够帮你恢复丢失的数据以及重建文件系统。其 Professioanl &#xff08;专业&#xff09; 版更是囊括了磁盘诊断、数据恢复、文件修复、E-mail 修复等全部 4 大类目19 个项目的各种数据…

npm,yarn,pnpm包管理器的介绍

npm&#xff0c;yarn和pnpm都是我们通常使用的包管理器&#xff0c;具体有什么区别呢&#xff1f;别的也不细说&#xff0c;就是快&#xff01;更节省磁盘空间。yarn比npm好&#xff0c;pnpm比yarn好&#xff01;

智慧机房与3D机房动环监控系统的应用

智慧机房是什么&#xff1f; 智慧机房是集采集信息、实时监控、数据分析、统一管理、故障告警等功能于一体的全方位、立体化的智能环境监控系统&#xff0c;构建物联网、大数据和云计算背景下现代企业的“数据心脏”。它能为机房管理者呈现细致入微的关键性数据&#xff0c;优…

多线程 - 学习笔记

前置知识 什么是线程和进程? 进程: 是程序的一次执行,一个在内存中运行的应用程序。每个进程都有自己独立的一块内存空间&#xff0c;一个进程可以有多个线程&#xff0c;比如在Windows系统中&#xff0c;一个运行的xx.exe就是一个进程。 线程: 进程中的一个执行流&#xff0…

Knowledge Graph知识图谱—8. Web Ontology Language (OWL)

8. Web Ontology Language (OWL) 在RDFs不可能实现&#xff1a; Property cardinalities, Functional properties, Class disjointness, we cannot produce contradictions, circumvent the Non Unique Naming Assumption, circumvent the Open World Assumption 8.1 OWL Tr…

BGR2RGB

numpy读取的时候进行img[&#xff1a;&#xff0c;&#xff1a;&#xff0c;&#xff1a;&#xff1a;-1]这个操作就可以进行BGR转RGB的操作&#xff08;读入是BGR, 否则就是RGB2BGR&#xff09;&#xff0c;这个不知道的话&#xff0c;穿越门写的非常清晰&#xff1a; https:/…

数据结构:栈(Stack)的各种操作(入栈,出栈,判断栈非空,判断栈已满,附源码)

前言&#xff1a;在前面的文章中&#xff0c;我们讲解了顺序表&#xff0c;单链表&#xff0c;双向链表。而我们今天要分享的栈则是基于之前的数据结构上搭建的&#xff0c;但是相较于顺序表和链表来说&#xff0c;栈的实现就非常简单了。 目录 一.栈(Stack)的概念 二.栈的数…

mysql数据恢复

使用MySQL第三方工具binlog2sql binlog2sql&#xff0c;一款基于python开发的开源工具&#xff0c;是由大众点评团队的DBA使用python开发出来的&#xff0c;从MySQL binlog解析出你要的SQL。根据不同选项&#xff0c;你可以得到原始SQL、回滚SQL、去除主键的INSERT SQL等。其功…

怎么在电脑桌面上使用备忘录软件?

在忙碌的办公室&#xff0c;上班族时常需要一款能帮助他们随时记录信息、待办事项和日程安排的备忘录软件。想象一下&#xff0c;你正在开会&#xff0c;突然想到了一个重要的待办事项&#xff0c;或者是接听了一个电话&#xff0c;得知了一个即将到期的任务。在这些情境下&…