zoukankan      html  css  js  c++  java
  • Day09_Shell基本语法及流程控制

    一.shell的基本语法—变量

    1. 命名规则
      1. 以字母开头
      2. 使用中划线或者下划线做单词的连接
      3. 同类型的用数字区分
      4. 对于文件最好加上拓展名
    2. 系统变量
      • set 和 env区别
      • set:显示所有变量
      • env:系统变量即环境变量
    3. 变量赋值
      • unset VARNAME:删除变量
    4. 常用系统变量
      • PATH
      • PWD
      • LANG
      • HOME
      • HISTSIZE:历史日志行数
      • PS1:存放用户信息
      • IFS
      • export:定义全局变量
    5. 定义变量名的边界
      [root@MiWiFi-R3-srv ~]# rest_mem=20
      [root@MiWiFi-R3-srv ~]# echo ${rest_mem}%
      20%
    6. 数据类型

    二. shell的基本语法—运算符

    1. 算术运算符
      • +
      • -
      • *
      • /
      • %
    2. 关系操作
      • <
      • >
      • <=
      • >=
      • ==
      • !=
      • &&
      • ||
        • 以上与(())连用
      • test命令相关,[]可以达到一样的效果
    3. 赋值运算符
      • =
      • +=
      • *=
      • /=
      • %=
      • [root@MiWiFi-R3-srv ~]# ((x%=3))
        [root@MiWiFi-R3-srv ~]# echo $x
    4. shell里的所有计算器
      • $[]
      • (())
      • $(())
      • expr
      • 浮点运算bc软件
        • yum install bc -y
        • echo 'scale=2;1/3'|bc -l(保留两位,1除以3运算)
    5. 测试操作
      1. 命令执行后会返回到一个系统变量中 $?
        如果$?值为0 表示命令执行成功 否则为失败
      2. 测试命令 test [ ] [[ ]] (( ))
        1. 测试文件状态
          • -d 目录
          • -e
          • -h 链接文件
          • -s 文件长度 > 0、非空
          • -f 普通文件
          • -w 可写
          • -r 可读
          • -x 可执行
          • -L 符号连接
          • -u 文件有 suid 位设置
          • -b block文件
        2. 字符串测试
          • = 两个字符串相等
          • != 两个字符串不相等
          • -z 空串
          • -n 非空串
        3. 测试数值
          • -eq 等于
          • -ne 不等于
          • -gt 大于
          • -lt 小于
          • -ge 大于等于
          • -le 小于等于
        4. 拓展测试符号

    三. 流程控制

    1. 流程控制之if语句
      #!/bin/bash
      var='/etc/init.d'
      #var='/dev/sda'
      if [ -d $var ]
          then
              echo "$var is directory"
      elif [ -b $var ]
          then
              echo "$var is block"
      elif [ -f $var ]
          then
              echo "$var is regular file"
      else
              echo 'unknow'
      fi
      
    • 向脚本传递参数
      #test.sh
      echo $0
      echo $1
      echo $2
      echo $3
      echo ${11}
      echo '$$' $$
      echo '$*' $*
      echo '$@' $@
      echo '$#' $#
      echo '$?' $?
      
      '''
      测试:python test.sh 1 2 3 4 5 6 7 8 9 10 11
      输出结果:
      ./test.sh    
      2
      11
      $$ 14312
      $* 1 2 3 4 5 6 7 8 9 10 11
      $@ 1 2 3 4 5 6 7 8 9 10 11
      $# 11
      $? 0
      * $0 为运行的文件名  
      * $$ 为进程pid  
      * $* 为输入的所有的参数  
      * $@ 同$*  
      * $# 输入参数个数  
      * $? 上一条命令是否执行成功  
      '''
      
    • 修改脚本,使其能接收调用者传来的参数
      [root@MiWiFi-R3-srv ~]# cat test_file.sh
      #!/bin/bash
      if [ -d $1 ]
          then
              echo "$1 is directory"
      elif [ -b $1 ]
          then
              echo "$1 is block"
      elif [ -f $1 ]
          then
              echo "$1 is regular file"
      else
              echo 'unknown'
      fi
      [root@MiWiFi-R3-srv ~]# ./test_file.sh /etc/passwd
      /etc/passwd is regular file
      
    • 检测nginx是否启动,如果没启动,将其启动
      #! /bin/bash
      ps aux|grep nginx|grep -v grep
      if [ $? -eq 1 ]
          then
              systemctl start nginx
      fi
      
  • 相关阅读:
    tcp发送缓冲区中的数据都是由产生数据的进程给推送到ip层还是有定时任务触发?
    发生dev_queue_xmit的时候,全部都是从ip_finish_output中来的吗
    网络控制API 路由表 arp表 包括tcp的这些参数都是从哪里设置
    dev_queue_xmit 发生了什么?skb还会在哪里缓存
    内核blackhole
    网卡多ip 再看arp; arp队列也会缓存skb
    tcp发送缓冲区中的数据都是由产生数据的进程给推送到ip层还是有定时任务触发?
    socket有没有同步写一说(怎么判定数据一定达到了对端?还得用户态)
    貌似要看看时钟了
    读写JSON作配置文件
  • 原文地址:https://www.cnblogs.com/sama/p/7854900.html
Copyright © 2011-2022 走看看