zoukankan      html  css  js  c++  java
  • Linux命令-基本变量类型及其运算

    [root@Redis01 ~]# cd /install/
    [root@Redis01 install]# mkdir -p test && cd test

    -s修改时间:
    [root@Redis01 test]# date
    2017年 11月 30日 星期四 21:55:03 CST
    [root@Redis01 test]# date `+%F %T %A`
    2017年 11月 30日 星期四 21:56:25 CST
    [root@Redis01 test]# date '+%F'
    2017-11-30
    [root@Redis01 test]# date '+%T'
    21:57:11
    [root@Redis01 test]# date '+%A'
    星期四
    [root@Redis01 test]# date -s "2017-11-30 14:44:40"
    2017年 11月 30日 星期四 14:44:40 CST
    更新主板和芯片时间
    [root@Redis01 test]# clock -w
    [root@Redis01 test]# date '+%F %T %A'
    2017-11-30 14:45:47 星期四


    [root@Redis01 test]# myname=lisi
    [root@Redis01 test]# echo $myname
    lisi
    [root@Redis01 test]# echo my neme is $myname
    my neme is lisi
    [root@Redis01 test]# echo $mynameis man
    man
    [root@Redis01 test]# echo ${myname}is man
    lisiis man


    说一些指令
    小括号()和反单引号效果相似:
    [root@Redis01 test]# echo `echo kkk`
    kkk
    [root@Redis01 test]# echo $(echo kkk)
    kkk


    数字表示的是下标,下标是从0开始:
    [root@Redis01 test]# echo ${#myname}
    4
    [root@Redis01 test]# echo ${myname:3}
    i
    [root@Redis01 test]# echo ${myname:4}


    单斜线是替换第一次匹配结果,双斜线是全部替换:
    [root@Redis01 test]# echo ${myname/si/gang}
    ligang
    [root@Redis01 test]# echo ${myname/si/}
    li
    [root@Redis01 test]# myname=liyongfuyongfu
    [root@Redis01 test]# echo ${myname/yongfu/gang}
    ligangyongfu
    [root@Redis01 test]# echo ${myname//yongfu/gang}
    liganggang


    %表示匹配最后一个;#表示匹配第一个:
    [root@Redis01 test]# echo ${myname/%yongfu/gang}
    liyongfugang
    [root@Redis01 test]# echo ${myname/#yongfu/gang}
    liyongfuyongfu
    [root@Redis01 test]# echo ${myname/#li/gang}
    gangyongfuyongfu


    echo输出会换行;printf不会换行:
    [root@Redis01 test]# printf kkk
    kkk[root@Redis01 test]# echo printf
    printf


    :-没值时不会自动赋值;而:=没值时会自动赋值;但没值时都会输出默认值;
    [root@Redis01 test]# kk=liyongfu
    [root@Redis01 test]# echo ${kk:-ligang}
    liyongfu
    [root@Redis01 test]# echo ${km}

    [root@Redis01 test]# echo ${km:-ligang}
    ligang
    [root@Redis01 test]# echo ${km}

    [root@Redis01 test]# echo ${kl:=ligang}
    ligang
    [root@Redis01 test]# echo ${kl}
    ligang

    数学运算:
    (()):
    [root@Redis01 test]# sum=0
    [root@Redis01 test]# ((sum=sum+10))
    [root@Redis01 test]# echo $sum
    10
    [root@Redis01 test]# ((sum = sum + 10))
    [root@Redis01 test]# echo $sum
    20

    [root@Redis01 test]# a=10
    [root@Redis01 test]# b=20
    [root@Redis01 test]# c=+
    [root@Redis01 test]# ((sum = ${a} ${c} ${b}))
    [root@Redis01 test]# echo $sum
    30

    [root@Redis01 test]# ex=3+3-5*0/5
    [root@Redis01 test]# echo $ex
    3+3-5*0/5
    [root@Redis01 test]# ((sum = $ex))
    [root@Redis01 test]# echo $sum
    6


    数字比较用-gt/-lt/-eq/-ge/-le/-ne;
    字符串比较>、<、==、!=
    [root@Redis01 test]# [ 3>2 ] && echo "yes" || echo "no"
    no
    [root@Redis01 test]# [ 3 > 2 ] && echo "yes" || echo "no"
    yes
    [root@Redis01 test]# [ 3 < 2 ] && echo "yes" || echo "no"
    yes
    [root@Redis01 test]# [ 3 -gt 2 ] && echo "yes" || echo "no"
    yes
    [root@Redis01 test]# [ 3 -lt 2 ] && echo "yes" || echo "no"
    no
    [root@Redis01 test]# [ 3 -ge 2 ] && echo "yes" || echo "no"
    yes
    [root@Redis01 test]# [ 3 -le 2 ] && echo "yes" || echo "no"
    no
    [root@Redis01 test]# [ 3 -eq 2 ] && echo "yes" || echo "no"
    no
    [root@Redis01 test]# [ 3 -ne 2 ] && echo "yes" || echo "no"
    yes
    [root@Redis01 test]#
    [root@Redis01 test]#
    [root@Redis01 test]# he=ligang
    [root@Redis01 test]# wo=yongfu
    [root@Redis01 test]# [ $he == $wo ] && echo "yes" || echo "no"
    no
    [root@Redis01 test]# [ $he != $wo ] && echo "yes" || echo "no"
    yes


    -f判断文件是否存在;-d判断文件夹是否存在;
    [root@Redis01 test]# [ -f "$fp" ] && echo "exists" || echo "not exists"

    [root@Redis01 test]# echo this is a txt>>a.txt
    [root@Redis01 test]# cat a.txt
    this is a txt
    [root@Redis01 test]# [ -f "$fp" ] && cat a.txt || touch a.txt
    this is a txt

    [root@Redis01 test]# [ -d "$fp" ] && echo "exists" || echo "not exists"

    (1):
    [root@Redis01 test]# vi test.sh
    [root@Redis01 test]# cat test.sh
    #!/bin/sh
    #定义一个变量,变量的值指向一个目录
    fp=/install/test/a
    [ -d $fp ] && {
      echo "dir is exists";
      echo "dir is exists"
    }||{
      echo "dir not exists";
      echo "dir not exosts"
    }
    [root@Redis01 test]# sh test.sh

    (2):
    [root@Redis01 test]# vi test.sh
    [root@Redis01 test]# cat test.sh
    #!/bin/sh
    #定义一个变量,变量的值指向一个目录
    fp=/install/test/a
    if [ -d $fp ];then
      echo "dir is exists";
      echo "dir is exists"
    else
      echo "dir not exists";
      echo "dir not exost"
    fi
    [root@Redis01 test]# sh test.sh

    (3):固定变量值
    [root@Redis01 test]# vi test.sh
    [root@Redis01 test]# cat test.sh
    #!/bin/sh
    #定义一个变量,变量的值指向一个目录
    age=90
    if [ $age -gt 100 ];then
      echo "他是老年人"
    elif [ $age -gt 60 ];then
      echo "他是中老年人"
    elif [ $age -gt 40 ];then
      echo "他是青年人"
    elif [ $age -gt 20 ];then
      echo "他是少年"
    else
      echo "他是小孩"
    fi
    [root@Redis01 test]# sh test.sh
    他是中老年人

    (4):运行时,传值
    [root@Redis01 test]# vi test.sh
    [root@Redis01 test]# cat test.sh
    #!/bin/sh
    #定义一个变量,变量的值指向一个目录
    #第一个参数是$0,它表示当前脚本文件的名字,从数字1开始(即$1,$2...)表示传给脚本文件的名字
    fileName=$0
    echo "script file is $fileName"
    age=$1
    if [ $age -gt 100 ];then
      echo "他是老年人"
    elif [ $age -gt 60 ];then
      echo "他是中老年人"
    elif [ $age -gt 40 ];then
      echo "他是青年人"
    elif [ $age -gt 20 ];then
      echo "他是少年"
    else
      echo "他是小孩"
    fi
    [root@Redis01 test]# sh test.sh 35
    script file is test.sh
    他是少年

    序列:
    [root@Redis01 test]# echo {1..5}
    1 2 3 4 5
    [root@Redis01 test]# echo {a..z}
    a b c d e f g h i j k l m n o p q r s t u v w x y z
    [root@Redis01 test]# echo {A..h}
    A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ ] ^ _ ` a b c d e f g h
    [root@Redis01 test]# seq 5
    1
    2
    3
    4
    5

    tr截断设置分隔符;
    [root@Redis01 test]# seq 5|tr ' ' ' '
    1 2 3 4 5 [root@Redis01 test]# seq -s ' ' 5
    1 2 3 4 5
    -s直接设置分割方式;
    [root@Redis01 test]# seq -s ' ' 5 50
    5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50

    1 2 50其中的1表示起始数字,5表示步长,50表示结束数字;
    [root@Redis01 test]# seq -s ' ' 1 5 50
    1 6 11 16 21 26 31 36 41 46


    (())只能运算整数;bc可以运算所有实数;
    其中的-l表示导入运行计算所需包;bc是运算标识;
    [root@Redis01 test]# a=1.2
    [root@Redis01 test]# b=2.6
    [root@Redis01 test]# sum=0
    [root@Redis01 test]# ((sum=a+b))
    [root@Redis01 test]# echo ${a}+${b}|bc -l
    3.8
    [root@Redis01 test]# echo 190+100|bc -l
    290


    整数计算推荐使用(()),因为性能比较好;
    bc中间使用了管道,走了磁盘IO,性能不好;
    [root@Redis01 test]# seq -s '+' 100
    1+2+3+4+5+6+7+8+9+10+11+12+13+14+15+16+17+18+19+20+21+22+23+24+25+26+27+28+29+30+31+32+33+34+35+36+37+38+39+40+41+42+43+44+45+46+47+48+49+50+51+52+53+54+55+56+57+58+59+60+61+62+63+64+65+66+67+68+69+70+71+72+73+74+75+76+77+78+79+80+81+82+83+84+85+86+87+88+89+90+91+92+93+94+95+96+97+98+99+100
    [root@Redis01 test]# seq -s '+' 100|bc -l
    5050

    反单引号内的内容当作语句执行;
    单引号内的内容当作字符串;
    [root@Redis01 test]# ((sum=`seq -s '+' 1000`))
    [root@Redis01 test]# echo $sum
    500500
    [root@Redis01 test]# echo $((`seq -s '+' 1000`))
    500500
    [root@Redis01 test]# echo $((seq -s '+' 1000))
    -bash: seq -s '+' 1000: syntax error: invalid arithmetic operator (error token is "'+' 1000")

    for循环两种方式:
    [root@Redis01 test]# sum=0
    [root@Redis01 test]# for i in `seq 100`;do ((sum=${sum}+${i}));done
    [root@Redis01 test]# echo $sum
    [root@Redis01 test]# for((i=1;i<=100;i++));do ((sum+=${i}));done
    [root@Redis01 test]# echo $sum


    while的两种方式,注意每次需要坝变量赋值:
    [root@Redis01 test]# sum=0
    [root@Redis01 test]# i=1
    [root@Redis01 test]# while [ $i -le 100 ];do ((sum+=i));((i++));done
    [root@Redis01 test]# echo $sum

    [root@Redis01 test]# sum=0
    [root@Redis01 test]# i=1
    [root@Redis01 test]# while ((i <= 100));do ((sum+=i));((i++));done
    [root@Redis01 test]# echo $sum

  • 相关阅读:
    向net core 3.0进击——多平台项目发布与部署
    Linux配置部署_新手向(五)——Docker的安装与使用
    Ubuntu 18.04使用OpenSSL自签证书(证书支持多IP及多域名,谷歌浏览器无警告)
    学习makefile的一个工程示例
    Centos7下设置ceph 12.2.1 (luminous)dashboard UI监控功能
    一个小例子学习makefile
    Centos7下部署ceph 12.2.1 (luminous)集群及RBD使用
    VMware Centos7 桥接 DHCP无法获得IP
    VMware Centos7 NAT 无法上网的解决方法
    jerasure 2.0译文
  • 原文地址:https://www.cnblogs.com/mmzs/p/8183942.html
Copyright © 2011-2022 走看看