• shell脚本基础 数值运算 判断 及if语句


    数值运算

    整数运算【三种,随便掌握一种即可】
    expr 数字 运算符 数字
    [root@ceshiji ~]# expr 1 + 1(运算符号都是+ - * / 注:*需要*。%是取余,余数只有0 1 2)
    2
    [root@ceshiji ~]# expr 45 * 1
    45

    echo$[数字 运算符 数字]
    [root@ceshiji ~]# echo $[89*89+454848*874851]
    397924235569

    let
    i++ == i=i+1
    i+=2 == i=i+2
    i*=2 == i=i*2
    i=2 == i=i2
    i-=3 == i=i-2
    [root@ceshiji ~]# a=13
    [root@ceshiji ~]# let a++
    [root@ceshiji ~]# echo $a
    14
    [root@ceshiji ~]# let a+=6
    [root@ceshiji ~]# echo $a
    20

    小数运算【bc】(可以做逻辑运算,管道操作方便)
    [root@ceshiji ~]# echo "84515*4511.894654+4856.844*154.158-15451" |bc
    382056047.039810
    [root@ceshiji ~]# echo "899<1" |bc
    0
    [root@ceshiji ~]# echo "899>1" |bc
    1

    ————————————————————————————————————————
    命令的组合:

    语法格式
    判断:
    []:判断语句要在括号里执行


    逻辑分隔操作
    &&:给定条件必须成立,整个测试结果才为真
    ||:只要其中一个条件成立,整个测试结果为真
    ;:先执行,后执行

    A&&B:仅A成功了,才执行B
    A;B:执行A,再执行B
    A||B:仅A失败,才执行B

    常见的测试操作:(目录,文件)
    -e:判断对象是否存在,存在则为真
    -d:判断对象是否为目录,是则为真
    -f:判断对象是否为一般文件,是则为真
    -r:判断对象是否有可读权限,是则为真
    -w:判断对象是否有可写权限,是则为真
    -x:判断对象是有可执行权限,是则为真
    -s:判断文件是否非空,

    整数值比较:(数量)
    -eq:等于
    -ne:不等于
    -ge:大于或等于
    -le:小于或等于
    -gt:大于
    -lt:小于

    字符串比较:
    ==:两个字符串相同
    !=:两个字符串不相同
    -z:字符串的值为空
    -n:字符串的值不为空,(相当于! -z)

    [root@ceshiji ~]# vim a.sh(删除脚本)
    #!/bin/bash
    read -p "卧槽,你真要删除啊y/n" sure(read -p 显示在终端上的内容)
    [ -z $sure ]&&exit (判断$sure是否为空(-z)&&:符合,为则停止)
    [ $sure = y ]&& rm -rf $1(如果输入y &&符合,则继续下一步)
    [root@ceshiji ~]# ./a.sh ftp.sh
    卧槽,你真要删除啊y/ny

    [root@ceshiji ~]# vim b.sh(监控登陆用户量)
    #!/bin/bash
    num=`who |wc -l`(``反撇号中间写命令,此命令统计有多少用户,把数量放num里)
    [ $num -ge 4 ]&& mail -s 'errro' root < /etc/passwd(当用户数量大于(ge)4个&&:符合,执行发送邮件)
    [root@ceshiji ~]# crontab -e(添加到计划任务监控)
    * * * * * /root/b.sh

    [root@ceshiji ~]# vim a.sh(猜字游戏)
    #!/bin/bash
    xx=$((RANDOM%10))(xx变量,RANDOM是linux系统产生的随机数,%10表示10的数以内)
    read -p "hydra[0-10]:" cai
    [ $cai -eq $xx ]&& echo ok &&exit||echo kill(当输入的数等于(eq)显示ok并退出,不中则kill)

    [root@ceshiji ~]# vim a.sh
    #!/bin/bash
    [ ! -d /mnt/iso ]&& mkdir /mnt/iso(!-d 取反,如果真&&:符合,则创建mnt/iso)
    [ -e /ISO/rhel-server-6.7-x86_64-dvd.iso ]&& mount -o loop /ISO/rhel-server-6.7-x86_64-dvd.iso /mnt
    /iso(-e:判断对象是否存在,&&:符合,存在就挂载到mnt/iso)

    ————————————————————————————————————————————————————————

    if语句
    单分支格式:(只要判断满足了就执行以下命令)
    if [判断];then
    命令
    .. ..
    fi
    [root@ceshiji ~]# vim a.sh
    #!/bin/bash
    if [ $USER = root ];then
    yum clean all
    yum repolist
    fi

    双分支格式:(判断不满足,重新判断执行下一条件)
    if [ 判断 ];then
    命令
    elif [ 判断 ];then
    命令
    else
    命令
    fi
    测试:
    [root@ceshiji ~]# vim a.sh
    #!/bin/bash
    read -p 暗号?:hydra
    if [ $hydra -gt 9999 ];then
    echo "hail hydra"
    elif [ $hydra -gt 8888 ];then
    echo "hail"
    elif [ $hydra -gt 7777 ];then
    echo "hydra"
    else
    echo "mdzz"
    fi
    测试:猜数字游戏
    [root@ceshiji ~]# vim b.sh
    #!/bin/bash
    suiji=$[RANDOM%100]
    for i in {1..9}(i是变量,代表1到9的所有整数,代表最多猜9次)
    do
    read -p "hydra[0-99]"shuo
    if [ $shuo -eq $suiji ];then
    echo "hail hydra"
    exit
    elif [ $shuo -gt $suiji ];then
    echo "mdzz"
    else
    echo "mdzz"
    fi
    done

    多分支格式:(判断不满足,重新判断执行下一条件,依此类推)
    if [ 判断 ]&&[ 判断 ];then
    命令
    elif[ 判断 ]&&[ 判断 ];then
    命令
    else
    命令
    fi

    [root@ceshiji ~]# vim c.sh
    #!/bin/bash
    read -p "等级(1-100)": "dj"
    if [ $dj -ge 85 ]&&[ $dj -le 100 ];then
    echo "$dj级! dalao"
    elif [ $dj -ge 70 ]&&[ $dj -le 84 ];then
    echo "$dj级! emmm"
    else
    echo "$dj级! mdzz"
    fi

    ——————————————————————————————————

  • 相关阅读:
    Django连接SQL Server,安装相关扩展包及相关配置
    安装pipenv
    报错及网络上的解决方案
    Nucleus-SE迁移:未实现的设施和兼容性
    RTOS诊断和错误检查
    Nucleus SE RTOS初始化和启动
    Nucleus 实时操作系统中断(下)
    Nucleus 实时操作系统中断(上)
    系统时间
    应用程序计时器
  • 原文地址:https://www.cnblogs.com/Hydraxx/p/7241786.html
Copyright © 2020-2023  润新知