• Shell脚本基础 、 使用变量 、 条件测试及选择 、 列表式循环


    ————————Shell脚本基础 、 使用变量 、 条件测试及选择 、 列表式循环————

    【Shell脚本基础 】

    << Shell环境 >>

    < Shell 脚本概念 >
    提前设计可执行语句,用来完成特定任务的文件
    --解释型程序
    --顺序、批量执行
    常见脚本语言
    Bash Shell
    Python/Perl/Rudy
    JSP/PHP/ASP/CGI
    JavaScript

    < Bash Shell 使用方式 >
    交互式
    --人工干预、智能化程度高
    --逐条解释执行、效率低
    非交互式
    --需提前设计、智能化程度大
    --批量执行、效率低
    --便于后台安静运行
    规范Shell脚本的一般组成
    #!/bin/bash 环境声明(Sha-Bang)
    # 注释文本
    可执行代码
    < 第一个Shell脚本 >
    脚本创建过程
    1)明确任务要求
    --按自然语言拆分小步骤
    --按顺序整理
    2)编写代码文件
    --每一步骤如何实现
    --转换成命令行保存到脚本文件
    3)测试并完善
    --运行脚本,排除错误
    --代码优化

    脚本运行及调试
    1)编写脚本
    vim /root/sysinfo
    --->
    #!/bin/bash
    cat /etc/redhat-release
    uname -r
    hostname
    2)添加执行权限
    chmod +x /root/sysinfo
    3)运行测试
    /root/sysinfo
    --->
    Red Hat Enterprise Linux Server...
    3.10.0-123.el7.x86_64
    server0.example.com
    4)检查排错
    sh -x /root/sysinfo
    --->
    + cat /etc/redhat-release
    Red Hat Enterprise Linux Server...
    + uname -r
    3.10.0-123.el7.x86_64
    + hostname
    server0.example.com
    【简单脚本技巧】
    管道传递
    将前一条命令的输出结果交给后一条命令处理
    命令1 | 命令2 [|命令3]
    ls --help | less 传递多屏文本
    免交互处理
    记录有价值的信息 >> /var/log/foo.log 追加式
    屏蔽无价值的、干扰性的信息 &> /dev/null 黑洞文件
    自定义输出 echo '文本字符串'
    重定向输出
    标准输出(1):正常结果
    标准错误(2):错误或异常结果
    输出结果保存到文件
    cmd > file、cmd >> file
    cmd 2> file、cmd 2>> file
    cmd &> file 正确错误都记录
    cmd 1> file 2>&1 正确错误都是错
    cmd 2> file 1>&2 正确错误都是错
    1>&2、>&2 标准输出--->标准错误
    2>&1 标准错误--->标准输出

    【使用变量】
    变量的定义
    变量名=变量值
    固定名称代替值,“传参”
    减少代码量
    赋值时
    1)变量已存在,覆盖原值
    2)=两边不能空格
    3)变量名组成:abc、123、_,区分大小写
    4)不能以数字开头,不能使用关键字、特殊字符
    基本格式
    引用变量值:$变量名
    查看变量值:
    echo $变量名、echo ${变量名}
    var=CentOS var7.2=CentOS2
    echo $var ---> CentOS
    echo $var6.7 ---> CentOS6.7
    echo $var 7.2 ---> CentOS7.2
    echo ${var}7.2 ---> CentOS2 以{}界定混淆名称
    【变量种类】
    1)环境变量
    变量名大写,用来设置用户/系统环境
    PWD、PATH、USER、LOGNAME、SHELL、HOME
    2)位置变量
    bash内置,存储执行脚本时提供的命令行参数
    $n n=1、2、3...
    3)预定义变量
    bash内置,直接使用,不能直接赋值
    用来保存脚本程序的执行信息
    $# 已加载的位置变量个数
    $* 所有位置变量的值
    $? 程序退出后的状态值,0表示正常,其他值不正常
    4)自定义变量
    用户自主设置
    【特殊变量使用三部曲】
    1.编写脚本代码
    vim /root/useradd
    --->
    #!/bin/bash
    echo "一共提供了 $# 个参数"
    echo "成功添加用户 $1,密码是 $2 "
    useradd $1
    echo "$2" | passwd --stdin $1
    2.添加x执行权限
    chmod +x /root/useradd.sh
    3.添加用户和密码,并测试
    /root/useradd kenji 123
    --->
    一共提供了 2 个参数
    成功添加用户kenji,密码是123
    更改用户kenji的密码
    passwd:所有的身份验证令牌已经成功更新


    条件测试及选择
    【条件测试】
    Shell测试依据
    命令行/程序退出状态值$?
    值=0,执行成功
    值不为0,失败/异常
    脚本退出状态值:退出之前最后一条命令的$?
    也可自行替换,添加exit整数
    测试操作
    正常命令行
    tsxt -选项 参数
    [测试表达式]
    id fleyd &> /dev/null 测试操作
    echo $? ---> 1 状态值为1,表示失败
    [100 -gt 50] 测试表达式
    echo $? ---> 0 状态值为0,表示成功
    常用测试选项
    检查文件状态
    -e 文档
    -d 目录
    -f 存在
    -r 可读
    -w 可写
    -x 执行
    比较整数大小
    -gt grent than 大于
    -ge 大于或等于
    -eq 等于
    -ne 不等于
    -lt 小于
    -le 小于或等于
    字符串比对
    - == != ! 取反

    【if选择结构】
    if单分支
    if ... ;then ...
    fi
    if双分支
    if ... ;then ...
    else ...
    fi
    if多分支
    if ... ;then ...
    elif ... ;then ...
    else ...
    fi
    列表式循环
    【for循环结构】
    遍历/列表式循环
    for 变量名 in 值列表 对于变量在列表中...
    do .. 做...处理
    done 完成
    $(命令行)
    先执行括号,再把值作为外部命令执行参数
    cat /root/userlist
    --->
    haha
    xixi
    kenji
    echo $(cat /root/userlist)
    --->
    haha xixi kenji
    【编写批量添加用户脚本】
    1.编写脚本代码
    vim /root/batchusers
    --->
    #!/bin/bash
    if [ $# -eq 0 ]
    then
    echo "Usage:/root/batchusers <userfile>"
    exit 1
    fi

    if [ ! -f $1 ]
    then
    echo "Input file not found"
    exit 2
    fi

    for name in $(cat $1)
    do
    useradd -s /bin/false $name
    done
    2.添加x执行权限
    chmod +x /root/batchusers
    3.测试脚本
    1)准备文件
    wget http://classroom/pub/materials/
    userlist -O /root/userlist
    2)批量添加用户
    /root/batchusers /root/userlist
    3)测试
    /root/batchusers 未提供列表文件
    ---> Usage: /root/batchusers <userfile>
    echo $? ---> 1
    /root/batchusers /root/userlist.txt
    ---> Input file not found 提供的列表文件找不到
    echo $? ---> 2

  • 相关阅读:
    Mysql之binlog日志说明及利用binlog日志恢复数据操作记录
    JS使用Cookie
    vue2 生命周期
    vue2 手记
    vue2 design 手记
    composer.json详解
    mysql查询优化
    dockerfile
    一套不错的docker lnmp
    服务器部署docker lnmp环境
  • 原文地址:https://www.cnblogs.com/fuzhongfaya/p/8952295.html
Copyright © 2020-2023  润新知