shell脚本经典题之函数应用
shell脚本经典题之函数应用
文章目录
- shell脚本经典题之函数应用
- 1、函数的概述:
- (1) 函数的定义:
- (2) 函数的使用:
- (3) 函数的返回值:
- (4) 函数的参数:
- 2、shell函数例题--阶乘计算:
- 3、shell函数--冒泡排序:
- 4、shell函数--菜单合集:
- 总结:
1、函数的概述:
(1) 函数的定义:
和其他“真正”的编程语言一样,如:Java,C语言,Python等,Bash也有函数,尽管它在实现方面有一些限制。
一个函数就是一个子程序,实现一些列操作的代码块,执行一个特定任务的“黑盒子”。
函数的格式:
function function_name {
command . . .
}
或者
function_name ( ) {
command. . .
}
(2) 函数的使用:
#!/bin/bash
demoFun(){echo "这是我的第一个 shell 函数!"
}
echo "-----函数开始执行-----"
demoFun
echo "-----函数执行完毕-----"
注意:
(1)函数定义必须在第一次调用之前。
(2)函数同名时,调用函数则是调用后一个函数
(3)调用函数与函数的定义顺序无关
#!/bin/bash
hh(){w;h
}
h(){echo "hello"
}w(){echo "world"
}nihao(){echo `w` `h`
}
h;w
nihao
hh
(3) 函数的返回值:
函数返回一个值,被称为退出状态码。这和一条命令返回的退出状态码 类似。
退出状态码可以由return 命令明确指定,也可以由函数中最后 一条命令的退出状态码来指定(如果成功,则返回0,否则返回非0 值)。
可以在脚本中使用 $? 来引用退出状态码。
#!/bin/bash
user(){if [ $USER=root ]
then
echo "你是管理员用户"
else
echo "你不是管理员用户"
return 1
fi
}user
(4) 函数的参数:
在Shell中,调用函数时可以向其传递参数。在函数体内部,通过 $n 的形式来获取参数的值,例如,$1表示第一个参数,$2表示第二个参数…
#!/bin/bash
#函数的参数例题sum(){echo "第一个数:" $1
echo "第二个数:" $2let n=$1+$2
echo $n
}sum $1 $2
2、shell函数例题–阶乘计算:
#这有两种方法:
#第一种是利用 for 循环来阶乘计算#!/bin/bash
sum=1
read -p "请输入你想要的数,使其阶乘:" n
for(( i=2;i<=$n;i++ ))
do
sum=$[i * sum]
done
echo "1到 $n 的阶乘为:$sum"#第二种方法是函数调用自身,利用位置变量来传参
fact(){if [ $1 -eq 0 -o $1 -eq 1 ]
#如果$1 等于0或者1,等于1
then
echo 1
else
echo $[$1 * $(fact $[$1-1])]
#阶乘 $1=$1x($1-1 的阶乘)
fi
}
fact $1
3、shell函数–冒泡排序:
#!/bin/bash
#根据你想排序的位数,随机输入自己想要冒泡排序的数字:arr=()
read -p "请输入你想输入的位数:" p
for (( n=1;n<=$p;n++ ))
do
read -p "请输入第 $n 个数字:" t
arr[n-1]=$t
doneecho "----对数字 ${arr[*]} 进行冒泡排序----"
echo
for (( j=1;j<${#arr[*]};j++ ))
doflag=1for (( i=0;i<${#arr[*]}-j;i++ ))doif [ ${arr[i]} -gt ${arr[i+1]} ]thentmp=${arr[i]}arr[i]=${arr[i+1]}arr[i+1]=$tmpflag=0fidoneif [ $flag -eq 1 ]thenecho "经过 $j 轮比较,冒泡排序完成。"breakfi
done
echo
echo " $p 个数冒泡排序后的顺序为:${arr[*]}"
echo
4、shell函数–菜单合集:
#!/bin/bash
#shell函数应用--菜单合集fire(){echo "---关闭防火墙---"
systemctl disable firewalld
}systemInfo(){echo "系统信息:"
name=`hostname`
ip=`ifconfig ens33|awk /netmask/'{print $2}'`
os=`cat /etc/redhat-release`
kernel=`uname -r`
cpu=`lscpu|grep 型号名称:|tr -s " "|cut -d" " -f1 --complement`
mem=`free -hm | awk /Mem/'{print $2}'`
space=`lsblk | awk /disk/'{print $4}'|awk -F G '{print $1}'`
#这里是设置输出时的字体颜色
G="\e[1;32m"
B="\e[1;34m"
E="\e[0m"for i in $spacedo let sum=$[$sum+$i]
doneecho -e "$B主机名:$E$G\t$name\t$E"
echo -e "${B}IP地址:$E$G\t$ip\t$E"
echo -e "$B系统版本:$E$G\t$os\t$E"
echo -e "$B内核版本:$E$G\t$kernel\t$E"
echo -e "${B}cpu名称:$E$G\t$cpu\t$E"
echo -e "$B内存总大小$E:$G\t$mem\t$E"
echo -e "$B硬盘总大小$E:$G\t${sum}G\t$E"
}yumadd(){cd /etc/yum.repos.d
mkdir bak
mv *.repo bak/echo "[abc]
name=abc
baseurl=file:///mnt
enable=1
gpgcheck=0" > abc.repomount /dev/sr0 /mnt
yum clean all
yum install tree -y
}diskadd(){lsblk
fdisk /dev/sdb <<EOF
m
n
p+10G
p
w
EOFlsblk
mkfs.xfs /dev/sdb1
if [ -e /tp ]; then
exit
fi
mkdir /tp
echo "/dev/sdb1 /tp xfs defaults 0 0" >> /etc/fstab
mount -a
df -hT
}jiance(){if [ $USER == "root" ]
then
echo "你是root用户"
else
echo "你不是root用户"
fi
}biem(){read -p "请输入你要定义的别名:" bakname
echo "$bakname" >> /etc/bashrc
#shopt -s expand_aliases
#source /etc/bashrc
}changeName(){echo "修改主机名要重启电脑才有效"
hostnamectl set-hostname swl
init 6
}sshSet(){#!/usr/bin/expect
set timeout 5set hostname [lindex $argv 0]
set password [lindex $argv 1]
spawn ssh $hostname
expect {"拒绝连接" exit"服务名称未知" exit"continue" {send "yes\r";exp_continue}"password:" {send "$password\r"}
}
interact
exit}PS3="请选择项目(1-9):"
menu="
关闭防火墙
显示系统信息
搭建yum仓库
磁盘自动分区
检测当前用户
添加别名
更改主机名
使用ssh免密登录
退出菜单
"select menu in $menu
do
case $REPLY in
1)
fire
;;2)
systemInfo
;;3)
yumadd
;;4)
diskadd
;;5)
jiance
;;6)
shopt -s expand_aliases
#shopt expand_aliases
biem
source /etc/bashrc
;;7)
changeName
;;8)
sshSet
;;9)
echo "退出菜单"
break
;;*)
echo "选择错误,请重新选择(1-9):"
esac
done
总结:
shell是一门脚本语言,像Java,Python一样,要知道基本机构和语法,函数的使用等,最重要的是多敲,不然光靠看是需要漫长的岁月的,多敲命令,多大代码才是王道!
shell脚本经典题之函数应用相关推荐
- 100个Linux Shell脚本经典案例
kill `ps -ef | grep redis | awk '{print $2}'` grep -w '\|aa\|bb' Linux 根据端口号杀进程的.sh脚本_xie_app ...
- Shell脚本经典案例:探测批量主机是否存活
Shell脚本经典案例:探测批量主机是否存活 文章目录 Shell脚本经典案例:探测批量主机是否存活 1.利用数组实现 2.变量方式实现 3.函数实现 一开始我们用ping1次就下定结果说对方主机不通 ...
- shell脚本(五)——函数的格式、传参、变量、递归、函数库
shell脚本(五)--函数 一.shell函数定义 二.格式 1.格式一: 2.格式二: 三.函数返回值 四.函数传参 五.函数变量的作用范围 六.递归 1.阶乘 2.递归查目录 七.创建函数库 一 ...
- shell脚本经典10题
shell脚本练习题: 文章目录 shell脚本练习题: 1.从1加到100的和: 2.shell脚本自动搭建本地yum仓库: 3.shell脚本自动化分区,格式化和挂载: 4.shell脚本查看系统 ...
- 批量ping脚本shell_30个Linux Shell脚本经典案例(上)
在学习Linux运维时,普遍反馈是:Linux Shell是一个很难的知识板块.虽然大家都认真学,基本的语法也都掌握了,但有需求时,很难直接上手编程,要么写了很久,要么写不好! 也有很多做运维很多年的 ...
- 在linux上面找一个脚本,30个Linux Shell脚本经典案例
在学习Linux运维时,普遍反馈是:Linux Shell是一个很难的知识板块.虽然大家都认真学,基本的语法也都掌握了,但有需求时,很难直接上手编程,要么写了很久,要么写不好! 也有很多做运维很多年的 ...
- 30个Linux Shell脚本经典案例
在学习Linux运维时,普遍反馈是:Linux Shell是一个很难的知识板块.虽然大家都认真学,基本的语法也都掌握了,但有需求时,很难直接上手编程,要么写了很久,要么写不好! 也有很多做运维很多年的 ...
- linux脚本编程有参函数,shell脚本编程进阶:函数
一.函数介绍 函数function是由若干条shell命令组成的语句块,实现代码重用和模块化编程: 它与shell程序形式上是相似的,不同的是它不是一个单独的进程,不能独立运行,而是shell程序的一 ...
- 100个实用的 Linux Shell 脚本经典案例,收藏备用~
点击关注公众号,利用碎片时间学习 1)编写hello world脚本 #!/bin/bash # 编写hello world脚本 echo "Hello World!" 2)通过位 ...
最新文章
- Set_uid set_gid stick_bit 软链接 硬链接
- java程序安装_java实现可安装的exe程序
- python database ioerror_python – IOError:[Errno 2]没有这样的文件或...
- 数据结构-栈5-栈的应用-后缀转中缀
- adobe acrobat看PDF文档显示字体发虚,有毛刺的解决办法
- 奇瑞采用英伟达GPU,将实现L3自动驾驶
- 关于Android的学习
- 最专注和高效的查词法?网易有道词典笔2.0评测
- mysql 与 mycat集成读写分离
- 遗传算法python实现
- Podfile的简单使用
- 高中信息怎样用计算机求和,高中信息技术excel数据求和课件.ppt
- 查看CPU和其他硬件温度的软件
- 埋葬了我曾经的执着与思恋题记不过是所谓的世界末日
- python阿拉伯数字转中文_阿拉伯数字转换成中文的python代码
- RDA5856ETE系列_(1)新手入门
- 什么是大数据? 大数据项目的流程
- 手机屏幕到底要多大才算是个头?
- 关于tensorflow的报错NodeDef mentions attr ‘xxx‘ not in Op的解决方案和产生原因
- 2021年安全员-B证试题及解析及安全员-B证证考试