[笔记]shell变量基础

变量命名:使用英文,数字及 _ (下划线)组成,开头不能是数字,长度无限制,严格区分大小写

变量设置:变量名=变量值
    注意:等号两边无空格
       可以把变量值用单引号或双引号括起来
       不支持所有中文符号(包括中文的单双引号)
       可使用反单引号(Tab键上方) `COMMAND` 或$(COMMAND)来取得COMMAND的输出
       使用"\"转义可将特殊字符如\ $ ! 空格符 等变为普通字符
       可在script中添加'shopt -s -o nounset'来强制变量必须声明后才能使用,避免误输入
       
变量值的取得:$变量名  或  ${变量名}
    注意:若变量的后面接有其他符合命名规则的字符,必须用 {} 隔开,以免造成shell误判断
    
变量的取消:(注:当变量属性为只读时无法操作)
    unset 变量名或函数名
    unset -v 变量名
    unset -f 函数名
变量的清空:将变量的内容删除使其值为null(空),但变量仍然存在
    变量名=
    注意:变量的取消与清空的区别(变量是否存在)
    
设置时单双引号的区别:
    双引号:替换其中的变量,命令执行结果,算术运算结果
        注:当要在双引号中使用 $ 符,需要使用 \ 转义
    单引号:不进行任何操作
    
变量类型及作用域:
    环境变量:也称全局变量,通常以大写字符表示,所有shell环境都有效
    自定义变量:也称局部变量,仅在变量设定时所处的shell中有效,无法影响其他shell环境
       子进程仅继承父进程的环境变量
       使用 env 命令可以查看系统环境变量
       使用 set 命令可以查看所有变量(环境变量和用户自定义变量)
       使用" export 变量名 "可将用户自定义变量变为环境变量

只读变量的设置:
    readonly 或 readonly -p :显示当前只读属性的变量列表
    readonly 变量名 :设置只读变量
    readonly -f 函数名 :设定函数不可修改
    readonly -a 数组变量 :设定数组变量只读
    declare -r 变量名 :设定只读变量
变量属性的调整:
    使用declare命令,具体用法自行man查询
    
变量内容的删除与替换:(图片截自《鸟哥私房菜基础篇》第三版p315)

wKiom1aAxe-xLf14AADLRHqUYRk115.jpg


变量内容的测试与替换:(图片截自《鸟哥私房菜基础篇》第三版p316)

wKiom1aAxgigRk9sAAIiwQ_Aim8504.jpg


字符串相关处理:
    ${变量:位置起点} :由指定位置的字符开始截取字符串
    ${变量:位置起点:长度} ;由指定位置的字符开始截取指定长度的字符串
    ${@:起点} :由指定起点开始,获取后方{包括起点}的所有位置参数[位置参数说明见补充部分]
    ${@:起点:个数} :由指定起点开始获取指定个数的位置参数
    ${#变量名} :获取变量字符串的长度
    
命令替换:将命令执行后的标准输出存放到变量中
    1.变量名=$(COMMAND)
    2.变量名=`COMMAND`
        注意:法2中COMMAND处不是单引号而是反引号(Tab键上方)
           为方便查看,一般建议采用方法1做替换


补充:
    $? :上条命令执行返回值,0代表成功,非0代表执行错误

            $?的参考值

            0    成功退出

            >0    退出失败

            1-125    命令退出失败,失败返回的相关值由程序定义(如程序内退出执行 exit 2则返回2)

            126    命令找到了,但无法执行

            127    命令找不到

            >128    命令因受到信号而死亡

    $$ :当前bash shell进程编号
    $! :上一个后台程序的进程编号
       以" test.sh  A  B  C " 为例
    $# :位置参数的个数,上例中共ABC三个参数,即$#值为3
    $* :代表所有位置参数,并且视为一个字符串,上例中$*值为字符串"A B C"
    $@ :代表所有未知参数,但代表各参数组成的串行,上例中$@值为"A""B""C"三个字符串
    $1-$n :传入程序或函数式的参数,当n>10时需使用${n},上例中test.sh即$0, A即$1, 以此类推



^_^

你可能感兴趣的:(shell,变量)