shell脚本编程基础之函数
函数
作用:代码重用 定义函数:
方法1:
function FUNCTION_NAME { #函数名和定义变量名一样,只能包含数字字母下划线,并且不能以数字开头
command
} 方法2:
FUNCTION_NAME() {
command
} Example:
#!/bin/bash
function SHOWMENU { #定义函数
cat <<EOF
f|F) show memory usages
d|D) show disk usages
s|S) show swap usages
q|Q) quit
EOF
} SHOWMENU #函数引用
read -p "Please choose options: " CHOS
until [ $CHOS == 'q' -o $CHOS == 'Q' ];do
case $CHOS in
d|D)
df -h
;;
f|F)
free -h | grep "Mem"
;;
s|S)
free -h | grep "Swap"
;;
*)
echo "Input false,please again choose options"
;;
esac
SHOWMENU
read -p "Please choose options: " CHOS
done
引用函数的执行结果和执行状态结果
引用函数的执行结果:
#!/bin/bash
function TWOINT {
A=6
B=9
C=$[$A+$B]
echo "$C"
} M=17
SUM=$[$M+`TWOINT`]
echo "$SUM"
通过反向引号,引用函数的执行结果 引用函数的执行状态返回值:
#!/bin/bash
function TWOINT {
A=6
B=9
C=$[$A+$B]
} TWOINT
echo $?
函数自定义状态返回值
return:可以自定义函数的状态返回值(0——255),但是函数中如果遇到return,那么将终止(退出)函数,后面的函数语句将不再执行 示例:
#!/bin/bash
USERS=hadoop
function USERADD {
if ! id -u $USERS &>/dev/null;then #if是通过判断命令的执行状态返回值进行判断的,0为真,非0为假
useradd $USERS
echo $USERS | passwd --stdin $USERS &>/dev/null
return 0
else
return 1
fi
}
USERADD
if [ $? -eq 0 ];then
echo "$USERS add success"
else
echo "$USERS add failed"
fi
接收参数的函数
FUNCTION_NAME $1 $2...
函数调用,后面跟上参数即可 示例:
#!/bin/bash
function TWOINT {
echo $[$1+$2]
}
TWOINT 5 6 还可以把函数的执行结果保存到一个变量里:
示例1:
#!/bin/bash
function TWOINT {
echo $[$1+$2]
}
SUM=`TWOINT 5 6`
echo "$SUM" 示例2:
#!/bin/bash
function TWOINT {
echo $[$1+$2]
}
for i in {1..10};do
let J=$[$i+1]
echo "$J+$i="`TWOINT $J $i`
done 示例3:
#!/bin/bash
USERS=hadoop
function USERADD {
if ! id -u $1 &>/dev/null;then
useradd $1
echo $1 | passwd --stdin $1 &>/dev/null
return 0
else
return 1
fi
} for i in {1..10};do
USERADD user$i
if [ $? -eq 0 ];then
echo "add user$i success"
else
echo "add user$i failed"
fi
done 示例4:
#!/bin/bash
function USERS {
if id $1 &>/dev/null;then
getent passwd | grep -w "$1" | awk -F: '{print $1,$NF}'
return 0
else
echo "$1 is not exists"
return 1
fi
}
read -p "please input user name(q|Q): " NAME
until [ $NAME == 'q' -o $NAME == 'Q' ];do
if USERS $NAME ;then
read -p "please input next user: " NAME
else
read -p "please again input user: " NAME
fi
done
shell脚本编程基础之函数的更多相关文章
- SHELL脚本编程基础知识
SHELL脚本编程基础知识 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. Linux之父Linus有一句话很经典:"Talk is cheap, show me the ...
- Linux shell脚本编程基础之练习篇
shell脚本编程基础之练习篇. 1.编写一个脚本使我们在写一个脚本时自动生成”#!/bin/bash”这一行和注释信息. #!/bin/bash ] then echo "请输入一个参数& ...
- shell脚本编程基础介绍
Linux系统——shell脚本编程基础介绍 1.什么是shell 它是一个命令解释器,在linux/unix操作系统的最外层,负责直接与用户对话,把用户的输入解释给操作系统,并处理各种操作输出的结果 ...
- linux基础—课堂随笔_03 SHELL脚本编程基础
shell脚本编程基础 条件选择:if语句 选择执行: 注意:if语句可嵌套 单分支 if(开头)判断条件:then条件为真的分支代码 fi(结尾) 双分支 if(开头)判断条件:then条件为真的分 ...
- shell脚本编程基础
最近学习了shell脚本编程,感觉自己的脚本写的不太好,所以想把shell脚本相关的知识系统的整理一下,便于以后的学习和使用. 一.shell脚本基础 shell脚本是利用shell的功能 ...
- Linux Shell脚本编程-基础1
概述: shell脚本在Linux系统管理员的运维工作中非常重要.shell脚本能够帮助我们很方便的管理服务器,因为我们可以指定一个任务计划,定时的去执行某一个脚本以满足我们的需求.本篇将从编程基础 ...
- 《Linux命令行与shell脚本编程大全 第3版》Shell脚本编程基础---57
以下为阅读<Linux命令行与shell脚本编程大全 第3版>的读书笔记,为了方便记录,特地与书的内容保持同步,特意做成一节一次随笔,特记录如下:
- shell脚本编程基础之自定义函数库
脚本编程知识点 ${#VAR_NAME}:引用变量中字符的长度 A="25 90 100 120": echo ${A#* }:针对A变量,#表示从左往右,*空格表示以空格为分隔符 ...
- Linux基础篇–shell脚本编程基础
本章内容概要 编程基础 脚本基本格式 变量 运算 条件测试 配置用户环境 7.1 编程基础程序:指令+数据程序编程风格: 过程式:以指令为中心,数据服务于指令 对象式:以数据为中心 ...
随机推荐
- Linux中使用MegaCli工具查看、管理Raid卡信息
MegaCli是一款管理维护硬件RAID软件,可以通过它来了解当前raid卡的所有信息,包括 raid卡的型号,raid的阵列类型,raid 上各磁盘状态,等等.通常,我们对硬盘当前的状态不太好确定, ...
- Teamviewer显示“未就绪,请检查您的连接”解决办法
打开TeamViewer一直提示“未就绪,请检查您的连接”,一直会弹出一个框提示检查网路设置什么. 解决办法:修改DNS为114.114.114.114,然后TeamViewer就显示网络正常. 为什 ...
- 获取本机的IP地址和mac地址
1. 以前一直用ipconfig来查看ip地址,哈哈哈,现在发现挺好玩 #获取本机的IP地址和mac地址 import uuid import socket def get_mac_address() ...
- 没有15k薪资都不会了解的测试内幕
软件测试的工程师阶层是指随着行业的飞速发展,测试人员犹如身在洪流之中“逆水行舟不进则退”.知其然已经无法满足当今的测试人员,还要知其所以然.所以测试人员不仅仅要关注系统外部结构,还得了解系统内部的逻辑 ...
- python day 17: UML(统一建模语言)
python day 17 UML:unified modeling languages,是一种基于面向对象的可视化建模语言. 画图语言:画图要合理.即符合逻辑. 历史: 3.1. 软件功能越来越强大 ...
- float与position间的区别
float与position间的区别: 个人理解为:脱离文档流不一定脱离文本流:但脱离文本流,则也脱离文档流.[如有更好的理解还望评论区一起探讨,共同学习进步]一.float 浮动(脱离文档流, ...
- javascript中attribute和property的区别详解
DOM元素的attribute和property很容易混倄在一起,分不清楚,两者是不同的东西,但是两者又联系紧密.很多新手朋友,也包括以前的我,经常会搞不清楚. attribute翻译成中文术语为“特 ...
- RTP包的结构
live555中数据的发送最后是要使用RTP协议发送的,下面介绍一下RTP包格式. RTP packet RTP是基于UDP协议的,RTP服务器会通过UDP协议,通常每次会发送一个RTP packet ...
- Linux 磁盘配额(XFS & EXT4)
若是在Linux中搭建了FTP服务器,为了安全性,就要考虑磁盘配额,以防服务器磁盘空间被恶意占满. 磁盘配额概述 1.作用范围:只在指定的分区有效. 2.限制对象:主要针对用户.组进行限制,对组账号限 ...
- Pyspark中遇到的 java.io.IOException: Not a file 和 pyspark.sql.utils.AnalysisException: 'Table or view not found
最近执行pyspark时,直接读取hive里面的数据,经常遇到几个问题: 1. java.io.IOException: Not a file —— 然而事实上文件是存在的,是 hdfs 的默认路径 ...