zoukankan      html  css  js  c++  java
  • Shell脚本的学习笔记一:变量

    三种变量:

    1. 局部变量:局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。
    2. 环境变量:所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。
    3. shell变量:shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行
    #!/bin/bash
    # 第一个脚本测试
    echo "第一个脚本测试"
    echo "Are you ready? 输入"
    read readin
    echo "输入为"
    echo $readin
    echo ""
    xxx1="I love you"
    echo $xxx1
    xxx2='I love you'
    echo $xxx2
    xxx3=I_love_you
    echo "Tomorrow, I would say '${xxx3}!' to you"        #[代码1]
    unset xxx3                      #[代码2]
    echo $xxx3
    xxx4='test: ${xxx1}'            #使用单引号 [代码3]
    echo $xxx4
    xxx4="test: ${xxx1}"            #使用双引号,重新赋值xxx4 [代码4]
    echo $xxx4
    readonly xxx4                   #将变量定义为只读变量 [代码5]
    xxx4="True"                     #试图改变只读变量,报错 [代码6]
    unset xxx4                      #试图删除只读变量,报错 [代码7]
    

    输出结果如下

    第一个脚本测试
    Are you ready? 输入
    y
    输入为
    y
                                                      #输出"",为空
    I love you                                        #[代码1]
    I love you                                        #[代码2]
    Tomorrow, I would say 'I_love_you!' to you        #[代码1]
                                                      #无任何输出,[代码2]体现
    test: ${xxx1}                                     #[代码3]
    test: I love you                                  #[代码4]
    ./test.sh: 行 22: xxx4: 只读变量                   #[代码6]
    ./test.sh: 第 23 行: unset: xxx4: 无法取消设定: 只读 variable         #[代码7]
    

    第1行的#!是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种Shell;后面的/bin/bash就是指明了解释器的具体位置。
    第2行的#及其后面的内容是注释。
    第3行的 echo 命令用于向标准输出文件,输出文本。使用echo输出命令时,可使用echo "xxxx"直接输出;若要输出变量要使用echo $xxx(xxx为变量名)。

    定义、使用和修改变量

    1. 定义变量
    Shell 支持以下三种定义变量的方式:

    variable=value
    variable='value'
    variable="value"
    

    注意,赋值号=的周围不能有空格。
    variable 是变量名,value 是赋给变量的值。如果 value 不包含任何空白符(例如空格、Tab 缩进等),那么可以不使用引号;如果 value 包含了空白符,那么就必须使用引号包围起来。
    使用单引号和使用双引号也是有区别的。单引号[代码3],双引号[代码1][代码4]

    项目 功能
    单引号 原样输出,定义显示纯字符串,变量无效。
    双引号 定义字符串中附带有变量和命令并且想将其解析后再输出的变量。

    2. 使用变量
    使用一个定义过的变量,只要在变量名前面加美元符号$即可:echo $xxxecho ${xxx};变量名外面的花括号{ }是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界,如下第6行。
    3. 修改变量
    如果要修改变量,可以重新赋值。
    4. 将命令的结果赋值给变量
    Shell 也支持将命令的执行结果赋值给变量,常见的有以下两种方式:

    第一种:用反引号``包围 第二种:用$()包围
    variable=`command` variable=$(command)
    不推荐:反引号和单引号非常相似,容易产生混淆 推荐:区分明显

    例如,在当前文件夹下有test.txt文件,并使用cat命令读取,如下(结果相同)。

    haveALook=$(cat test.txt)
    echo $haveALook
    haveALook=`cat test.txt`
    echo $haveALook
    

    5. 只读变量
    readonly xxxxx(xxxxx为变量名),只读变量的值不能被改变。[代码5][代码6][代码7]
    6. 删除变量
    使用 unset 命令可以删除变量:unset xxxxx[代码2]

    执行脚本

    使用chmod +x xxx.shchmod 755 xxx.sh为脚本添加执行权限。
    执行脚本时,在脚本所在目录输入./xxx.sh执行脚本。./表示当前目录,整条命令的意思是执行当前目录下的 xxx.sh 脚本。如果不写./,Shell会到系统路径(由 PATH 环境变量指定)下查找。
    类似,source 命令也可读取并在当前环境中执行脚本,同时还可返回脚本中最后一个命令的返回状态;如果没有返回值则返回 0,代表执行成功;如果未找到指定的脚本则返回 false。

  • 相关阅读:
    【HAOI2014】走出金字塔
    【HAOI2008】圆上的整点
    LOJ #116 有源汇点有上下界的最大流
    ZOJ [P2314] 无源汇点有上下界模版
    最小费用最大流模版
    最大流模版 dinic
    最大流模版 EK
    HDU [P1533]
    HDU [2255] 奔小康赚大钱
    POJ [P2289] Jamie's Contact Groups
  • 原文地址:https://www.cnblogs.com/Yogile/p/10544127.html
Copyright © 2011-2022 走看看