• Shell总结02-shell变量、赋值与替换


    变量

    shell并不区分变量的类型,或者说变量都是弱类型的,本质上都是字符串,但是如果变量值中只含有数字,shell还是支持对其进行算术运算

    赋值

    常见的赋值操作符有=(在其前后没有空白符)和let

    # let 赋值
    a=123
    let b=a+1
    echo "value of a is $b"  #value of a is 124
    
    # = 赋值
    a="hello world"
    echo "${a}"      #hello world
    
    # in 赋值
    for var in 7 8 9 11
    do
      echo  "$var"
    done
    
    # read 赋值
    echo "Please input value for a "
    read a
    echo "The value of a is $a."
    
    # 命令赋值
    dir=`pwd`
    dirs=`ls -l`
    
    R=$(cat /etc/redhat-release)
    arch=$(uname -m)
    
    # 1 let 可以对纯数字的变量进行简单的算术运算
    # 2 = 绝大多数赋值由=完成,但是=也有比较是否相等的功(-eq),建议条件判断时候用-eq
    # 3 in 赋值表达式类似python循环中的表达式
    # 4 read 赋值常用在交互场景获取标准输入值
    # 5 命令赋值中的反引号:`cmd`与$(cmd) 功能类似,都是命令替换的作用
    
    

    引用与替换

    value='l i n  u   x'
    
    VAR_A=value
    VAR_B=$value
    VAR_C=${value}
    
    VAR_G="value"
    VAR_H="$value"
    VAR_I="${value}"
    
    VAR_D='value'
    VAR_E='$value'
    VAR_F='${value}'
     
    echo VAR_A  #value
    echo VAR_B  #l i n u x
    echo VAR_C  #l i n u x
    
    echo VAR_G  #value
    echo VAR_H  #l i n  u   x
    echo VAR_I  #l i n  u   x
    
    echo VAR_D  #value
    echo VAR_E  #$value
    echo VAR_F  #${value}
    
    
    # 1.变量赋值时候,赋值符号=的两侧不能有空格存在,如果存在shell解释器会将其解释为:命令 参数
    # 2.使用单引号''时,变量只会作为字符串显示,不会发生变量替换
    # 3.使用双引号""时,可以使用变量替换,引号内变量将会保留变量的空白符(VAR_H)。没有引号则会去掉重复的空格(VAR_B)
    # 4.$value这种写法是${value}的简化形式,使用完整形式会让编译器跟容易识别变量范围从而更保险一些。
    
    

    特殊变量

    #位置参数
    $0		#命令行参数:$0:脚本名称
    $1, $2...$n	#命令行参数,$1 第一个参数,$2第二个,$9之后的参数要有大括号,如 ${10}
    $*		#代表所有位置参数(不包括脚本本身)
    $@ 		#代表所有位置参数(不包括脚本本身)
    $# 		#所有位置参数个数(不包括脚本本身)
    $?  	        #上一个指令的返回值(0成功,非0有错误)
    $$		#Shell本身的PID
    $!		#Shell最后运行的后台进程的PID
    
    #环境变量
    #使用env或者export查看当前生效的环境变量,export可以将其环境变量导出到子进程,反之则不行
    
    
  • 相关阅读:
    Eclipse安装Pydev插件时所遇到的问题
    打开Eclipse弹出“No java virtual machine was found..."的解决方法
    使用adb报错;error: unknown host service
    itools安装程序无法创建临时文件夹
    多线程十二之ConcurrentHashMap1.8实现分析
    多线程十一之ConcurrentHashMap1.7源码分析
    多线程十之CopyOnWriteArrayList源码分析
    多线程学习笔记九之ThreadLocal
    多线程学习笔记八之线程池ThreadPoolExecutor实现分析
    多线程学习笔记七之信号量Semaphore
  • 原文地址:https://www.cnblogs.com/elfcafe/p/13079541.html
Copyright © 2020-2023  润新知