shell编程入门

变量:
    命令的内存空间

    数据存储方式:
        字符
        数值
            整型
            浮点型
            布尔型
            
    
    bash是弱类型语言,把所有要存储的数据统统当做字符进行
    不支持浮点数
    
    逻辑运算
        true  0
        false 非0
    
    
    短路运算
    &&
    ||
    
    bash中环境变量的种类
    本地变量
        生效范围为当前shell进程
    环境变量
        生效范围为当前shell进程以及其子shell进程
    局部变量
        生效范围为当前shell进程中某代码片段(通常为函数上下文)
    位置变量
        $1,$2...来表示,用于让脚本在脚本代码调用中通过命令行给它传递参数
    特殊变量
        $?,$0
    
    本地变量
        变量赋值 name="value" 或者 name='value'
            value
                (1)可以直接是字符串 name="username"
                (2)可以是变量引用 name="$username"
                (3)命令引用 name=·command· 或者 name=$(command)
        变量引用 ${name} 或者 $name    
            "" 弱引用,其中的变量引用会被替换为变量值
            '' 强引用,其中的变量引用不会被替换为变量值
        显示所有的变量
            set
        销毁本地变量
            unset name
            
        环境变量
            变量声明、赋值
                export name=value
                declare -x name=value
            变量引用
                $name ${name}
            显示所有的环境变量
                export
                env
                printenv
            销毁
                unset name
            
            常见环境变量 PATH SHELL UID HOME
            
            变量命名法则
                1、不能使用程序中的保留字,例如if,for
                2、只能使用数字,字母及下划线,且不能以数字开头
                3、见名知义,驼峰命名法
                
            只读变量 不能被修改,也不能unset被销毁
                readonly name
                declare -r name
                
            位置变量
                $1,$2...对应调用第一,第二个参数
                $0 命令本身
                $* 传递给脚本的所有参数(所有参数当做一个字符串)
                $@ 传递给脚本的所有参数(所有参数当做独立字符串)
                $# 传递给脚本的参数的个数
                
                换岗操作
                shift 剔除1个位置变量
                shift 数字 剔除数字个位置变量
                
            bash的配置文件
                按照生效范围划分,存在两类:
                    全局配置
                        /etc/profile
                            /etc/profile.d/*.sh
                        /etc/bashrc        
                    个人配置
                        ~/.bash_profile
                        ~/.bashrc
                        
                按照功能划分,存在两类
                    profile类:为交互式登录的shell提供配置
                        功用:
                            (1)用于定义环境变量
                            (2)用于运行命令和脚本
                                例如 编辑文件 vi /etc/profile.d/welcome.sh
                                内容如下:
                                    echo "欢迎光临本系统 ${UID},您的家目录是${HOME}"
                                当用户登录系统时,会提示欢迎信息
                                
                    bashrc类:为非交互式登录的shell提供配置
                        功用:
                            (1)用于定义命令别名
                            (2)用于定义本地变量
                    但是两者并没有严格进行区分,可能有交叉
                    
                shell登录:
                    交互式登录:
                        直接通过终端输入账号密码登录
                        使用 su - username 或者 su -l username切换的用户
                        /etc/profile->/etc/profile.d/*.sh->~/.bash_profile->~/.bashrc->/etc/bashrc
                    非交互式登录:
                        su username
                        图形界面打开的终端
                        执行脚本
                        ~/.bashrc->/etc/bashrc->/etc/profile.d/*.sh
                        
                定义让所有用户都生效的别名
                /etc/bashrc
                设置环境变量
                临时配置
                export PATH="$PATH:新增的环境变量"
                或者 declare -x PATH="$PATH:新增的环境变量"
                永久配置
                /etc/profile.d/XXX.sh 或者 ~/.bash_profile
                    PATH=$PATH:新增的环境变量
                    export PATH
                    
                    或者 export PATH=$PATH:新增的环境变量
                    
                生效方式
                    (1)重启或者新开终端
                    (2)使用source或者.
                        副作用:变量可能出现重复
                        
            bash中的算数运算 help let可以帮助查看算数表达式
                +,-,*,/,%,**……
                (1) let var=算数表达式
                    num1=3
                    num2=4
                    let num3=$num1+$num4
                    echo $num3
                (2)var=$[算数表达式]
                    num4=$[num1+num2]
                    echo num4
                    
                    或者 echo $[num1+num3]
                (3)var=$((算数表达式))
                    echo $((2**3))
                (4)var=$(expr 参数1 参数2(运算符) 参数3 ……)
                    特殊字符需要转义
                
                随机数生成器
                $RANDOM  0-32767
                    我们可以man bash后搜索RANDOM查看
                    
                增强型赋值    
                += -= *= /= %=
                    count=$[$count+1]
                    let count+=1
                
                自增 自减
                ++ --
                    let count++
                    
    
    条件测试:
        判断某需求是否满足,需要有测试机制来实心
        专用的测试表达式需要由测试命令来执行
        test 表达式
        [ 表达式 ]
        [[ 表达式 ]]
        注意:[] 和 表达式之间需要有空格
        
        test 1 -gt 3
        echo $?
        
        [ 1 -lt 3 ]
        echo $?
        
        测试类型:
            数值测试
                -gt 大于
                -ge 大于等于
                -eq 等于
                -ne 不等于
                -lt 小于
                -le 小于等于
            字符串测试
                == 等于
                > 大于
                < 小于
                != 不等于
                =~ 左侧的字符串是否能够被右侧的模式所匹配
                    一般需要使用 [[ 表达式 ]]来使用
                    例如 [[ abc =~ ^a.*  ]]
                    echo $?
                -z "字符串" 测试字符串是否为空,空则为真,不空为假
                -n "字符串" 测试字符串是否不空,不空为真,空则为假
            文件测试
                存在性测试
                -a 文件
                -e 文件 文件存在性测试,存在为真,否则为假
                
                存在性及类别测试
                -b 文件 存在且为块设备文件
                -c 文件 存在且为字符设备文件
                -d 文件 存在且为目录文件
                -f 文件 存在且为普通文件
                -h 文件 存在且为符号链接文件
                -p 文件 存在且为命令管道文件
                -S 文件 存在且为套接字文件
            文件权限测试
                -r 文件 存在且可读
                -w 文件 存在且可写
                -x 文件 存在且可执行
            文件特殊权限测试
                -g 文件 存在且拥有sgid权限
                -u 文件 存在且拥有suid权限
                -k 文件 存在且拥有sticky权限
            文件大小测试
                -s 文件 存在且非空
            文件是否打开
                -d fd  fd表示文件描述符是否打开且与某终端是否相关
                -N 文件 文件自从上一次被读取后是否被修改过
                -O 文件 当前有效用户是否为文件属主
                -G 文件 当前有效用户是否为文件属组
                
            双目测试
                文件1 -ef 文件2 是否指向同一个设备上的相同inode
                文件1 -nt 文件2 文件1是否新于文件2 
                文件1 -ot 文件2 文件1是否旧与文件2
            
        典型用法
            [[ -d dir1 ]] || mkdir dir1  如果不存在目录就创建
            
        组合测试条件
            逻辑运算
            第一种方式:
                &&     与
                ||     或
                !      非
                
                [ -e 文件 ] && [ -r 文件 ]  文件存在且可读
            
            第二种方式
                -a     与
                -o     或
                [ -e test.sh -a -x test.sh ] 文件存在且可执行
                
        
        bash自定义退出状态码
                exit [n] 
                注意:脚本中一旦遇到exit命令,会立即终止,退出状态取决于exit后面的数字
                如果未给脚本指定退出状态码,整个脚本的退出状态码取决于脚本中执行的最后一条命令的状态码
                
               
       

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值