美文网首页
shell-变量

shell-变量

作者: 吃猫的鱼0 | 来源:发表于2018-11-28 22:26 被阅读0次

    变量类型

    运行shell时,会同时存在三种变量:

    1. 局部变量
      局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。
    2. 环境变量
      所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。
    3. shell变量
      shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行

    定义变量

    Shell 支持以下三种定义变量的方式:
    variable=value
    variable='value'
    variable="value"

    命名规则

    Shell 变量的命名规范和大部分编程语言都一样:

    1. 变量名由数字、字母、下划线组成;
    2. 必须以字母或者下划线开头;
    3. 不能使用 Shell 里的关键字(通过 help 命令可以查看保留关键字)

    使用变量

    使用一个定义过的变量,只要在变量名前面加美元符号即可,如: author="严长生" echoauthor
    echo ${author}
    建议使用第二种加中括号的

    修改变量的值

    已定义的变量,可以被重新赋值,如:

    url="http://c.biancheng.net"
    echo ${url}
    url="http://c.biancheng.net/cpp/shell/"
    echo ${url}
    

    第二次对变量赋值时不能在变量名前加,只有在使用变量时才能加

    单引号和双引号的区别

    url="http://c.biancheng.net"
    website1='C语言中文网:${url}'
    website2="C语言中文网:${url}"
    echo $website1
    echo $website2
    

    运行结果:
    C语言中文网:${url}
    C语言中文网:http://c.biancheng.net

    以单引号' '包围变量的值时,单引号里面是什么就输出什么,即使内容中有变量和命令(命令需要反引起来)也会把它们原样输出

    只读变量

    使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变
    例子:

    myUrl="http://see.xidian.edu.cn/cpp/shell/"
    readonly myUrl
    myUrl="http://see.xidian.edu.cn/cpp/danpianji/"
    

    删除变量

    使用 unset 命令可以删除变量。语法:
    unset variable_name
    变量被删除后不能再次使用;unset 命令不能删除只读变量。

    myUrl="http://see.xidian.edu.cn/cpp/u/xitong/"
    unset myUrl
    echo $myUrl
    

    变量赋值

    Shell 也支持将命令的执行结果赋值给变量,常见的有以下两种方式:
    variable=command
    variable=$(command)
    建议使用第二种

    特殊变量

    $0  当前脚本的文件名
    $n  传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2。
    $#  传递给脚本或函数的参数个数。
    $*  传递给脚本或函数的所有参数。
    $@  传递给脚本或函数的所有参数。被双引号(" ")包含时,与 $* 稍有不同,下面将会讲到。
    $?  上个命令的退出状态,或函数的返回值。
    $$  当前Shell进程ID。对于 Shell 脚本,就是这些脚本所在的进程ID。
    

    转义字符

    \\  反斜杠
    \a  警报,响铃
    \b  退格(删除键)
    \f  换页(FF),将当前位置移到下页开头
    \n  换行
    \r  回车
    \t  水平制表符(tab键)
    \v  垂直制表符
    

    命令替换

    命令替换是指Shell可以先执行命令,将输出结果暂时保存,在适当的地方输出。
    命令替换的语法:
    command
    例子:
    DATE=date
    echo "Date is DATE" USERS=`who | wc -l` echo "Logged in user areUSERS"
    UP=date ; uptime
    echo "Uptime is $UP"

    变量替换

    变量替换可以根据变量的状态(是否为空、是否定义等)来改变它的值

    {var} 变量本来的值{var:-word} 如果变量 var 为空或已被删除(unset),那么返回 word,但不改变 var 的值。
    {var:=word} 如果变量 var 为空或已被删除(unset),那么返回 word,并将 var 的值设置为 word。{var:?message} 如果变量 var 为空或已被删除(unset),那么将消息 message 送到标准错误输出,可以用来检测变量 var 是否可以被正常赋值。
    若此替换出现在Shell脚本中,那么脚本将停止运行。
    ${var:+word} 如果变量 var 被定义,那么返回 word,但不改变 var 的值。

    相关文章

      网友评论

          本文标题:shell-变量

          本文链接:https://www.haomeiwen.com/subject/emlimftx.html