Linux学习笔记——Shell高级进阶

目录

Shell运算符

算术运算符

布尔运算符

逻辑运算符

字符串运算符

文件测试运算符

echo打印数据

test命令

数字

字符串

文件测试

Shell流程控制

if

case

for

while

break

continue

Shell函数


Shell运算符

  • 算术运算符

    • #! /bin/bash
      
      a=20
      b=10
      
      val=`expr $a + $b`#不是单引号 是esc下面的符号(英文输入法)
      echo "a + b : $val"
      
      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 $a % $b`
      echo "a + b : $val"
      
      if [ $a == $b ]
      then
          echo "a 等于 b"
      else
          echo "a 不等于 b"
      fi
      
      if [ $a != $b ]
      then
          echo "a 不等于 b"
      else
          echo "a 等于 b"
      fi
    • expr是一款表达式计算工具,使用它能完成表达式的求值操作
  • 关系运算符
    • 关系运算符只支持数字,不支持字符串,除非字符串的值是数字
    • #! /bin/bash
      
      a=10  #不能敲成 a = 10 这样a会被识别为一个命令
      b=20
      
      if [ $a -eq $b ] #不能敲成[$a -eq $b],需要空格,不然有语法错误
      then
          echo "$a -eq $b a 等于 b"
      else
          echo "$a -eq $b a 不等于 b"
      fi
      
      if [ $a -ne $b ]
      then
          echo "$a -ne $b a 不等于 b"
      else
          echo "$a -ne $b a 等于 b"
      fi
      
      if [ $a -gt $b ]
      then
          echo "$a -gt $b a 大于 b"
      else
          echo "$a -gt $b a 小于 b"
      fi
      
      if [ $a -lt $b ]
      then
          echo "$a -lt $b a 小于 b"
      else
          echo "$a -lt $b a 大于 b"
      fi
      
      if [ $a -ge $b ]
      then
          echo "$a -ge $b a 大于或等于 b"
      else
          echo "$a -ge $b a 小于 b"
      fi
      
      if [ $a -le $b ]
      then
          echo "$a -le $b a 小于或等于 b"
      else
          echo "$a -le $b a 大于 b"
      fi
      
  • 布尔运算符

    • #! /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
      
  • 逻辑运算符

    • #! /bin/bash
      
      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
      
  • 字符串运算符

    • #! /bin/bash
      
      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
  • 文件测试运算符

    • #! /bin/bash
      
      file="/root/test.sh"
      
      if [ -r $file ]
      then
          echo "文件可读"
      else
          echo "文件不可读"
      fi
      
      if [ -w $file ]
      then
          echo "文件可写"
      else
          echo "文件不可写"
      fi
      
      if [ -x $file ]
      then
          echo "文件可执行"
      else
          echo "文件不可执行"
      fi
      
      if [ -f $file ]
      then
          echo "文件为普通文件"
      else
          echo "文件为特殊文件"
      fi
      
      if [ -d $file ]
      then
          echo "文件是个目录"
      else
          echo "文件不是个目录"
      fi
      
      if [ -s $file ]
      then
          echo "文件不为空"
      else
          echo "文件为空"
      fi
      
      if [ -e $file ]
      then
          echo "文件存在"
      else
          echo "文件不存在"
      fi

echo打印数据

  • Shell的echo指令与PHP的echo指令类似,都用于字符串的输出
  • #! /bin/bash
    
    ##  显示普通字符串
    echo "Hello world"
    
    ##  显示转义字符
    echo "\"Hello world\""
    
    ##  显示变量
    name="xyx"
    echo "$name Hello world"
    
    ##  显示换行
    echo -e "OK! \n"
    echo "Hello world"
    
    ##  显示不换行
    echo -e "OK! \c"
    echo "Hello world"
    
    ##  显示结果定向至文件
    echo "Hello world" > myfile
    
    ##  原样输出字符串
    echo '$name\"'
    
    ##  显示命令执行结果
    echo `date`

test命令

  • Shell中的test命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试
  • 数字

    • 参数说明
      -eq等于则为真
      -ne不等于则为真
      -gt大于则为真
      -ge大于等于则为真
      -lt小于则为真
      -le小于等于则为真
  • 字符串

    • 参数说明
      =等于则为真
      !=不相等则为真
      -z 字符串字符串的长度为0则为真
      -n 字符串字符串的长度不为0就为真
  • 文件测试

    • 参数说明
      -e 文件名如果文件存在则为真
      -r 文件名如果文件存在且可读则为真
      -w 文件名如果文件存在且可写则为真
      -x 文件名如果文件存在且可执行则为真
      -s 文件名如果文件存在且至少有一个字符为真
      -f 文件名如果文件存在且为普通文件则为真
      -c 文件名如果文件存在且为字符型特殊文件则为真
      -b 文件名如果文件存在且为块特殊文件则为真
      -d 文件名如果文件存在且为目录则为真
  • #! /bin/bash
    
    #比较
    num1=100
    num2=100
    
    if test $[num1] -eq $[num2]
    then
        echo "两个数相等!"
    else
        echo "两个数不相等!"
    fi

Shell流程控制

  • if

    • if condition1
      then
          command1
      elif condition2
      then
          command2
      else
          commandN
      fi
  • case

    • Shell case语句为多选择语句,可以用case语句匹配一个值与一个模式,如果匹配成功,执行相匹配的命令
    • case 值 in
      模式1)
          command1
          command2
          ...
          commandn
          ;;
      模式2)
          command1
          command2
          ...
          commandn
          ;;
      esac
      
    • #! /bin/bash
      
      echo "输入1到4的数字:"
      echo "你输入的数字为:"
      read num
      case $num in
          1)    echo "你选择了1"
          ;;
          2)    echo "你选择了2"
          ;;
          3)    echo "你选择了3"
          ;;
          4)    echo "你选择了4"
          ;;
          *)    echo "你没有输入1到4之间的数字
          ;;
      esac
  • for

    • 当变量值在列表里,for循环即执行一次所有命令,使用列表名获取列表中的当前取值
    • 命令可为任何有效的shell命令和语句。in列表可以包含替换、字符串和文件名
    • in列表是可读的,如果不用它,for循环使用命令行的参数
    • for var in item1 item2 ... itemN
      do
          command1
          command2
          ...
          commandN
      done
    • #! /bin/bash
      
      for loop in 1 2 3 4 5
      do
          echo "The value is: $loop"
      done
      
      for str in "This is a string"
      do
          echo $str
      done
  • while

    • while循环用于不断执行一系列命令,也用于从输入文件 中读取数据;命令通常为测试条件
    • while condition
      do
          command
      done
      
      #无限循环
      while true
      do
          command
      done
    • #Bash let 命令,它用于执行一个或者多个表达式,变量计算中不需要加上$来表示变量
      #! /bin/bash
      
      i=1
      while(($i<=5))
      do
          echo $i
          let "i++"
      done
  • break

    • break命令允许跳出所有循环(终止执行后面的循环)
    • #! /bin/bash
      
      while :
      do
          echo -n "输入1到5之间的数字"
          read aNum
          case $aNum in
          1|2|3|4|5) echo "你输入的数字为 $aNum!"
          ;;
          *) echo "你输入的数字不是1到5之间的!游戏结束"
              break
          ;;
          esac
      done
  • continue

    • contiue命令不会跳出所有循环,仅仅跳出当前循环
    • #! /bin/bash
      
      while :
      do
          echo -n "输入1到5之间的数字"
          read aNum
          case $aNum in
          1|2|3|4|5) echo "你输入的数字为 $aNum!"
          ;;
          *) echo "你输入的数字不是1到5之间的!"
              continue
              echo "游戏结束"
          ;;
          esac
      done

Shell函数

  • Linux shell 可以用户定义的函数,然后在shell脚本中可以随便调用
  • 可以带function fun()定义,也可以直接fun()定义,不带任何参数
  • 参数返回,可以显示加;return 返回,如果不加,将以最后一条命令运行结果,作为返回值,return后跟数值n(0-255)
  • #! /bin/bash
    
    ## 第一个函数----------------------------------------
    demoFun(){
        echo "这是我的第一个shell函数!"
    }
    
    echo "------------函数开始执行------------"
    demoFun
    echo "------------函数执行完毕------------"
    
    ## 函数返回值---------------------------------------
    funWithReturn(){
        echo "这个函数会对输入的两个数字进行相加运算..."
        echo "输入第一个数字:"
        read num1
        echo "输入第二个数字"
        read num2
        echo "两个数字分别为$num1和$num2!"
        return $(($num1+$num2))
    }
    
    funWithReturn
    #函数返回值在调用该函数后通过 $? 来获得
    echo "输入的两个数字之和为 $? !"
    
    ## 函数参数-----------------------------------------
    funWithParam(){
        echo "第一个参数为$1"
        echo "第二个参数为$2"
        echo "第三个参数为$3"
        echo "第十个参数为$10"
        echo "第十个参数为${10}"
        echo "第十一个参数为${11}"
        echo "参数总共有$#个"
        echo "作为一个字符串输出所有参数 $* "
    }
    
    funWithParam 1 2 3 4 5 6 7 8 9 10 11 12 13 14

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值