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一个网段

Linux的shell脚本的语句,函数,检测服务,启动脚本的练习

Shell练习题

shell语法习题练习进阶版

SHELL用法九(awk练习)

Unix Shell范例精解---AWK练习(上)