• shell脚本


    1、数字运算

    a、expr数学运算工具

    ​ 例:#aa=1

    ​ #bb=2

    ​ #cc=$(expr $aa + $bb)

    b、$(())

    ​ 例:#dd=$(($aa + $bb))

    c、$[]

    ​ 例:#ee=$[$aa + $bb]

    2、运算符

    /:整数相除取整

    %:取余数

    *:乘法

    a+=b等价于a=a+b

    注意:使用()可以方便的解决优先级问题

    3、test语句

    作用:条件判断命令

    a、整数比较

    ​ -lt(小于)、-le(小于等于)、-gt(大于)、-ge(大于等于)、-eq(等于)、-ne(不等于)

    ​ 举例:#test 1 -lt 4

    ​ #echo $? -->0

    ​ 等价命令:

    ​ #[ 1 -lt 4 ]

    ​ 注意:"["后面一定要加空格

    ​ 举例:cat eg1.sh

    ​ #!/bin/sh

    ​ if [ $1 -gt 0 ]

    ​ then

    ​ echo "$1 number is postive"

    ​ fi

    b、文件测试

    ​ -f(存在且是普通文件)、-d(存在且是目录)、-s(存在且字节大于0)、-r/w/x(存在且具有指定的权限)

    ​ 举例:cat eg2.sh

    ​ #!/bin/bash

    ​ if [ $# -ne 1 ]

    ​ then

    ​ echo "usage -$0 file-name"

    ​ exit 1

    ​ fi

    ​ if [ -f $1 ]

    ​ then

    ​ echo "$1 file exist"

    ​ else

    ​ echo "sorry, $1 file does not exist"

    ​ fi

    c、字符串测试

    ​ 举例:s="hello"

    ​ s1="world"

    ​ [ $s = $s1 ] -->判断字符串相等,假1

    ​ [ $s != $s1 ] -->判断字符串不相等,0

    ​ [ $s ] -->判断字符串非空,为0

    ​ [ -z $s ] -->判断为空,1

    ​ [ -n $s ] -->字符串长度大于0,真0

    d、逻辑测试

    -a

    -o

    ​ 举例:

    ​ a=1

    ​ [ $a -lt 5 -a $a -gt 0 ] -->判断a是否小于5且大于0 逻辑与 真0

    ​ [ $a -lt 0 -o $a -gt 5 ] -->判断a是否小于0或者大于5 假 假 逻辑或 假1

    ​ [ ! $a -lt 0 ] -->非 真0

    4、条件分支语句

    a、if

    ​ 语法结构:

    ​ if 条件1 如果满足条件1

    ​ then 则

    ​ 语句1 执行语句1

    ​ elif 条件2 否则,如果满足条件2

    ​ then 则

    ​ 语句2 执行语句2

    ​ elif 条件3 否则,如果满足条件3

    ​ then 则

    ​ 语句3 执行语句3

    ​ else 否则

    ​ 语句4 执行语句4

    ​ fi 结束if判断

    ​ 举例:

    ​ #!/bin/bash

    ​ if [ $# -gt 1 ]

    ​ then

    ​ echo "the number cannot bigger than 1"

    ​ exit 1

    ​ fi

    ​ if [ $# -eq 0 ]

    ​ then

    ​ ls ./

    ​ elif [ $1 = "-l" ]

    ​ then

    ​ ls -l ./

    ​ elif [ $1 = "-a" ]

    ​ then

    ​ ls -a ./

    ​ fi

    ​ 注意:关键字后一定要加空格。

    b、case

    ​ 语法结构:

    ​ case 变量 in

    ​ 值1) 语句1 ;;

    ​ 值2) 语句2 ;;

    ​ .......

    ​ *) 语句n ;;

    ​ esac

    ​ 举例:

    ​ #!/bin/bash

    ​ case "$#" in

    ​ 0) echo "input 0 argument" ;;

    ​ 1) echo "input 1 argument" ;;

    ​ *) echo "input n argument" ;;

    ​ esac

    c、区别

    ​ 区间判断的时候使用if语句,等值判断的时候使用case语句。

    5、循环结构

    a、for循环

    ​ 语法结构:

    ​ for 循环变量 in 序列

    ​ do

    ​ 循环语句

    ​ done

    ​ 举例:

    ​ #!/bin/bash

    ​ for i in seq 1 9

    ​ do

    ​ echo expr $i * 10

    ​ done

    ​ 扩展:

    ​ seq 1 9 -->生成1,2,3,4,...,9序列

    ​ seq 9 -1 1 -->生成9,8,7,...,1序列,其中-1是步长

    b、while循环

    ​ 语法结构:

    ​ while 循环判断条件

    ​ do

    ​ 循环语句

    ​ done

    ​ 注意:只要循环判断条件为真,则一致执行循环,否则循环结束。

    ​ 举例:

    ​ #!/bin/bash

    ​ i=1

    ​ sum=0

    ​ while [ $i -le 100 ]

    ​ do

    ​ sum=$[$sum + $i]

    ​ i=$[$i + 1]

    ​ done

    ​ echo $sum

    扩展:死循环,尤其是在while循环中,不要忘记迭代变量自增(自减)。但是一般在服务器中,至少会用到一个死循环。

    ​ 循环嵌套:循环中嵌入了循环。

    c、break和continue

    ​ break:结束整个循环;

    ​ continue:不再运行本次循环后面的语句,而直接进行下一次循环。

    ​ 举例1:

    ​ echo "begin"

    ​ for i in seq 1 5

    ​ do

    ​ if [ $i -eq 3 ]

    ​ then

    ​ break

    ​ fi

    ​ echo expr $i * 10

    ​ done

    ​ echo "end"

    ​ 结果:10

    ​ 20

    ​ 举例2:

    ​ echo "begin"

    ​ for i in seq 1 5

    ​ do

    ​ if [ $i -eq 3 ]

    ​ then

    ​ continue

    ​ fi

    ​ echo expr $i * 10

    ​ done

    ​ echo "end"

    ​ 结果:10

    ​ 20

    ​ 40

    ​ 50

    ​ 提高:在两层嵌套循环中可以借助break 2跳出大循环;continue 2结果类似。

    6、read获取用户键盘输入

    注意:多个变量用空格或tab分割;个数不够,后续变量为空;个数过多,最后变量取剩余的值。

    举例:

    ​ #!/bin/bash

    ​ echo "please input a b:"

    ​ read a b

    ​ for i in seq $a $b

    ​ do

    ​ echo expr $i * 10

    ​ done

    注意:一般情况下,在获取输入之前提醒用户需要输入的参数个数和格式。

    7、函数

    作用:将一定功能的代码块进行封装,方便代码的重复调用。

    语法结构:

    ​ [function] 函数名()

    ​ {

    ​ 语句1

    ​ ...

    ​ }

    举例1:

    ​ #!/bin/bash

    ​ hello()

    ​ {

    ​ echo "today is date"

    ​ }

    ​ hello -->函数的调用

    传参:

    ​ #!/bin/bash

    ​ fname()

    ​ {

    ​ echo $1,$2;

    ​ echo "$@";

    ​ echo "$*";

    ​ return 5;

    ​ }

    ​ printf "two arguments:"

    ​ read a b

    ​ fname $a $b

    ​ echo $? --> 显示上一句的返回结果

    注意:如果不加return,默认返回0

    举例2:

    ​ #!/bin/bash

    ​ fname()

    ​ {

    ​ if [ $1 -gt $2 ]

    ​ then

    ​ return 1;

    ​ elif [ $1 -lt $2 ]

    ​ then

    ​ return 2;

    ​ else

    ​ return 0;

    ​ fi

    ​ }

    ​ printf "two arguments:"

    ​ read a b

    ​ fname $a $b

    ​ case $? in

    ​ 1) echo "gt" ;;

    ​ 2) echo "lt" ;;

    ​ 0) echo "eq" ;;

    ​ esac

    8、数组

    定义:

    ​ i、数组变量=(元素1 元素2 ... 元素n)

    ​ ii、数组变量[0]=元素值1

    ​ 数组变量[1]=元素值2

    ​ ...

    ​ 数组变量[n]=元素值n

    注意:数组的索引是从0开始的,最大值取到元素个数减1

    举例:

    ​ #!/bin/bash

    ​ array1=(1 2 3 4 5 6)

    ​ array2[0]="first"

    ​ array2[1]="second"

    ​ array2[2]="third"

    ​ echo ${array1[0]} -->打印第一个元素值

    ​ echo ${array2[2]} -->打印第三个元素值

    ​ echo ${array1[*]} -->打印所有元素值

    ​ echo ${array2[@]} -->打印所有元素值

    ​ echo ${#array1[*]} -->获得数组的长度

    遍历数组:

    ​ array3=(2 3 4 5 6 7)

    ​ for i in ${array3[@]}

    ​ do

    ​ echo $i

    ​ done

  • 相关阅读:
    datagrid在MVC中的运用05-加入时间搜索条件,枚举填充下拉框
    datagrid在MVC中的运用04-同时添加搜索和操作区域
    datagrid在MVC中的运用03-选择单行或多行
    datagrid在MVC中的运用02-结合搜索
    datagrid在MVC中的运用01-基本属性并实现分页
    Object [object Object] has no method 'live'
    AutoMapper在MVC中的运用小结
    error CS0234: 命名空间“XXX”中不存在类型或命名空间名称“UserInfoVm”(是否缺少程序集引用?)
    《黄聪:手机移动站SEO优化教程》2、PC端和手机移动端SEO优化区别
    《黄聪:手机移动站SEO优化教程》1、为什么要做手机移动端网站
  • 原文地址:https://www.cnblogs.com/striver20/p/12785494.html
Copyright © 2020-2023  润新知