zoukankan      html  css  js  c++  java
  • Linux bash基础特性二

    shell脚本的组成部分

    • shebang
    • 各种命令组合

    编程变量种类

    • 本地变量: 仅仅在当前的shell生效
    • 环境变量: 在当前和子shell生效
    • 局部变量: shell进程某代码片段
    • 位置变量: $1,$2来表示,用与获取脚本接受的参数
    • 特殊变量: 一些特殊变量

    一、编程环境

    特殊变量如下

    • $?:上一个命令的执行返回码
    • $#:参数个数
    • $*:参数
    • $0:命令本身
    • $@:所有参数

    本地变量: name=’value’

    环境变量:export name=value,declare -x name=value

    查看环境变量: env,export,printenv变量

    bash的配置文件

    针对用户的别名: “~/.bashrc”
    针对系统的别名:”/etc/bashrc”
     
    用户环境变量 bash_profile
    系统环境变量:/etc/profile

    profile:用于定义环境变量和脚本

    bashrc:用于定义命令别名和本地变量


    按照生效范围,存在两类:
        全局配置文件:
            /etc/profile
            /etc/profile.d/*.sh
            /etc/bashrc
        个人配置文件
            ~/.bashrc
            ~/.bash_profile

    按照功能划分,存在两类:
        profile类:为交互式登录shell提供配置
            全局:/etc/profile,/etc/profile.d/*.sh
            个人:~/.bash_profile
        bash类:为非交互式登录shell提供配置
            全局:/etc/bashrc
            个人:~/.bashrcr

    1.算术运算:bash会对数字进行隐形的类型转换

       运算操作符:+,-,*,/,%,
    let a=expr $[expr] $((expr)) expr a1 op a2
    注意:乘法符号有些场景需要转义:""

     2.条件测试:判断某需求是否满足,需要有测试机制来实现;

    • test expr
    • [ expr ]
    • [[ expr ]]

    3.数值测试

    • -gt   是否大于
    • -lt    是否小于
    • -eq  是否等于
    • -ge   是否大于等于
    • -le   是否小于等于
    • -ne   是否不等于

    4.字符串测试

    • ==
    • >
    • <
    • !=
    • =~   左侧的字符串是否能被右侧的pattern所匹配
    • -z  “String”  测试字符串是否为空,空为真,不空则为假 
    • -n  "String"  测试字符串是否不空,不空为真,空则为假

    5、文件测试:测试文件的属性信息,如存在、类别、权限

    1)存在性测试

    • -a  file
    • -e file:  文件存在性测试,存在为真,否则为假

    2).存在性及类别测试

    [ -b "filevar" ]  是否存在且为块设备文件

    [ -c  "filevar" ]   是否存在且为字符设备文件

    [ -d  "filevar" ]   是否存在且为目录

    [ -f  "filevar" ]    是否存在且为普通文件

    • -S file :存在且为socket
    • -p  file   是否存在且为管道文件
    • -h 或者 -L   file 是否存在且符号链接文件

    3).存在性及文件权限测试

    • -r file   是否存在且可读
    • -w file  是否存在且可写
    • -x file   是否存在且可执行

    4).存在性及文件特殊权限测试

    • -g file  是否存在且拥有sgid权限
    • -u file  是否存在且拥有suid权限
    • -k file  是否存在且拥有sticky权限

    5).存在性及文件大小测试

    • -s file 是否存在且非空

    6).存在性及文件是否打开

    • -t fd :表示文件描述符是否已经打开且与某个终端先关
    • -N file :文件自上次被读取之后是否被修改过
    • -O file:当前有效用户是否是文件属主
    • -G file:当前有效用户是否是文件属组

    7).双目测试

    • file1 -ef file2:  file1与file2是否指向同一个设备上相同inode
    • file1 -nt file2 : file1的mtime新于file2则为真,否则为假
    • file1 -ot file2: file1的mtime旧于file2则为真,否则为假

    6.组合测试条件

    在shell编程当中支持一些逻辑运算:true(1),false(2)

    echo $? : 上条命令执行返回状态码,成功返回0,失败返回非0

    与运算:

     &&:两个都为真则为真

      真 && 真 = 真 or 1 && 1 = 1

      真 && 假 = 假

      假 && 真 = 假

           假 && 假 = 假

    或运算:|| 表示 有一个为真则为真

    非运算:

         真,非真

         假,非假

  • 相关阅读:
    误加all_load引起的程序报错
    ConstraintLayout 约束布局
    前端判断是否APP客户端打开触屏,实现跳转APP原生组件交互之遐想
    TP5 多条件whereOr查询
    json手动解析详解
    Centos python 2.6 升级到 2.7
    js中click重复执行
    使用 Python 实现实用小工具
    使用 Python 编写密码爆破工具
    使用Python进行无线网络攻击
  • 原文地址:https://www.cnblogs.com/tanxiaojun/p/10464585.html
Copyright © 2011-2022 走看看