当前位置: 首页 > news >正文

shell的灵活运用 (函数,关联数组,循环,awk,sed等)

题目

提示:没有基础请先看看基础部分的讲解,否则看不懂

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

代码:

#bash/bin
function a() {b=$#   #判断传入的参数个数
#       echo $bif [ $b -eq 0 ]   # 看参数个数是不是等于0 thenecho "no"elseecho "yes"fi
}
a

1,当不传入参数时,结果为:

no

2,当传入参数时,结果为:

yes

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

代码

function a() {    # 定义函数num1=$1   # 获取第一个参数
#       echo "num1:$num1"num2=$2
#       echo "num2:$num2"if [ $num1 -gt $num2 ]     # 2个参数进行比较thenecho "$num1"    # 返回第一个参数elseecho "$num2"   # 返回得第二个参数fi
}
c=$(a 200 300)     # 传入2个参数,并且将返回值赋值给c
echo "the $c is more big"

运行输出结果:

[root@localhost ~]# bash functiontest.sh 
the num1:200
num2:300
300 is more big

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

代码

a(){one=$1two=$2echo  "$one + $two = `expr $one + $two`"echo  "$one - $two = `expr $one - $two`"echo  "$one * $two = `expr $one \* $two`"echo  "$one / $two = `expr $one / $two`"printf  "$one / $two = `expr $one / $two`\n"}
a 2 3

运行结果

[root@localhost ~]# bash functiontest.sh 
2 + 3 = 5
2 - 3 = -1
2 * 3 = 6
2 / 3 = 0
2 / 3 = 0

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

代码

function a(){a=`wc -l /etc/shadow | cut -d" " -f1`   # 将目标文件进行剪切,提取需要的数据,这里代表数据个数
for i in `seq $a`
dob=`expr $i - 1`     # 数组下标arr[$b]=`awk 'NR=='$i'{print}' /etc/shadow`    # 将对应的哪一行数据放入到数组
done
}
a
echo ${arr[0]}     # 打印数组的第一个元素
echo ${arr[1]}    #第二个
echo ${arr[2]}
echo ${arr[3]}

以上的结果显示为: 结果的验证可以用cat 命令对目标文件进行对比

[root@localhost ~]# bash functiontest.sh 
root:$6$SqQF33Q5poRxzqNJ$mAZ7EJuymCGVS6HxSAinq4danhF48kUbkyg/Kck3VJ8mIO5tDJlrsbQ04.aXbUb63rif82rIR/Xuatvcdj6Bp1::0:99999:7:::
bin:*:19121:0:99999:7:::
daemon:*:19121:0:99999:7:::
adm:*:19121:0:99999:7:::

5,使用关联数组统计文件/etc/passwd中各个用户的shell类型

代码

function a(){read -p "which user's shell type that you want find?:" shell_type  # 提示加读取输入的变量declare -A arry    # 必须声明关联数组l=`wc -l /etc/passwd | cut -d " " -f1`   # 计算数据的条数for i in `seq $l`do
#               ass-arry[`expr $i - 0`] index=`cat /etc/passwd | awk 'BEGIN{FS=":"}{print $1}' | awk  'NR=='$i'{print}'`  # 关联数组的下标#       echo "index $index"declare -A arryarry["$index"]=`cat /etc/passwd | awk 'BEGIN{FS=":"}{print $7}' | awk 'NR=='$i'{print}'`  # 关联数组的值doneecho "the user $shell_type's shell type is ${arry[$shell_type]}"   # 格式化输出
}
a

运行的结果:

[root@localhost ~]# bash functiontest.sh 
which user's shell type that you want find?:fu
the user fu's shell type is /bin/bash[root@localhost ~]# bash functiontest.sh 
which user's shell type that you want find?:root
the user root's shell type is /bin/bash[root@localhost ~]# bash functiontest.sh 
which user's shell type that you want find?:bin
the user bin's shell type is /sbin/nologin

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

代码

function a() {read -p "input a file path (absolute):(such as input /etc/)>" path  # 输入路径read -p "which type of file are you count ?:(such as input txt or sh ...)>" type1  # 输入文件类型a=`ls -l $path | awk '{print $9}' | grep '^[^$]' | awk 'BEGIN{FS="."}{print $2}'`   # 看有几个文件有后缀名declare -A arrfor i in $ado#         echo "file type: $i"arr["$i"]=`expr ${arr["$i"]} + 1`   # 对文件类型计数表示该类型文件个数doneecho "the file of type $type1 have ${arr[$type1]}"
}
a

运行结果如下:结果的验证可以用自己数

[root@localhost ~]# bash functiontest.sh 
input a file path (absolute):(such as input /etc/)>/etc/
which type of file are you count ?:(such as input txt or sh ...)>conf
the file of type conf have 36[root@localhost ~]# bash functiontest.sh 
input a file path (absolute):(such as input /etc/)>/etc/
which type of file are you count ?:(such as input txt or sh ...)>d
the file of type d have 24

7,编写函数 ,判断是否有参数,存在为Ok,不存在为FAILED,要求绿色OK和红色FAILED

代码:

function a() {b=$#
##      echo $bif [ $b -eq 0 ]thenecho -e "\e[31m failde \e[0m";elseecho -e "\e[32m ok \e[0m";fi
}
a 1
http://www.lryc.cn/news/65971.html

相关文章:

  • 大疆无人机 MobileSDK(遥控器/手机端)开发 v4版<1>
  • mysql数据库之事务
  • 安装运行Hyperf
  • 回收站文件恢复,分享4个巧妙解决方法!
  • CTF权威指南 笔记 -第三章汇编基础-3.2-x86/x64汇编基础
  • 争夺汽车芯片「高地」
  • SuperMap GIS基础产品三维GIS FAQ集锦(2)
  • 11.streamFile
  • 如何裁剪图片大小尺寸?
  • 深度学习笔记之梯度下降、反向传播与内置优化器
  • Visual Studio 2022 搭建GLFW OpenGL开发环境
  • 四元数快速入门【Quaternion】
  • 为什么我们要使用向量化运算
  • Makefile零基础教学(一)初识makefile
  • 如何使用SpringMVC之常用注解
  • Vue3的axios请求封装,请求拦截,相应拦截
  • ZC706P试验PL_DDR3内存条的步骤方法
  • 通达信W底形态选股公式,也称双底形态
  • java语言与算法、数据结构的用法
  • 中国社科院与美国杜兰大学金融管理硕士项目,引领你走在金融行业前沿
  • 第三十五章 Unity人形动画(下)
  • vue导入导出excel、设置单元格背景色、文字居中、合并单元格、设置列宽(使用xlsx库和xlsx-style库)
  • java 线程池
  • 音频焦点使用及原理
  • PyQt5桌面应用开发(8):从QInputDialog转进到函数参数传递
  • 2.0 Vue框架设计的核心要素
  • “智慧赋能 强链塑链”——精细化工行业仓储物流数字化转型探讨
  • 用DG备库做的rman备份恢复一个数据库
  • JAVA中的IO操作有哪些?
  • 10:00面试,10:04就出来了 ,问的实在是太...