Day09_Shell基本语法及流程控制

本文介绍了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语句
    python #!/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
  • 向脚本传递参数
    ```python
    #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
    • $* 为输入的所有的参数
    • $@ 同$*
    • $# 输入参数个数
    • $? 上一条命令是否执行成功
      '''
      ```
  • 修改脚本,使其能接收调用者传来的参数
    python [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是否启动,如果没启动,将其启动
    python #! /bin/bash ps aux|grep nginx|grep -v grep if [ $? -eq 1 ] then systemctl start nginx fi

转载于:https://www.cnblogs.com/sama/p/7854900.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值