Shell数值运算、函数

Shell算数计算、函数

Shell数值运算

1、整数计算的方法

注: (())用于数值计算最高效
(1)expr命令:手工的命令行计数器
   格式: expr 表达式
   表达式说明:* 用空格隔开每项
              * 用 \ 转义特殊的字符
              * 包括空格或其他特殊字符的字符串需要用引号引起来
   案列:
   a、计算字串长度
   # expr length "this is a test"
   b、整数计算
   # expr 14 + 9
   # expr 14 % 5
   # expr 14 - 5
   # expr 14 \* 5  (注:使用乘号需要转义)
   c、获取字串在主串中的位置
   # expr index "this is a test" h

(2)bc命令:UNNIX下的运算器(可以计算整数也可以是小数)
 用法:
 a、# i=2
    # i=`$i+1|bc`
    # echo $i
 b、# echo 3.5*5|bc
 c、# echo "i=3;3.5*5|bc"  #计算3.5*5并保留3位小数
 d、通过一条命令计算1+2....+10的值(使用bc)
 [root@localhost ~]# echo {1..10}|tr " " "+"|bc  使用tr把{}生成的序列中的空格转换成+
 55

 (3)(()):Linux下大量数据计算时最后高效的方法(只可处理整数)
 用法:echo $((5*5))
 
 (4) typeset命令:也可以用来设置变量属性
 用法:
 # typeset -i A=1 B=3
 # A=A+B
 # echo $A
 
 (5)$[]
 用法:
 # i=1
 # echo $[i+1]
 
 (6)awk命令

Shell变量输入

1、read命令:从标准输入获得,read为bash内置变量

选项:
  -p :设置提示信息
  -t :设置等待时间,默认单位是秒(timeout)
练习:
(1)read 读入
  [root@localhost ~]# read -p "pls input a number:" num
  pls input a number:15
  [root@localhost ~]# echo $num
  15
 (2) 设置等待时间
  # read -t 10 -p "pls input a number" num  #10s超时退出
(3)脚本
  #!/bin/bash
  read -p "pls input two number" num1 num2
  a=$num1
  b=$num2
  echo "$a-$b=$(($a - $b))"
 (4)脚本改进  
 #/bin/bash
 read -p "pls input two int:" num1 num2
 a=$num1
 b=$num2
 [ -z "$a" ]&&{
     echo "first num must be int"
     exit 1
 }
 [ -z "$b" ]&&{
     echo "second num must be int"
     exit 2
 }
 expr $a + $b
 expr $a - $b

条件测试与比较

1、三种语法形式

语法格式1、test <测试表达式>
用法:
a、判断文件是否存在
  test -f filename && echo 1 || echo 0
b、判断是否是目录
  test -d /dir && echo 1 || echo 0

语法格式2、[<测试表达式>] 建议使用(系统写法)
注:内部不可用&&||,用-a、-o代替
用法:
a、[ -f filename ] && echo 1 || echo 0

语法格式3、[[测试表达式]],内部可以使用&&||
用法:
a、[[ -f filename && -d /dir ]] && echo 1 || echo 0

注:在[[]]中可以使用通配符进行模式匹配,但不能在[]

Shell函数

1、函数有类似别名的功能,把程序中多次调用的代码定义成一份,之后再用这段代码只用函数名就行

使用函数的优势:

a、把相同的程序段定义成函数,可以减少整个程序的代码量

b、可以让程序代码更加清晰

c、增加程序的可读、易读性,以及可管理性

d、可以实现程序功能模块化,不同的程序使用函数模块化

**强调:**对于shell来说,Linux系统的2000个命令都可以说是shell的函数

2、shell函数语法:

规范语法格式:
function 函数名(){
    指令。。。。
    return n
}
提示:shell的返回值时exit输出返回值,函数里用return输出返回值

注意:函数传参方式  函数名 参数1 参数2 eg: fun 123 456

3、shell函数的执行

函数必须定义在调用他的函数前面
(1)直接执行函数名即可(不带小括号)
 # 函数名
 (2) 带参数的函数执行方法
 # 函数名 参数1 参数2
 提示:函数传参和脚本传参一样,只是脚本名替换成函数名即可。
 特殊地:$0 比较特殊,它仍然是父脚本的名称
        函数的参数变量是在函数提里面定义,如果是普通变量一般会使用local i 定义;

4、shell函数案例:

 #!/bin/bash
function test(){
        echo "hanmenghao"
}
test  #函数调用
注:函数也可以定义在/etc/init.d/functions文件内,此时若在别的文件内调用此函数,需引入: 首行加 sh /etc/init.d/functions

5、shell函数传参 格式: 函数名 参数值

#!/bin/bash
function test()
{
    echo "this is $1"
}
test hanmenghao
执行结果:
[root@localhost ~]# source hanshu.sh 
hanmenghao

6、案列:函数传参转成脚本命令行传参,对任意指定的URL判断是否异常

分布解答:

a、脚本传参检查Web url是否正常(curl或wget检查)

b、检查的功能写成函数

c、函数传参转成脚本命令行传参,对任意指定Url判断是否异常

 #!/bin/bash
[ -f /etc/init.d/functions ]&& . /etc/init.d/functions#好习惯,进去先加载系统函数库
usage(){
    echo "USAGE : $0 url"
    exit 1
}
CheckUrl(){ # -T 超时时间  --spider 爬虫  -t尝试次数
    wget -T 10 --spider -t $1 2&>/dev/null
    RETVAL=$?
    if [ $RETVAL -eq 0 ];then
    	action "$1 URl" /bin/true
    else
    	action "$1 URl" /bin/false
    fi
    return $REVAL
}
main(){  #main函数:主函数
	if [ $# -ne 1 ];then
		usage
	fi
    CheckUrl $1
}
main $*    # $*:代表所有参数      "$*":把所有输入当作一项处理

7、案列:传两个参数实现给任意字符串按任意颜色输出

 #!/bin/bash
RED_COLOR='\E[1:31m'
GREEN_COLOR='\E[1:32m'
YELLOW_COLOR='\E[1:33m'
BULE_COLOR='\E[1:34m'
PINK_COLOR='\E[1:35m'
RES='\E[0m'   #RES代表执行此项颜色匹配
[ -f /etc/init.d/fountions ]&& . /etc/init.d/fountions
usage(){
    echo "USAGE:$0 {red|green|blue\yellow}"
    exit 1
}
color(){
    case $1 in
    	red)
    	echo -e "$RED_COLOR $2 $RES"
    	;;
    	bule)
    	echo -e "$BULE_COLOR $2 $RES"
    	;;
    	yellow)
    	echo -e "$YELLOW_COLOR $2 $RES"
    	;;
    	green)
    	echo -e "$GREEN_COLOR $2 $RES"
    	;;
    	*)
    	usage
esac
}
main(){
    if [ $# -ne 2 ];then
    	usage
    fi
    color  $1 $2
}
main $*
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Star星屹程序设计

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值