Shell函数练习
Posted sre-chan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Shell函数练习相关的知识,希望对你有一定的参考价值。
1. 编写函数,实现打印绿色OK和红色FAILED 判断是否有参数,存在为Ok,不存在为FAILED
[root@template shellScript]# cat ex1.sh
# 编写函数,实现打印绿色OK和红色FAILED 判断是否有参数,存在为Ok,不存在为FAILED
#!/bin/bash
fun()
if [ $# -ne 0 ]
then
echo -e "\\033[32m OK \\033[0m"
else
echo -e "\\033[31m FAILED \\033[0m"
fi
read -p "plz input sth..." str
fun $str
[root@template shellScript]# ./ex1.sh
plz input sth...1qw11d1d
OK
[root@template shellScript]# ./ex1.sh
plz input sth...
FAILED
运行效果图:
2. 编写函数,实现判断是否无位置参数,如无参数,提示错误
[root@template shellScript]# cat ex2.sh
# 编写函数,实现判断是否无位置参数,如无参数,提示错误
#!/bin/bash
fun()
if [ $# -eq 0 ]
then
echo "无位置参数"
else
echo "位置参数为$@"
fi
read -p "plz input sth..." str
fun $str
运行截图:
3. 编写函数实现两个数字做为参数,返回最大值
# 此方法不能比较负数的大小
[root@template shellScript]# cat ex3.sh
# 编写函数实现两个数字做为参数,返回最大值
#!/bin/bash
fun()
# 判断输入是否是数字
if [[ $a =~ ^[0-9]*$ ]] && [[ $b =~ ^[0-9]*$ ]]
then
# 比较大小
if [ $a -gt $b ]
then
echo "$a > $b"
elif [ $a -lt $b ]
then
echo "$a < $b"
else
echo "$a = $b"
fi
else
echo "请输入俩个数字!!!"
fi
# 输入负数也可以比较大小
# read -p "plz input two num:" a b
read -p "plz input num1:" a
read -p "plz input num2:" b
fun $a $b
测试截图:
方式二:
[root@template shellScript]# cat ./ex3_2.sh
#!/bin/bash
read -p "please input two number:" a b
fun()
[ -z "$a" -o -z "$b" ] &&
echo "please input \'two\' number"
exit 1
expr $a + 10 &>/dev/null
return_a=$?
expr $b + 10 &>/dev/null
return_b=$?
[ "$return_a" -eq 0 -a "$return_b" -eq 0 ] ||
echo "please input two \'number\'"
exit 2
[ "$a" -lt "$b" ] &&
echo "$a < $b"
exit 0
[ "$a" -eq "$b" ] &&
echo "$a = $b"
exit 0
[ "$a" -gt "$b" ] &&
echo "$a > $b"
exit 0
fun $a $b
运行截图:
-------------------------------------------
个性签名:今天做了别人不想做的事,明天你就做得到别人做不到的事,尝试你都不敢,你拿什么赢!
如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!
Linux下shell脚本中信号捕获和函数练习脚本之ping一个网段
该脚本主要的目的是练习在Linux bash脚本中捕获信号,顺便练习一下函数的使用,还有就是终止一个正在运行的程序后,该程序打开的文件的后续处理问题等等!
脚本功能:
ping一个网段内的IP,检测哪些IP在线,哪些IP不在线
练习的命令:
1、mktemp
用法:#mktemp 1117.www.qixoo.qixoo.com/Path/To/SomeFile.XXX 其中XXX可以为多个,是由系统随机生成的一段字符串
-d 创建为目录
2、ping 测试网络是否通畅
用法:#ping [-c #] [-W N] IP
-c # ,#表示指定ping的次数
-W N,N表示指定超时时间
3、trap 捕获信号
用法:#trap ‘COMMAND‘ SIGN_Table
常用信号有:
1:SIGHUP 作用:使一个进程重读配置文件而不用重启进程
2:SIGINT 作用:中断一个进程,Ctrl+C 发送的就是该信号
9:SIGKILL 作用:无论如何都要杀死一个进程,相对于15号信号
15:SIGTERM 作用:会让其把自己相关事务处理好后再杀死该进程
18:SIGCONT 作用:使一个停止的进程继续进行
19:SIGSTOP 作用:使一个进程停止作业,Ctrl+z发送的就是该信号
4、tee 读取标准输入的数据,并将其内容输出到文件
用法:tee [-a] /Path/To/SomeFile
-a :表示附加到既有文件的后面,而非覆盖它.
说明:tee指令会从标准输入设备读取数据,将其内容输出到标准输出设备,同时保存到文件。
!/bin/bash
NET=192.168.1
FILE=`mktemp qkxue.net/tmp/file.XXXXXX`
cleanup(){
echo "Quiting..."
rm -f $FILE
exit 1
}
trap ‘cleanup‘ INT
for I in {1..254};do
if ping -c 1 -W 1 $NET.$I &> /dev/null; then
echo -e "\033[32m$NET.$I is up\033[03m" | tee -a $FILE
else
echo -e "\033[31m$NET.$I is down\033[03m"
fi
done
有兴趣的朋友,可以把这里调试一下,在ping的过程中按Ctrl+c试试看效果哦!
以上是关于Shell函数练习的主要内容,如果未能解决你的问题,请参考以下文章
Linux下shell脚本中信号捕获和函数练习脚本之ping一个网段