美文网首页
shell脚本的一些常用命令简介

shell脚本的一些常用命令简介

作者: 后端架构进阶 | 来源:发表于2019-12-24 11:39 被阅读0次

    一、前言

    什么是shell脚本
    Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。所以,shell脚本就是预先编写好用来操作linux的一种脚本语言。

    二、基本规范和字符

    1. 常见规范约束

    • shell一般以*.sh结束
    • shell的编写一般以#!/bin/sh或者是#!bin/bash开头,第一行就是这个
      image.png

    2. 变量的命名规范

    • 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
    • 中间不能有空格,可以使用下划线(_)。
    • 不能使用标点符号。
    • 不能使用bash里的关键字(可用help命令查看保留关键字)。

    3. 变量的定义和使用

    #!/bin/sh
    
    demoName="test"
    
    echo $demoName
    
    echo "我是测试的 ${demoName}1 "
    
    echo "我是测试的 $demoName1"
    

    注意:=前后不要有空格。

    使用直接用美元符号$即可,为了更直观的看出,强烈建议使用${},便于区分变量和参数,这是一直很好的编程习惯。下面的结果就很直观的看得出来。
    输出结果:

    test
    我是测试的 test1 
    我是测试的
    

    4. 字符串拼接

    #!/bin/sh
    
    demoName="test"
    
    str='hello, '${demoName}''
    echo $str
    

    输出: hello, test

    5. 字符串长度

    #!/bin/sh
    
    demoName="test"
    
    echo ${#demoName}
    

    输出: 4

    6. 截取字符串

    #!/bin/sh
    
    demoName="test"
    
    echo ${demoName:1:2}
    
    

    输出:es

    7. 查找字符出现的位置(哪个字母先出现就计算哪个)

    #!/bin/sh
    
    demoName="test"
    echo `expr index ${demoName} se`
    

    输出结果:2

    8.注释

    以 # 开头的行就是注释,会被解释器忽略。

    #--------------------------------------------
    # 这是一个注释
    # author: yxb
    # site:www.baidu.com
    #--------------------------------------------
    

    三、运算符

    1. 算数运算符

    假设a10 b=20

    符号 说明 举例
    + 加号 expr $a + $b 结果为 30。
    - 减号 expr $a - $b 结果为 -10。
    * expr $a \* $b 结果为 200。
    / expr $b / $a 结果为 2。
    % 取余 expr $b % $a 结果为 0。
    = 赋值 a=$b 将把变量 b 的值赋给 a。
    == 等于 [ a ==b ] 返回 false。
    != 不等于 [ a !=b ] 返回 true。
    #!/bin/sh
    a=10
    b=20
    
    val=`expr $a + $b`
    echo "a + b : $val"
    
    val=`expr $a - $b`
    echo "a - b : $val"
    
    val=`expr $a \* $b`
    echo "a * b : $val"
    
    val=`expr $b / $a`
    echo "b / a : $val"
    
    val=`expr $b % $a`
    echo "b % a : $val"
    
    if [ $a == $b ]
    then
       echo "a 等于 b"
    fi
    if [ $a != $b ]
    then
       echo "a 不等于 b"
    fi
    

    2. 关系运算符

    假设a10 b=20

    符号 说明 举例
    -eq 检测两个数是否相等,相等返回 true。 [ a -eqb ] 返回 false。
    -ne 检测两个数是否不相等,不相等返回 true。 [ a -neb ] 返回 true。
    -gt 检测左边的数是否大于右边的,如果是,则返回 true。 [ a -gtb ] 返回 false。
    -lt 检测左边的数是否小于右边的,如果是,则返回 true。 [ a -ltb ] 返回 true。
    -ge 检测左边的数是否大于等于右边的,如果是,则返回 true。 [ a -geb ] 返回 false。
    -le 检测左边的数是否小于等于右边的,如果是,则返回 true。 [ a -leb ] 返回 true。
    #!/bin/bash
    
    
    a=10
    b=20
    
    if [ $a != $b ]
    then
       echo "$a != $b : a 不等于 b"
    else
       echo "$a == $b: a 等于 b"
    fi
    if [ $a -lt 100 -a $b -gt 15 ]
    then
       echo "$a 小于 100 且 $b 大于 15 : 返回 true"
    else
       echo "$a 小于 100 且 $b 大于 15 : 返回 false"
    fi
    if [ $a -lt 100 -o $b -gt 100 ]
    then
       echo "$a 小于 100 或 $b 大于 100 : 返回 true"
    else
       echo "$a 小于 100 或 $b 大于 100 : 返回 false"
    fi
    if [ $a -lt 5 -o $b -gt 100 ]
    then
       echo "$a 小于 5 或 $b 大于 100 : 返回 true"
    else
       echo "$a 小于 5 或 $b 大于 100 : 返回 false"
    fi
    

    3. 布尔运算符

    符号 说明 举例
    ! 非运算,表达式为 true 则返回 false,否则返回 true。 [ ! false ] 返回 true。
    -o 或运算,有一个表达式为 true 则返回 true。 [ a -lt 20 -ob -gt 100 ] 返回 true。
    -a 与运算,两个表达式都为 true 才返回 true。 [ a -lt 20 -ab -gt 100 ] 返回 false。
    a=10
    b=20
    
    if [ $a != $b ]
    then
       echo "$a != $b : a 不等于 b"
    else
       echo "$a == $b: a 等于 b"
    fi
    if [ $a -lt 100 -a $b -gt 15 ]
    then
       echo "$a 小于 100 且 $b 大于 15 : 返回 true"
    else
       echo "$a 小于 100 且 $b 大于 15 : 返回 false"
    fi
    if [ $a -lt 100 -o $b -gt 100 ]
    then
       echo "$a 小于 100 或 $b 大于 100 : 返回 true"
    else
       echo "$a 小于 100 或 $b 大于 100 : 返回 false"
    fi
    if [ $a -lt 5 -o $b -gt 100 ]
    then
       echo "$a 小于 5 或 $b 大于 100 : 返回 true"
    else
       echo "$a 小于 5 或 $b 大于 100 : 返回 false"
    fi
    

    4.逻辑运算符

    && 逻辑的AND
    || 逻辑的OR

    a=10
    b=20
    
    if [[ $a -lt 100 && $b -gt 100 ]]
    then
       echo "返回 true"
    else
       echo "返回 false"
    fi
    
    if [[ $a -lt 100 || $b -gt 100 ]]
    then
       echo "返回 true"
    else
       echo "返回 false"
    fi
    

    5. 字符串运算符

    符号 说明 举例
    = 检测两个字符串是否相等,相等返回 true。 [ a =b ] 返回 false。
    != 检测两个字符串是否相等,不相等返回 true。 [ a !=b ] 返回 true。
    -z 检测字符串长度是否为0,为0返回 true。 [ -z $a ] 返回 false。
    -n 检测字符串长度是否为0,不为0返回 true。 [ -n "$a" ] 返回 true。
    $ 检测字符串是否为空,不为空返回 true。 [ $a ] 返回 true。
    
    a="abc"
    b="efg"
    
    if [ $a = $b ]
    then
       echo "$a = $b : a 等于 b"
    else
       echo "$a = $b: a 不等于 b"
    fi
    if [ $a != $b ]
    then
       echo "$a != $b : a 不等于 b"
    else
       echo "$a != $b: a 等于 b"
    fi
    if [ -z $a ]
    then
       echo "-z $a : 字符串长度为 0"
    else
       echo "-z $a : 字符串长度不为 0"
    fi
    if [ -n "$a" ]
    then
       echo "-n $a : 字符串长度不为 0"
    else
       echo "-n $a : 字符串长度为 0"
    fi
    if [ $a ]
    then
       echo "$a : 字符串不为空"
    else
       echo "$a : 字符串为空"
    fi
    

    四、流程控制

    1.if else

    if condition
    then
        command1 
        command2
        ...
        commandN
    else
        command
    fi
    

    2. if elif else

    if condition1
    then
        command1
    elif condition2 
    then 
        command2
    else
        commandN
    fi
    

    五、时间date在脚本中的几个用法

    1. 获取年月日时分秒周几

    现在时间 2019-12-24 11:16:23 周二

    date +%Y 以四位数字格式打印年份
    2019

    date +%y 以二位数字格式打印年份
    19

    date +%m 月份
    12

    date +%d 日期(几号)
    24
    date +%H 小时
    11

    date +%M 分钟
    16
    date +%S 秒
    23
    date +%w 星期,如果结果显示0,则表示周日
    2

    image.png

    注意:一定要记得这个空格,不然有问题

    2. 获取今天前n天或这后n天的时间

    date -d "num params" +%p

    num: 前几或者后几 比如:-1 或者 3
    params参数的取值:year month day hour min second week
    p参数的取值:Y m d H M S w

    当前时间:2019-12-24 11:37:23

    date -d "-1 year" +%Y  
    结果:2018
    date -d "1 month" +%m 
    结果:01
    date -d "-1 day" +%d 
    结果:23
    date -d "-1 hour" +%H 
    结果:10
    date -d "-1 min" +%M  
    结果:36
    date -d "-1 second" +%S 
    结果:22
    

    相关文章

      网友评论

          本文标题:shell脚本的一些常用命令简介

          本文链接:https://www.haomeiwen.com/subject/enftoctx.html